@yamcs/opi 1.3.13 → 1.3.14
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 +1 -1
- package/dist/opi.js.map +2 -2
- package/dist/opi.standalone.js +1 -1
- package/package.json +5 -1
package/dist/opi.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
function Bu(p){let t=document.createElement("canvas").getContext("2d");t.fillStyle=p;let e=String(t.fillStyle),i=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return i?new m(parseInt(i[1],16),parseInt(i[2],16),parseInt(i[3],16)):m.BLACK}var m=class p{constructor(t,e,i,r=255){this.red=t;this.green=e;this.blue=i;this.alpha=r}red;green;blue;alpha;static TRANSPARENT=new p(0,0,0,0);static BLACK=new p(0,0,0);static BLUE=new p(0,0,255);static CYAN=new p(0,255,255);static DARK_GRAY=new p(150,150,150);static GRAY=new p(200,200,200);static GREEN=new p(0,255,0);static LIGHT_BLUE=new p(153,186,243);static ORANGE=new p(255,128,0);static PINK=new p(255,0,255);static PURPLE=new p(128,0,255);static RED=new p(255,0,0);static WHITE=new p(255,255,255);static YELLOW=new p(255,255,0);static BUTTON=new p(239,240,241);static BUTTON_DARKER=new p(164,168,172);static BUTTON_DARKEST=p.BLACK;static BUTTON_LIGHTEST=p.WHITE;withAlpha(t){return new p(this.red,this.green,this.blue,t)}mixWith(t,e){let i=Math.floor(this.red*e+t.red*(1-e)),r=Math.floor(this.green*e+t.green*(1-e)),s=Math.floor(this.blue*e+t.blue*(1-e));return new p(i,r,s)}brighter(){let{red:t,green:e,blue:i}=this,r=Math.floor(1/(1-.7));return t===0&&e===0&&i===0?new p(r,r,r):(t>0&&t<r&&(t=r),e>0&&e<r&&(e=r),i>0&&i<r&&(i=r),new p(Math.min(Math.floor(this.red/.7),255),Math.min(Math.floor(this.green/.7),255),Math.min(Math.floor(this.blue/.7),255)))}darker(){return new p(Math.max(Math.floor(this.red*.7),0),Math.max(Math.floor(this.green*.7),0),Math.max(Math.floor(this.blue*.7),0))}contrast(){return new p(this.red,255-this.green,255-this.blue)}hex(){let t=this.red.toString(16);t=t.length==1?"0"+t:t;let e=this.green.toString(16);e=e.length==1?"0"+e:e;let i=this.blue.toString(16);i=i.length==1?"0"+i:i;let r=this.alpha.toString(16);return r=r.length==1?"0"+r:r,`#${t}${e}${i}${r}`}getRGBValue(){return this}equals(t){return t&&this.toString()===t.toString()}toString(){return`rgba(${this.red},${this.green},${this.blue},${this.alpha})`}};var ye=class{writeInfo(t){console.log(t)}writeError(t){console.error(t)}writeWarning(t){console.warn(t)}};var be=class{openConfirmDialog(t,e){return confirm(e)}openInformationDialog(t,e){alert(e)}openWarningDialog(t,e){alert(e)}openErrorDialog(t,e){alert(e)}openPasswordDialog(t,e,i){let r=prompt(e);return r?r===i:!1}};var Tr=p=>(document.removeEventListener("click",Tr,!0),p.preventDefault(),p.stopPropagation(),!1);function Rr(p){return(p.buttons&1)===1||p.buttons===void 0&&p.which==1}var Ps=5;function Wu(p,t,e,i){return Math.sqrt((e-p)*(e-p)+(i-t)*(i-t))}function vs(p,t){return p&&t&&p.id===t.id}var We=class{constructor(t,e,i){this.display=t;this.canvas=e;this.hitCanvas=i;e.addEventListener("click",r=>this.onCanvasClick(r),!1),e.addEventListener("mousedown",r=>this.onCanvasMouseDown(r),!1),e.addEventListener("mouseup",r=>this.onCanvasMouseUp(r),!1),e.addEventListener("mouseout",r=>this.onCanvasMouseOut(r),!1),e.addEventListener("mousemove",r=>this.onCanvasMouseMove(r),!1)}display;canvas;hitCanvas;grabbing=!1;grabTarget;grabPoint;documentMouseMoveListener=t=>this.onDocumentMouseMove(t);documentMouseUpListener=t=>this.onDocumentMouseUp(t);prevEnteredRegion;toPoint(t){let e=this.canvas.getBoundingClientRect();return{x:t.clientX-e.left,y:t.clientY-e.top}}onCanvasClick(t){this.display.clearSelection();let e=this.toPoint(t);if(this.display.editMode)this.selectSingleWidget(e.x,e.y);else{let i=this.hitCanvas.getActiveRegion(e.x,e.y);i&&i.click&&i.click({clientX:t.clientX,clientY:t.clientY,point:e})}}onCanvasMouseDown(t){if(!this.display.editMode&&(document.removeEventListener("click",Tr,!0),Rr(t))){let e=this.toPoint(t),i=document.activeElement;this.display.rootPanel.contains(i)&&(i instanceof HTMLInputElement||i instanceof HTMLTextAreaElement||i instanceof HTMLSelectElement)&&i.blur();let r=this.hitCanvas.getActiveRegion(e.x,e.y);return r&&r.mouseDown&&r.mouseDown({clientX:t.clientX,clientY:t.clientY,point:e}),r&&r.grab&&(this.grabPoint={...e},this.grabTarget=r),t.preventDefault(),t.stopPropagation(),!1}}onCanvasMouseUp(t){if(this.display.editMode)return;let e=this.toPoint(t),i=this.hitCanvas.getActiveRegion(e.x,e.y);i&&i.mouseUp&&i.mouseUp()}onCanvasMouseOut(t){this.prevEnteredRegion&&this.prevEnteredRegion.mouseOut&&this.prevEnteredRegion.mouseOut(),this.prevEnteredRegion=void 0,t.preventDefault(),t.stopPropagation()}onCanvasMouseMove(t){let e=this.toPoint(t),i=this.hitCanvas.getActiveRegion(e.x,e.y);this.prevEnteredRegion&&this.prevEnteredRegion.mouseOut&&(vs(this.prevEnteredRegion,i)||this.prevEnteredRegion.mouseOut()),i&&i.mouseEnter&&(vs(this.prevEnteredRegion,i)||i.mouseEnter()),this.prevEnteredRegion=i;let r=i&&i.cursor?i.cursor:"auto";if(r!=this.canvas.style.cursor&&(this.canvas.style.cursor=r),!this.grabbing&&i&&i.tooltip?this.display.setTooltip(i.tooltip()):this.display.setTooltip(void 0),this.grabPoint&&!this.grabbing&&Rr(t)){let s=Wu(this.grabPoint.x,this.grabPoint.y,e.x,e.y);Math.abs(s)>Ps&&(this.initiateGrab(),Ps>0&&this.grabPoint&&(this.grabPoint=e))}this.grabbing&&this.grabTarget&&Rr(t)&&this.grabTarget.grab({clientX:t.clientX,clientY:t.clientY,point:e,dx:e.x-this.grabPoint.x,dy:e.y-this.grabPoint.y})}initiateGrab(){document.addEventListener("click",Tr,!0),document.addEventListener("mouseup",this.documentMouseUpListener),document.addEventListener("mousemove",this.documentMouseMoveListener),this.grabbing=!0}onDocumentMouseUp(t){if(this.grabbing){document.removeEventListener("mouseup",this.documentMouseUpListener),document.removeEventListener("mousemove",this.documentMouseMoveListener);let e=this.grabTarget;this.grabbing=!1,this.grabPoint=void 0,this.grabTarget=void 0,e?.grabEnd&&e.grabEnd()}}onDocumentMouseMove(t){this.onCanvasMouseMove(t)}selectSingleWidget(t,e){let i=this.display.instance;if(i)for(let r of i.widgets.slice().reverse()){let s=r.holderX,o=r.holderY,n=r.holderX+r.holderWidth,a=r.holderY+r.holderHeight;if(s<t&&t<n&&o<e&&e<a)return this.display.selection=[r.wuid],!1}}};var He=class{constructor(t){this.utc=t}utc;formatDate(t,e){let i=this.utc,r="";if(e.year&&(r+=i?t.getUTCFullYear():t.getFullYear()),e.month){e.year&&(r+="-");let s=(i?t.getUTCMonth():t.getMonth())+1;r+=(s<10?"0":"")+s}if(e.day){e.month&&(r+="-");let s=i?t.getUTCDate():t.getDate();r+=(s<10?"0":"")+s}return r}formatTime(t,e){let i=this.utc,r="";if(e.hours){let s=i?t.getUTCHours():t.getHours();r+=(s<10?"0":"")+s}if(e.minutes){e.hours&&(r+=":");let s=i?t.getUTCMinutes():t.getMinutes();r+=(s<10?"0":"")+s}if(e.seconds){e.minutes&&(r+=":");let s=i?t.getUTCSeconds():t.getSeconds();r+=(s<10?"0":"")+s}if(e.milliseconds){e.seconds&&(r+=".");let s=i?t.getUTCMilliseconds():t.getMilliseconds();r+=(s<10?"00":s<100?"0":"")+s}return r}};var _s="rgb(255,255,255)",Hu=!!navigator.brave,ke=class p{constructor(t,e,i){this.parent=t;let r=document.createElement("canvas");r.width=e??r.width,r.height=i??r.height,this.ctx=r.getContext("2d",{willReadFrequently:!0}),this.root=t?.root||t}parent;ctx;regionsByColor=new Map;root;clear(){this.regionsByColor.clear(),this.ctx.fillStyle=_s,this.ctx.fillRect(0,0,this.ctx.canvas.width,this.ctx.canvas.height)}beginHitRegion(t){let e=(this.root||this).generateUniqueColor(t);return this.ctx.beginPath(),this.ctx.fillStyle=e,e}getActiveRegion(t,e){let i=this.ctx.getImageData(t,e,1,1).data,r=`rgb(${i[0]},${i[1]},${i[2]})`;return this.regionsByColor.get(r)||void 0}createChild(t,e){return new p(this,t,e)}transferToParent(t,e,i,r){if(!this.parent)throw new Error("No parent to transfer to");this.parent.ctx.drawImage(this.ctx.canvas,t,e,i,r)}generateUniqueColor(t){for(;;){let e=Math.round(Math.random()*255),i=Math.round(Math.random()*255),r=Math.round(Math.random()*255),s=`rgb(${e},${i},${r})`;if(!this.regionsByColor.has(s)&&s!==_s)return Hu?(this.regionsByColor.set(`rgb(${e-1},${i-1},${r-1})`,t),this.regionsByColor.set(`rgb(${e-1},${i-1},${r})`,t),this.regionsByColor.set(`rgb(${e-1},${i-1},${r+1})`,t),this.regionsByColor.set(`rgb(${e-1},${i},${r-1})`,t),this.regionsByColor.set(`rgb(${e-1},${i},${r})`,t),this.regionsByColor.set(`rgb(${e-1},${i},${r+1})`,t),this.regionsByColor.set(`rgb(${e-1},${i+1},${r-1})`,t),this.regionsByColor.set(`rgb(${e-1},${i+1},${r})`,t),this.regionsByColor.set(`rgb(${e-1},${i+1},${r+1})`,t),this.regionsByColor.set(`rgb(${e},${i-1},${r-1})`,t),this.regionsByColor.set(`rgb(${e},${i-1},${r})`,t),this.regionsByColor.set(`rgb(${e},${i-1},${r+1})`,t),this.regionsByColor.set(`rgb(${e},${i},${r-1})`,t),this.regionsByColor.set(`rgb(${e},${i},${r})`,t),this.regionsByColor.set(`rgb(${e},${i},${r+1})`,t),this.regionsByColor.set(`rgb(${e},${i+1},${r-1})`,t),this.regionsByColor.set(`rgb(${e},${i+1},${r})`,t),this.regionsByColor.set(`rgb(${e},${i+1},${r+1})`,t),this.regionsByColor.set(`rgb(${e+1},${i-1},${r-1})`,t),this.regionsByColor.set(`rgb(${e+1},${i-1},${r})`,t),this.regionsByColor.set(`rgb(${e+1},${i-1},${r+1})`,t),this.regionsByColor.set(`rgb(${e+1},${i},${r-1})`,t),this.regionsByColor.set(`rgb(${e+1},${i},${r})`,t),this.regionsByColor.set(`rgb(${e+1},${i},${r+1})`,t),this.regionsByColor.set(`rgb(${e+1},${i+1},${r-1})`,t),this.regionsByColor.set(`rgb(${e+1},${i+1},${r})`,t),this.regionsByColor.set(`rgb(${e+1},${i+1},${r+1})`,t)):this.regionsByColor.set(s,t),s}}};function xt(p,t,e,i,r){return D({x:p,y:t,width:e,height:i},r/2)}function Tt(p,t,e,i,r){let s=Math.sin(r),o=Math.cos(r),n=p-e,a=t-i;return{x:n*o-a*s+e,y:n*s+a*o+i}}function D(p,t,e){return e===void 0&&(e=t),{x:p.x+e,y:p.y+t,width:p.width-(e+e),height:p.height-(t+t)}}function Cr(p){return{x:Math.round(p.x)+.5,y:Math.round(p.y)+.5,width:Math.round(p.width),height:Math.round(p.height)}}function Rs(p,t){let e=p.x,i=p.y,r=e+p.width,s=i+p.height;if(r<e){let u=e;e=r,r=u}if(s<i){let u=i;i=s,s=u}let o=t.x,n=t.y,a=o+t.width,l=n+t.height;if(a<o){let u=o;o=a,a=u}if(l<n){let u=n;n=l,l=u}let c=Math.max(e,o),h=Math.max(i,n);return{x:c,y:h,width:Math.min(r,a)-c,height:Math.min(s,l)-h}}function wt(p,t,e){return{x:p.x+t,y:p.y+e}}function Kt(p,t,e){return p.map(i=>wt(i,t,e))}function $(p){return p*Math.PI/180}function yt(p,t,e){let i=Math.floor(p*Math.cos(t)),r=Math.floor(-p*Math.sin(t));return{x:e.x+e.width/2+i,y:e.y+e.height/2+r}}function De(p,t){let e=t.x-p.x,i=t.y-p.y,r=Math.sqrt(Math.pow(e,2)+Math.pow(i,2)),s=Math.acos(e/r);return i>0&&(s=2*Math.PI-s),new at(Math.floor(r),s)}var at=class{constructor(t,e){this.r=t;this.theta=e}r;theta;toPoint(){let t=Math.floor(this.r*Math.cos(this.theta)),e=Math.floor(-this.r*Math.sin(this.theta));return{x:t,y:e}}};function Dt(p,t){return p.map(e=>({x:e.x*t,y:e.y*t}))}function Ne(p){return p.map(t=>({x:t.x+.5,y:t.y+.5}))}function Fe(p,t,e,i,r,s,o){p.beginPath(),!s&&!o?p.rect(t,e,i,r):(i<2*s&&(s=i/2),r<2*o&&(o=r/2),p.moveTo(t+s,e),p.lineTo(t+i-s,e),p.quadraticCurveTo(t+i,e,t+i,e+o),p.lineTo(t+i,e+r-o),p.quadraticCurveTo(t+i,e+r,t+i-s,e+r),p.lineTo(t+s,e+r),p.quadraticCurveTo(t,e+r,t,e+r-o),p.lineTo(t,e+o),p.quadraticCurveTo(t,e,t+s,e))}function Nt(p,t,e,i){return p===null?"":typeof p=="string"?i==="BINARY_STRING"?ku(p):p:typeof p=="number"?e===-1?Ts(t,p,void 0,3):Ts(t,p,e,e):p instanceof Date?p.toISOString().replace("T"," ").replace("Z",""):String(p)}function ku(p){let t="";for(let e=0;e<p.length;e++){let i=p.charCodeAt(e).toString(16);t+=i.length===2?i:"0"+i}return t&&`0x${t.toUpperCase()}`}function Ts(p,t,e,i){if(t==null||t==null)return"";switch(p){case 0:case 1:let r={minimumFractionDigits:e,maximumFractionDigits:i,useGrouping:!1,roundingMode:"halfEven"};return Intl.NumberFormat("en-US",r).format(t);case 2:return t.toExponential(i).replace("e+","E").toUpperCase();case 3:return"0x"+t.toString(16).toUpperCase();default:return console.warn(`Unexpected format type ${p}`),String(t)}}var Ge=class p{constructor(t,e){this.canvas=t;this.ctx=t.getContext("2d"),this.hitCanvas=e||new ke,this.hitCtx=this.hitCanvas.ctx}canvas;ctx;hitCanvas;hitCtx;createChild(t,e){let i=this.hitCanvas.createChild(t,e),r=document.createElement("canvas");return r.width=t,r.height=e,new p(r,i)}translate(t,e){this.ctx.translate(t,e),this.hitCtx.translate(t,e)}copy(t,e,i){this.ctx.drawImage(t.canvas,e,i),t.hitCanvas.transferToParent(e,i,t.canvas.width,t.canvas.height)}copyFitted(t,e,i,r,s){let{width:o,height:n}=t.canvas,a=o/n,l=r,c=l/a;c>s&&(c=s,l=c*a),this.copyScaled(t,e,i,l,c)}copyScaled(t,e,i,r,s){this.ctx.drawImage(t.canvas,e,i,r,s),t.hitCanvas.transferToParent(e,i,r,s)}clearHitCanvas(){this.hitCanvas.clear()}fillCanvas(t){this.ctx.fillStyle=t.toString(),this.ctx.fillRect(0,0,this.ctx.canvas.width,this.ctx.canvas.height)}clearCanvas(){this.ctx.clearRect(0,0,this.ctx.canvas.width,this.ctx.canvas.height)}scaleCanvas(t,e){this.ctx.canvas.style.width=t+"px",this.ctx.canvas.style.height=e+"px"}resize(t,e){(this.ctx.canvas.width!=t||this.ctx.canvas.height!=e)&&(this.ctx.canvas.width=t,this.ctx.canvas.height=e,this.hitCanvas.ctx.canvas.width=t,this.hitCanvas.ctx.canvas.height=e)}fillRect(t){"color"in t?this.ctx.fillStyle=t.color.toString():this.ctx.fillStyle=t.gradient,t.opacity!==void 0&&(this.ctx.globalAlpha=t.opacity),t.rx||t.ry?(Fe(this.ctx,t.x,t.y,t.width,t.height,t.rx||0,t.ry||0),this.ctx.fill()):this.ctx.fillRect(t.x,t.y,t.width,t.height),t.opacity!==void 0&&(this.ctx.globalAlpha=1)}fillText(t){this.ctx.textBaseline=t.baseline,this.ctx.textAlign=t.align,this.ctx.font=t.font.getFontString(),this.ctx.fillStyle=t.color.toString(),this.ctx.fillText(t.text,t.x,t.y)}fillEllipse(t){this.ctx.beginPath();let e=t.startAngle||0,i=t.endAngle===void 0?2*Math.PI:t.endAngle;this.ctx.ellipse(t.cx,t.cy,t.rx,t.ry,0,e,i,t.anticlockwise),"color"in t?this.ctx.fillStyle=t.color.toString():this.ctx.fillStyle=t.gradient,t.opacity!==void 0&&(this.ctx.globalAlpha=t.opacity),this.ctx.fill(),t.opacity!==void 0&&(this.ctx.globalAlpha=1)}strokeEllipse(t){t.dash&&this.ctx.setLineDash(t.dash),this.ctx.lineWidth=t.lineWidth||1,this.ctx.beginPath();let e=t.startAngle||0,i=t.endAngle===void 0?2*Math.PI:t.endAngle;this.ctx.ellipse(t.cx,t.cy,t.rx,t.ry,0,e,i,t.anticlockwise),"color"in t?this.ctx.strokeStyle=t.color.toString():this.ctx.strokeStyle=t.gradient,this.ctx.stroke(),t.dash&&this.ctx.setLineDash([])}measureText(t,e,i=!1){this.ctx.font=e.getFontString();let r=this.ctx.measureText(t),s;return r.fontBoundingBoxAscent!==void 0&&r.fontBoundingBoxDescent!==void 0?s={width:r.width,height:r.fontBoundingBoxAscent+r.fontBoundingBoxDescent}:s={width:r.width,height:e.height},i&&(s.width=Math.ceil(s.width),s.height=Math.ceil(s.height)),s}createLinearGradient(t,e,i,r){return this.ctx.createLinearGradient(t,e,i,r)}strokeRect(t){t.dash&&this.ctx.setLineDash(t.dash);let e=t.lineWidth||1;if(this.ctx.lineWidth=e,this.ctx.strokeStyle=t.color.toString(),t.crispen&&e){let i=D(t,e/2,e/2);t.rx||t.ry?(Fe(this.ctx,i.x,i.y,i.width,i.height,t.rx||0,t.ry||0),this.ctx.stroke()):this.ctx.strokeRect(i.x,i.y,i.width,i.height)}else t.rx||t.ry?(Fe(this.ctx,t.x,t.y,t.width,t.height,t.rx||0,t.ry||0),this.ctx.stroke()):this.ctx.strokeRect(t.x,t.y,t.width,t.height);t.dash&&this.ctx.setLineDash([])}strokePath(t){t.dash&&this.ctx.setLineDash(t.dash),this.ctx.beginPath();for(let e of t.path.segments)e.line?this.ctx.lineTo(e.x,e.y):this.ctx.moveTo(e.x,e.y);this.ctx.lineWidth=t.lineWidth||1,this.ctx.strokeStyle=t.color.toString(),t.opacity!==void 0&&(this.ctx.globalAlpha=t.opacity),this.ctx.stroke(),t.opacity!==void 0&&(this.ctx.globalAlpha=1),t.dash&&this.ctx.setLineDash([])}fillPath(t){this.ctx.beginPath();for(let e of t.path.segments)e.line?this.ctx.lineTo(e.x,e.y):this.ctx.moveTo(e.x,e.y);"color"in t?this.ctx.fillStyle=t.color.toString():this.ctx.fillStyle=t.gradient,t.opacity!==void 0&&(this.ctx.globalAlpha=t.opacity),this.ctx.fill("evenodd"),t.opacity!==void 0&&(this.ctx.globalAlpha=1)}addHitRegion(t){return this.hitCanvas.beginHitRegion(t),new Sr(this.hitCanvas.ctx)}},_=class p{segments=[];constructor(t,e){this.segments.push({x:t,y:e,line:!1})}static fromPoints(t){let e=t.findIndex(r=>r.y!==null);if(e===-1){let r=new p(0,0);return r.segments.length=0,r}let i=new p(t[e].x,t[e].y);for(let r=e+1;r<t.length;r++){let{x:s,y:o}=t[r];o!==null&&(r>0&&t[r-1].y===null?i.moveTo(s,o):i.lineTo(s,o))}return i}getBoundingBox(){let t={x:this.segments[0].x,y:this.segments[0].y},e={x:this.segments[0].x,y:this.segments[0].y};for(let i=0;i<this.segments.length;i++){let r=this.segments[i];r.x<t.x&&(t.x=r.x),r.x>e.x&&(e.x=r.x),r.y<t.y&&(t.y=r.y),r.y>e.y&&(e.y=r.y)}return{x:t.x,y:t.y,width:e.x-t.x,height:e.y-t.y}}lineTo(t,e){return this.segments.push({x:t,y:e,line:!0}),this}moveTo(t,e){return this.segments.push({x:t,y:e,line:!1}),this}closePath(){if(this.segments.length){let t=this.segments[0];this.segments.push({x:t.x,y:t.y,line:!0})}return this}translate(t,e){for(let i of this.segments)i.x+=t,i.y+=e;return this}},Sr=class{constructor(t){this.ctx=t}ctx;addRect(t,e,i,r){return this.ctx.fillRect(t,e,i,r),this}addEllipse(t,e,i,r,s,o,n,a){this.ctx.beginPath(),this.ctx.ellipse(t,e,i,r,s,o,n,a),this.ctx.fill()}addPath(t){this.ctx.beginPath();for(let e of t.segments)e.line?this.ctx.lineTo(e.x,e.y):this.ctx.moveTo(e.x,e.y);this.ctx.fill()}};var Pe=class{load(t){return Promise.resolve(t)}};var jt=class{constructor(t,e=[]){this.widget=t;for(let i of e)this.properties.set(i.name,i)}widget;properties=new Map;generators=[];clear(){this.properties.clear()}add(t){this.properties.set(t.name,t)}addGenerator(t){this.generators.push(t)}all(){return[...this.properties.values()]}loadProperty(t,e){if(t.hasNode(e.name)){if(e instanceof ve)e.value=t.getActions(e.name);else if(e instanceof Ce)e.value=t.getAutoScaleWidgets(e.name);else if(e instanceof w)e.value=t.getBoolean(e.name);else if(e instanceof Ft)e.value=t.getColorMap(e.name);else if(e instanceof S)e.value=t.getColor(e.name);else if(e instanceof B)e.value=t.getFloat(e.name);else if(e instanceof H)e.value=t.getFont(e.name);else if(e instanceof P)e.value=t.getInt(e.name);else if(e instanceof Gt)e.value=t.getMacros(e.name);else if(e instanceof Pt)e.value=t.getPoints(e.name);else if(!(e instanceof bt))if(e instanceof Re)e.value=t.getRules(e.name);else if(e instanceof Te)e.value=t.getScaleOptions(e.name);else if(e instanceof _e)e.value=t.getScripts(e.name);else if(e instanceof R)e.rawValue=t.getString(e.name);else if(e instanceof vt)e.value=t.getStringList(e.name);else if(e instanceof $t)e.value=t.getStringMap(e.name);else if(e instanceof Zt)e.value=t.getStringTable(e.name);else throw new Error(`Property ${e.name} has an unexpected type`)}}loadXMLValues(t){this.properties.forEach(e=>{this.loadProperty(t,e)}),this.resolveStringProperties();for(let e of this.generators)for(let i of e())this.properties.set(i.name,i),this.loadProperty(t,i);this.resolveStringProperties()}resolveStringProperties(){for(let t=0;t<2;t++)this.properties.forEach(e=>{if(e instanceof R){let i=e;i.rawValue!==void 0&&this.widget?e.value=this.widget.expandMacro(i.rawValue):e.value=i.rawValue}})}getProperty(t){return this.properties.get(t)}getValue(t,e=!1){let i=this.properties.get(t);if(i&&i.value!==void 0)return i.value;if(!e)throw new Error(`Missing property ${t}`)}setValue(t,e){let i=this.properties.get(t);if(!i)throw new Error(`Cannot set value of unknown property ${t}`);i.value=e}},Z=class{constructor(t,e){this.name=t;this.defaultValue=e;this.value=e}name;defaultValue;_value;listeners;get value(){return this._value}set value(t){if(this.value!==t){let e=this._value;if(this._value=t,this.listeners)for(let i of this.listeners)i(t,e)}}addListener(t){this.listeners=this.listeners||[],this.listeners.push(t)}removeListener(t){let e=this.listeners||[],i=e.indexOf(t);i!==-1&&e.splice(i,1)}printScriptValue(t){return String(t)}},R=class extends Z{rawValue;printScriptValue(t){return`"${t.replace('"','\\"')}"`}},bt=class extends Z{constructor(e,i){super(e);this.pvPropertyName=i}pvPropertyName},P=class extends Z{},B=class extends Z{},w=class extends Z{},S=class extends Z{printScriptValue(t){let{red:e,green:i,blue:r}={...t};return`ColorFontUtil.getColorFromRGB(${e}, ${i}, ${r})`}},H=class extends Z{printScriptValue(t){let{name:e,height:i,style:r}={...t};return`ColorFontUtil.getFont("${e}", ${i}, ${r})`}},Ft=class extends Z{printScriptValue(t){return`${t.code}`}},Pt=class extends Z{},ve=class extends Z{},Gt=class extends Z{},_e=class extends Z{},vt=class extends Z{},$t=class extends Z{},Zt=class extends Z{},Re=class extends Z{},Te=class extends Z{},Ce=class extends Z{};var Jt=class{actions=[];hookFirstActionToClick=!1;hookAllActionsToClick=!1;add(t){this.actions.push(t)}isClickable(){return this.actions.length&&(this.hookFirstActionToClick||this.hookAllActionsToClick)}getAction(t){if(!(t>=this.actions.length))return this.actions[t]}toString(){return this.actions.length===1?String(this.actions[0]):`${this.actions.length} actions`}};var Cs="description",K=class{properties;constructor(){this.properties=new jt(null,[new R(Cs,"")])}parseNode(t){this.properties.loadXMLValues(t)}get description(){return this.properties.getValue(Cs)}};var Ss="command",Ls="command_directory",As="wait_time",$e=class extends K{constructor(){super(),this.properties.add(new R(Ss,"")),this.properties.add(new R(Ls,"$(user.home)")),this.properties.add(new P(As,10))}execute(t){throw new Error("Unsupported action EXECUTE_CMD")}get command(){return this.properties.getValue(Ss)}get commandDirectory(){return this.properties.getValue(Ls)}get waitTime(){return this.properties.getValue(As)}toString(){return`Execute Command ${this.command}`}};var Nu=["Arial","Arial Black","Courier New","Helvetica","Tahoma","Verdana"],q=class p{constructor(t,e,i,r){this.name=t;this.style=i;r?this.height=e:p.LEGACY_FONT_SIZING?this.height=Math.round(e*16/15):this.height=Math.ceil(e*4/3)}name;style;static LEGACY_FONT_SIZING=!1;static ARIAL_9=new p("Arial",9,0,!1);static ARIAL_10=new p("Arial",10,0,!1);static ARIAL_11=new p("Arial",11,0,!1);static ARIAL_12_BOLD=new p("Arial",12,1,!1);height;scale(t){return new p(this.name,t*this.height,this.style,!0)}getFontString(){let t=this.name;return t.indexOf(" ")!==-1&&(t=`"${t}"`),this.style===1?`bold ${this.height}px ${t}`:this.style===2?`italic ${this.height}px ${t}`:this.style===3?`italic bold ${this.height}px ${t}`:(this.style!==0&&console.warn(`Unsupported font style ${this.style}`),`normal ${this.height}px ${t}`)}get bold(){return this.style===1||this.style===3}get italic(){return this.style===2||this.style===3}isWebSafe(){return Nu.indexOf(this.name)!==-1}};var Ue=class{BLACK=m.BLACK;BLUE=m.BLUE;CYAN=m.CYAN;DARK_GRAY=m.DARK_GRAY;GRAY=m.GRAY;GREEN=m.GREEN;LIGHT_BLUE=m.LIGHT_BLUE;ORANGE=m.ORANGE;PINK=m.PINK;PURPLE=m.PURPLE;RED=m.RED;WHITE=m.WHITE;YELLOW=m.YELLOW;getColorFromRGB(t,e,i){return new m(t,e,i)}getFont(t,e,i){return new q(t,e,i,!1)}};var Ye=class{constructor(t){this.display=t}display;writeInfo(t){this.display.getConsoleHandler().writeInfo(t)}writeError(t){this.display.getConsoleHandler().writeError(t)}writeWarning(t){this.display.getConsoleHandler().writeWarning(t)}};var Xe=class{createDoubleArray(t){return Array(t).fill(0)}createIntArray(t){return Array(t).fill(0)}toJavaDoubleArray(t){return[...t]}toJavaIntArray(t){return[...t]}};var ze=class{constructor(t,e){this.spreadsheet=t;this.scriptEngine=e}spreadsheet;scriptEngine;addModifiedListener(t){}addSelectionChangedListener(t){this.spreadsheet.addSelectionChangedListener(()=>{this.scriptEngine.schedule(()=>{let e=t.selectionChanged;e(this.spreadsheet.getSelection())})})}appendRow(){return this.spreadsheet.appendRow()}deleteColumn(t){this.spreadsheet.deleteColumn(t)}deleteRow(t){this.spreadsheet.deleteRow(t)}getCellText(t,e){return this.spreadsheet.getCellText(t,e)}getColumnCount(){return this.spreadsheet.getColumnCount()}getContent(){return this.spreadsheet.getContent()}getRowCount(){return this.spreadsheet.getRowCount()}getSelection(){return this.spreadsheet.getSelection()}insertColumn(t){this.spreadsheet.insertColumn(t)}insertRow(t){this.spreadsheet.insertRow(t)}isEmpty(){return this.spreadsheet.isEmpty()}refresh(){this.spreadsheet.refresh()}setCellBackground(t,e,i){this.spreadsheet.setCellBackground(t,e,i)}setCellForeground(t,e,i){this.spreadsheet.setCellForeground(t,e,i)}setCellText(t,e,i){this.spreadsheet.setCellText(t,e,i)}setColumnCellEditorData(t,e){this.spreadsheet.setColumnCellEditorData(t,e)}setColumnsCount(t){this.spreadsheet.setColumnsCount(t)}setContent(t){this.spreadsheet.setContent(t)}setRowBackground(t,e){this.spreadsheet.setRowBackground(t,e)}setRowForeground(t,e){this.spreadsheet.setRowForeground(t,e)}revealRow(t){}};var Ut=class{constructor(t,e,i){this.code=t;this.interpolate=e;this.autoscale=i;t===0||(t===1?(this.values=[0,1],this.colors=[[0,0,0],[255,255,255]]):t===2?(this.values=[0,.111,.365,.619,.873,1],this.colors=[[0,0,143],[0,0,255],[0,255,255],[255,255,0],[255,0,0],[128,0,0]]):t===3?(this.values=[0,.126,.251,.375,.5,.625,.749,.874,1],this.colors=[[0,0,0],[255,0,255],[0,0,255],[0,255,255],[0,255,0],[255,255,0],[255,128,0],[255,0,0],[255,255,255]]):t===4?(this.values=[0,.365,.746,1],this.colors=[[11,0,0],[255,0,0],[255,255,0],[255,255,255]]):t===5?(this.values=[0,1],this.colors=[[0,255,255],[255,0,255]]):t===6&&(this.values=[0,.5,1],this.colors=[[0,0,0],[255,0,0],[255,255,255]]))}code;interpolate;autoscale;values=[];colors=[];entries=[];dirty=!0;addMapping(t,e,i,r){this.values.push(t),this.colors.push([e,i,r]),this.dirty=!0}compile(){this.entries.length=0;for(let t=0;t<this.values.length;t++)this.entries.push([this.values[t],this.colors[t]]);this.entries.sort((t,e)=>t[0]<e[0]?-1:t[0]>e[0]?1:0)}lookup(t){this.dirty&&(this.compile(),this.dirty=!1);let e=this.binarySearch(t);if(e>=0)return this.entries[e][1];if(e=-e-1,e===0)return this.entries[e][1];if(e===this.entries.length)return this.entries[e-1][1];if(this.interpolate){let[i,r]=this.entries[e-1],[s,o]=this.entries[e],n=(t-i)/(s-i),a=Math.floor((o[0]-r[0])*n+r[0]),l=Math.floor((o[1]-r[1])*n+r[1]),c=Math.floor((o[2]-r[2])*n+r[2]);return[a,l,c]}else return this.entries[e-1][1]}getMinMax(){let t=Math.min.apply(Math,this.values),e=Math.max.apply(Math,this.values);return[t,e]}binarySearch(t){let e=0,i=this.entries.length-1;for(;e<=i;){let r=i+e>>1;if(t>this.entries[r][0])e=r+1;else if(t<this.entries[r][0])i=r-1;else return r}return-e-1}};var qe=class{constructor(t,e){this.action=t;this.widget=e}action;widget;getPropertyValue(t){let e=this.action.properties.getProperty(t);return e?e.value:null}setPropertyValue(t,e){let i=this.action.properties.getProperty(t);if(!i)throw new Error(`Cannot set value of unknown property ${t}`);i instanceof R?(e=e!==void 0?String(e):e,this.action.properties.setValue(t,e)):this.action.properties.setValue(t,e),this.widget.requestRepaint()}};var Ke=class{constructor(t){this.array=t}array;get(t){return this.array[t]}};var Ct=class{constructor(t){this._pv=t}_pv;getName(){return this._pv.name}getValue(){return this._pv.value??null}setValue(t,e){this._pv.pvEngine.setValue(new Date,this._pv.name,t)}isConnected(){return!this._pv.disconnected}isWriteAllowed(){return this._pv.writable}addListener(t){this._pv.addListener(()=>{t.valueChanged(this)})}removeListener(t){this._pv.removeListener(t)}};var St=class{constructor(t){this.widget=t}widget;executeAction(t){this.widget.executeActionByIndex(t)}getPVByName(t){let e=this.widget.display.getPV(t);return e?new Ct(e):null}getPV(t="pv_name"){let e=this.getPropertyValue(t);return e?this.getPVByName(e):null}getHookedActions(){let t=this.widget.getHookedActions().map(e=>new qe(e,this.widget));return new Ke(t)}getVar(t){return this.widget.vars.get(t)??null}setVar(t,e){this.widget.vars.set(t,e)}getPropertyValue(t){let e=this.widget.properties.getProperty(t);return e?e.value:null}setPropertyValue(t,e){let i=this.widget.properties.getProperty(t);if(!i)throw new Error(`Cannot set value of unknown property ${t}`);if(i instanceof R)e=e!==void 0?String(e):e,this.widget.properties.setValue(t,e);else if(i instanceof Ft){let r=0;switch(e){case"GrayScale":r=1;break;case"JET":r=2;break;case"ColorSpectrum":r=3;break;case"Hot":r=4;break;case"Cool":r=5;break;case"Shaded":r=6;break}let s=new Ut(r,!0,!0);this.widget.properties.setValue(t,s)}else this.widget.properties.setValue(t,e);this.widget.requestRepaint()}getName(){return this.getPropertyValue("name")}setX(t){this.setPropertyValue("x",t)}setY(t){this.setPropertyValue("y",t)}setWidth(t){this.setPropertyValue("width",t)}setHeight(t){this.setPropertyValue("height",t)}setEnabled(t){this.setPropertyValue("enabled",t)}setVisible(t){this.setPropertyValue("visible",t)}getValue(){return this.widget.value??null}setValue(t){this.widget.value=t}setValueInUIThread(t){this.setValue(t)}};var je=class extends St{table;spreadSheetTable;constructor(t,e){super(t),this.table=t,this.spreadSheetTable=new ze(this.table.spreadsheet,e)}getTable(){return this.spreadSheetTable}};var Ze=class extends St{xyGraph;constructor(t){super(t),this.xyGraph=t}clearGraph(){this.xyGraph.clearGraph()}getXBuffer(t){return this.xyGraph.getTrace(t).snapshot().map(i=>i.x)}getYBuffer(t){return this.xyGraph.getTrace(t).snapshot().map(i=>i.y)}};function Je(p,t){switch(p.widgetType){case"Table":return new je(p,t);case"XY Graph":return new Ze(p);default:return new St(p)}}var Qe=class{constructor(t,e){this.display=t;this.scriptEngine=e}display;scriptEngine;isActive(){return!0}getWidget(t){let e=this.display.findWidgetByName(t);if(e)return Je(e,this.scriptEngine)}};var ti=class{constructor(t){this.display=t}display;readTextFile(t){let e=this.display.resolvePath(t);var i=new XMLHttpRequest;if(i.open("GET",e,!1),i.send(null),i.status===200)return i.responseText;throw Error(`Cannot open ${e}`)}};var ei=class{constructor(t){this.display=t}display;fullScreen(){document.documentElement.requestFullscreen()}openConfirmDialog(t){return this.display.getDialogHandler().openConfirmDialog("Confirm Dialog",t)}openInformationDialog(t){this.display.getDialogHandler().openInformationDialog("Information",t)}openWarningDialog(t){this.display.getDialogHandler().openWarningDialog("Warning",t)}openErrorDialog(t){this.display.getDialogHandler().openErrorDialog("Error",t)}openPasswordDialog(t,e){return this.display.getDialogHandler().openPasswordDialog("Password Input Dialog",t,e)}};var ii=class{constructor(t){this.display=t}display;openInformation(t,e,i){this.display.getDialogHandler().openInformationDialog(e,i)}openConfirm(t,e,i){return this.display.getDialogHandler().openConfirmDialog(e,i)}openError(t,e,i){this.display.getDialogHandler().openErrorDialog(e,i)}};var Yt=class{constructor(t,e){this.name=t;this.pvEngine=e}name;pvEngine;_writable=!1;_units;_labels;_typeHint;_lowerDisplayLimit;_lowerAlarmLimit;_lowerWarningLimit;_upperWarningLimit;_upperAlarmLimit;_upperDisplayLimit;_time;_value;_severity="NONE";_indexValue;_precision=-1;_disconnected=!1;provider;get navigable(){return this.provider?.isNavigable()||!1}get units(){return this._units}set units(t){this._units=t,this.pvEngine.requestRepaint()}get labels(){return this._labels}set labels(t){this._labels=t,this.pvEngine.requestRepaint()}get lowerDisplayLimit(){return this._lowerDisplayLimit}set lowerDisplayLimit(t){this._lowerDisplayLimit=t,this.pvEngine.requestRepaint()}get lowerAlarmLimit(){return this._lowerAlarmLimit}set lowerAlarmLimit(t){this._lowerAlarmLimit=t,this.pvEngine.requestRepaint()}get lowerWarningLimit(){return this._lowerWarningLimit}set lowerWarningLimit(t){this._lowerWarningLimit=t,this.pvEngine.requestRepaint()}get upperWarningLimit(){return this._upperWarningLimit}set upperWarningLimit(t){this._upperWarningLimit=t,this.pvEngine.requestRepaint()}get upperAlarmLimit(){return this._upperAlarmLimit}set upperAlarmLimit(t){this._upperAlarmLimit=t,this.pvEngine.requestRepaint()}get upperDisplayLimit(){return this._upperDisplayLimit}set upperDisplayLimit(t){this._upperDisplayLimit=t,this.pvEngine.requestRepaint()}get precision(){return this._precision}set precision(t){this._precision=t,this.pvEngine.requestRepaint()}get writable(){return this._writable}set writable(t){this._writable=t,this.pvEngine.requestRepaint()}get disconnected(){return this._disconnected}set disconnected(t){this._disconnected=t,this.pvEngine.requestRepaint()}get time(){return this._time}get value(){return this._value}get indexValue(){return this._indexValue}get severity(){return this._severity}get typeHint(){return this._typeHint}get alarmName(){let t=this.toNumber();return t==null?"NONE":t<=(this.lowerAlarmLimit??NaN)?"LOLO":t>=(this.upperAlarmLimit??NaN)?"HIHI":t<=(this.lowerWarningLimit??NaN)?"LOW":t>=(this.upperWarningLimit??NaN)?"HIGH":"NONE"}toNumber(){if(this.value===null)return null;if(typeof this.value=="number")return this.value;if(typeof this.value=="boolean")return this.value?1:0;if(typeof this.indexValue!==void 0)return this.indexValue}setSample(t){this._time=t.time,this._value=t.value,this._indexValue=t.valueIndex,this._severity=t.severity,this._units=t.units,this._typeHint=t.typeHint,this.pvEngine.requestRepaint()}addListener(t){this.pvEngine.addListener(this.name,t)}removeListener(t){this.pvEngine.addListener(this.name,t)}toString(){if(this.value!==void 0)return String(this.value)}},Qt=(s=>(s.NONE="NONE",s.MINOR="MINOR",s.MAJOR="MAJOR",s.INVALID="INVALID",s.UNDEFINED="UNDEFINED",s))(Qt||{});var Fu=["yyyy","MM","dd","HH","mm","ss","nnnnnnnnn"],ri=class{constructor(t){this.display=t;this.pvEngine=t.pvEngine}display;pvEngine;checkPVValue(t){if(t.getValue()===null)throw new Error(`PV ${t.getName()} has no value.`)}createPV(t,e){let i=this.pvEngine.createPV(t);return new Ct(i)}writePV(t,e,i){this.pvEngine.createPV(t),this.pvEngine.setValue(new Date,t,e)}getDouble(t){this.checkPVValue(t);let e=t._pv.toNumber();return parseFloat(e??t.getValue())}getDoubleArray(t){this.checkPVValue(t);let e=t.getValue();return Array.isArray(e)?e.map(i=>parseFloat(i)):[parseFloat(e)]}getLong(t){this.checkPVValue(t);let e=t._pv.toNumber();return typeof e=="number"&&(e=Math.floor(e)),parseInt(e??t.getValue(),10)}getLongArray(t){this.checkPVValue(t);let e=t.getValue();return Array.isArray(e)?e.map(i=>(typeof i=="number"&&(i=Math.floor(i)),parseInt(i,10))):(typeof e=="number"&&(e=Math.floor(e)),[parseInt(e,10)])}getString(t){return this.checkPVValue(t),Nt(t._pv.value,0,-1,t._pv.typeHint)}getStringArray(t){this.checkPVValue(t);let e=t.getValue();return Array.isArray(e)?e.map(i=>String(i)):[String(e)]}getTimeInMilliseconds(t){return this.checkPVValue(t),t._pv.time?.getTime()??0}getTimeString(t,e="yyyy-MM-dd HH:mm:ss.nnnnnnnnn"){this.checkPVValue(t);let i=t._pv.time;if(i){let r=e;for(let s of Fu)r=r.replace(s,this.formatDate(i,s));return r}return null}getSeverity(t){switch(this.checkPVValue(t),t._pv.severity){case"NONE":return 0;case"MAJOR":return 1;case"MINOR":return 2;default:return-1}}getSeverityString(t){return this.checkPVValue(t),String(t._pv.severity)}getStatus(t){return this.checkPVValue(t),t._pv.alarmName}getUnits(t){return this.checkPVValue(t),t._pv.units||null}formatDate(t,e){let{utc:i}=this.display;if(e==="yyyy")return String(i?t.getUTCFullYear():t.getFullYear());if(e==="MM"){let r=(i?t.getUTCMonth():t.getMonth())+1;return r<10?"0"+r:""+r}else if(e==="dd"){let r=i?t.getUTCDate():t.getDate();return r<10?"0"+r:""+r}else if(e==="HH"){let r=i?t.getUTCHours():t.getHours();return r<10?"0"+r:""+r}else if(e==="mm"){let r=i?t.getUTCMinutes():t.getMinutes();return r<10?"0"+r:""+r}else if(e==="ss"){let r=i?t.getUTCSeconds():t.getSeconds();return r<10?"0"+r:""+r}else if(e==="nnnnnnnnn"){let r=i?t.getUTCMilliseconds():t.getMilliseconds();return r<10?"00"+r:r<100?"0"+r:""+r}else throw new Error(`Unexpected format '${e}'`)}};var si=class{constructor(t){this.display=t}display;openOPI(t,e,i,r){if(i===0){let s={path:e,replace:i===0};this.display.fireEvent("opendisplay",s)}else throw new Error(`Unsupported target ${i}`)}closeCurrentOPI(){this.display.fireEvent("closedisplay",{})}};function Es(p){let t=p.widget,e=p.widget.display,i=function(c){this.run=c.run},r=function(c){this.runnable=c};r.prototype.start=function(){p.schedule(()=>this.runnable.run())},r.sleep=function(c){let h=Date.now(),u=0;for(;Date.now()<h+c;)u++;u||console.trace("Should not happen")};let s=function(){};s.prototype.schedule=function(c,h){p.schedule(c,h)};let o=function(c){this.valueChanged=h=>{p.schedule(()=>{let u=c.valueChanged;u(h)})}},l={ITableModifiedListener:function(c){this.modified=h=>{let u=c.modified;u(h)}},ITableSelectionChangedListener:function(c){this.selectionChanged=h=>{let u=c.selectionChanged;u(h)}}};return{display:new Qe(t.display,p),widget:Je(t,p),java:{lang:{Runnable:i,Thread:r},util:{Timer:s}},org:{csstudio:{swt:{widgets:{natives:{SpreadSheetTable:l}}}},yamcs:{studio:{data:{IPVListener:o}}}},ColorFontUtil:new Ue,ConsoleUtil:new Ye(e),DataUtil:new Xe,FileUtil:new ti(e),GUIUtil:new ei(e),MessageDialog:new ii(e),PVUtil:new ri(e),ScriptUtil:new si(e),SpreadSheetTable:l,Java:{type:function(c){switch(c){case"java.lang.Runnable":return i;case"java.lang.Thread":return r;case"java.util.Timer":return s;case"org.csstudio.swt.widgets.natives.SpreadSheetTable":return l;case"org.yamcs.studio.data.IPVListener":return o;default:throw new Error("Unexpected class name: "+c)}},to:function(c,h){return c}}}}var Lt=class{constructor(t,e,i=[]){this.widget=t;this.scriptText=e;this.scriptText=e.replace(/importClass\([^\)]*\)\s*\;?/gi,"").replace(/importPackage\([^\)]*\)\s*\;?/gi,"").trim(),this.context={pvs:i.map(r=>new Ct(r)),triggerPV:null,...t.display.pvEngine.scriptLibraries,...Es(this)}}widget;scriptText;context;run(t){window.setTimeout(()=>{if(this.context.triggerPV=null,t)for(let e of this.context.pvs)e._pv===t&&(this.context.triggerPV=e);this.runWithContext(()=>{(0,eval)(this.scriptText)})})}schedule(t,e){window.setTimeout(()=>this.runWithContext(t),e)}runWithContext(t){let e=[];for(let i in window)e.push(i);try{for(let r in this.context)this.context.hasOwnProperty(r)&&(window[r]=this.context[r]);t();let i={};for(let r in window)e.indexOf(r)===-1&&(i[r]=window[r]);this.context=i}finally{for(let i in window)e.indexOf(i)===-1&&delete window[i]}}};var Os="path",Vs="embedded",Ms="scriptText",oi=class extends K{constructor(){super(),this.properties.add(new R(Os,"")),this.properties.add(new w(Vs,!1)),this.properties.add(new R(Ms,""))}execute(t){this.embedded?new Lt(t,this.scriptText).run():t.display.getScriptLoader().load(this.path).then(i=>{i&&new Lt(t.display.instance,i).run()})}get path(){return this.properties.getValue(Os)}get embedded(){return this.properties.getValue(Vs)}get scriptText(){return this.properties.getValue(Ms)}toString(){return"Execute JavaScript"}};var Is="macros",Bs="mode",Ws="path",ni=class extends K{constructor(){super(),this.properties.add(new R(Ws,"")),this.properties.add(new Gt(Is)),this.properties.add(new P(Bs,0))}execute(t){let e={...this.macros.macros},i={path:this.path,replace:this.mode===0,args:e};t.display.fireEvent("opendisplay",i)}get macros(){return this.properties.getValue(Is)}get path(){return this.properties.getValue(Ws)}get mode(){return this.properties.getValue(Bs)}toString(){return`Open ${this.path}`}};var Hs="path",ai=class extends K{constructor(){super(),this.properties.add(new R(Hs,""))}execute(t){throw new Error("Unsupported action OPEN_FILE")}get path(){return this.properties.getValue(Hs)}toString(){return`Open ${this.path}`}};var ks="hyperlink",li=class extends K{constructor(){super(),this.properties.add(new R(ks,"http://"))}execute(t){this.hyperlink&&window.parent.postMessage({type:"openwebpage",url:this.hyperlink},"*")}get hyperlink(){return this.properties.getValue(ks)}toString(){return`Open Webpage ${this.hyperlink}`}};var Ds="path",hi=class extends K{constructor(){super(),this.properties.add(new R(Ds,""))}execute(t){this.path&&new Audio(t.display.resolvePath(this.path)).play()}get path(){return this.properties.getValue(Ds)}toString(){return`Play WAV File ${this.path}`}};var Ns="command",Fs="args",Gs="confirm_message",ci=class extends K{constructor(){super(),this.properties.add(new R(Ns,"")),this.properties.add(new $t(Fs,{})),this.properties.add(new R(Gs,""))}execute(t){if(this.confirmMessage&&!t.display.getDialogHandler().openConfirmDialog("Confirm Dialog",this.confirmMessage))return;let e=t.expandMacro(this.command),i={};for(let s in this.args)i[s]=t.expandMacro(this.args[s]);let r={command:e,args:i};t.display.fireEvent("runcommand",r)}get command(){return this.properties.getValue(Ns)}get args(){return this.properties.getValue(Fs)}get confirmMessage(){return this.properties.getValue(Gs)}toString(){return`Run ${this.command}`}};var $s="procedure",Us="args",Ys="confirm_message",pi=class extends K{constructor(){super(),this.properties.add(new R($s,"")),this.properties.add(new $t(Us,{})),this.properties.add(new R(Ys,""))}execute(t){if(this.confirmMessage&&!t.display.getDialogHandler().openConfirmDialog("Confirm Dialog",this.confirmMessage))return;let e={procedure:this.procedure,args:this.args};t.display.fireEvent("runprocedure",e)}get procedure(){return this.properties.getValue($s)}get args(){return this.properties.getValue(Us)}get confirmMessage(){return this.properties.getValue(Ys)}toString(){return`Run ${this.procedure}`}};var Xs="path",zs="confirm_message",di=class extends K{constructor(){super(),this.properties.add(new R(Xs,"")),this.properties.add(new R(zs,""))}execute(t){if(this.confirmMessage&&!t.display.getDialogHandler().openConfirmDialog("Confirm Dialog",this.confirmMessage))return;let i={path:t.display.resolvePath(this.path)};t.display.fireEvent("runstack",i)}get path(){return this.properties.getValue(Xs)}get confirmMessage(){return this.properties.getValue(zs)}toString(){return`Run ${this.path}`}};var qs="pv_name",Ks="value",js="timeout",Zs="confirm_message",ui=class extends K{constructor(){super(),this.properties.add(new R(qs,"$(pv_name)")),this.properties.add(new R(Ks,"")),this.properties.add(new P(js,10)),this.properties.add(new R(Zs,""))}execute(t){if(!(this.confirmMessage&&!t.display.getDialogHandler().openConfirmDialog("Confirm Dialog",this.confirmMessage))&&this.pvName){let e=t.expandMacro(this.pvName);t.display.pvEngine.createPV(e),t.display.pvEngine.setValue(new Date,e,this.value)}}get pvName(){return this.properties.getValue(qs)}get value(){return this.properties.getValue(Ks)}get timeout(){return this.properties.getValue(js)}get confirmMessage(){return this.properties.getValue(Zs)}toString(){return`Write ${this.value} to ${this.pvName}`}};var gi=class{includeParentMacros=!0;macros={};clear(){this.macros={}}set(t,e){this.macros[t]=e}get(t){if(t in this.macros)return this.macros[t]}};var te=class{rules=[]};var mi=class{constructor(t,e,i){this.autoScaleWidgets=t;this.minWidth=e;this.minHeight=i}autoScaleWidgets;minWidth;minHeight},fi=class{constructor(t,e,i){this.widthScalable=t;this.heightScalable=e;this.keepWidthHeightRatio=i}widthScalable;heightScalable;keepWidthHeightRatio};var xi=class{scripts=[]};var ee=class p{constructor(t){this.node=t}node;get name(){return this.node.nodeName}static parseFromXML(t){let i=new DOMParser().parseFromString(t,"text/xml");return new p(i.documentElement)}getNode(t){let e=this.findChild(t);return new p(e)}getNodes(t){let e=[];for(let i=0;i<this.node.childNodes.length;i++){let r=this.node.childNodes[i];r.nodeType!==3&&(!t||r.nodeName===t)&&e.push(new p(r))}return e}hasNode(t){for(let e=0;e<this.node.childNodes.length;e++)if(this.node.childNodes[e].nodeName===t)return!0;return!1}hasAttribute(t){return this.node.hasAttribute(t)}getTextContent(t){return this.node.textContent||t||""}getString(t,e){for(let i=0;i<this.node.childNodes.length;i++){let r=this.node.childNodes[i];if(r.nodeName===t&&r.textContent!==null)return r.textContent}if(e!==void 0)return e;throw new Error(`No child node named ${t} could be found`)}getStringAttribute(t){let e=this.node.attributes.getNamedItem(t);if(e===null)throw new Error(`No attribute named ${t}`);return e.textContent||""}getFloat(t,e){for(let i=0;i<this.node.childNodes.length;i++){let r=this.node.childNodes[i];if(r.nodeName===t&&r.textContent!==null)return parseFloat(r.textContent)}if(e!==void 0)return e;throw new Error(`No child node named ${t} could be found`)}getInt(t,e){for(let i=0;i<this.node.childNodes.length;i++){let r=this.node.childNodes[i];if(r.nodeName===t&&r.textContent!==null)return parseInt(r.textContent,10)}if(e!==void 0)return e;throw new Error(`No child node named ${t} could be found`)}getIntAttribute(t){let e=this.node.attributes.getNamedItem(t);if(e===null)throw new Error(`No attribute named ${t}`);return parseInt(e.textContent||"",10)}getBoolean(t,e){for(let i=0;i<this.node.childNodes.length;i++){let r=this.node.childNodes[i];if(r.nodeName===t)return r.textContent==="true"}if(e!==void 0)return e;throw new Error(`No child node named ${t} could be found`)}getBooleanAttribute(t,e){let i=this.node.attributes.getNamedItem(t);if(i===null){if(e!==void 0)return e;throw new Error(`No attribute named ${t}`)}else return i.textContent==="true"}getColor(t,e){let i=this.findChild(t);for(let r=0;r<i.childNodes.length;r++){let s=i.childNodes[r];if(s.nodeName==="color")return this.parseColorNode(new p(s))}if(e!==void 0)return e;throw new Error("No child node named 'color' could be found")}getFont(t){let e=this.getNode(t);if(e.hasNode("opifont.name")){let i=e.getNode("opifont.name"),r=i.getStringAttribute("fontName"),s=i.getIntAttribute("height"),o=i.getIntAttribute("style"),n=!1;return i.hasAttribute("pixels")&&(n=i.getBooleanAttribute("pixels")),new q(r,s,o,n)}else{let i=e.getNode("fontdata"),r=i.getStringAttribute("fontName"),s=i.getIntAttribute("height"),o=i.getIntAttribute("style"),n=!1;return i.hasAttribute("pixels")&&(n=i.getBooleanAttribute("pixels")),new q(r,s,o,n)}}getPoints(t){let e=this.getNode(t),i=[];for(let r of e.getNodes("point"))i.push({x:r.getIntAttribute("x"),y:r.getIntAttribute("y")});return i}getStringList(t){let e=this.getNode(t),i=[];for(let r of e.getNodes("s"))i.push(r.getTextContent());return i}getStringMap(t){let e=this.getNode(t),i={};for(let r of e.getNodes())i[r.name]=e.getString(r.name);return i}getStringTable(t){let e=this.getNode(t),i=[];for(let r of e.getNodes("row")){let s=[];for(let o of r.getNodes("col"))s.push(o.getTextContent());i.push(s)}return i}getScripts(t){let e=this.getNode(t),i=new xi;for(let r of e.getNodes("path")){let s=[];for(let n of r.getNodes("pv"))s.push({pvName:n.getTextContent(),trigger:n.getBooleanAttribute("trig")});let o=r.getStringAttribute("pathString");o==="EmbeddedJs"?i.scripts.push({embedded:!0,text:r.getString("scriptText"),checkConnect:r.getBooleanAttribute("checkConnect"),skipFirstExecution:r.getBooleanAttribute("sfe",!1),inputs:s}):o==="EmbeddedPy"?console.warn("Unsupported EmbeddedPy script"):i.scripts.push({embedded:!1,path:o,checkConnect:r.getBooleanAttribute("checkConnect"),skipFirstExecution:r.getBooleanAttribute("sfe",!1),inputs:s})}return i}getScaleOptions(t){let e=this.getNode(t);return new fi(e.getBoolean("width_scalable"),e.getBoolean("height_scalable"),e.getBoolean("keep_wh_ratio"))}getAutoScaleWidgets(t){let e=this.getNode(t);return new mi(e.getBoolean("auto_scale_widgets"),e.getInt("min_width"),e.getInt("min_height"))}getColorMap(t){let e=this.getNode(t);if(e.hasNode("e")){let i=new Ut(0,e.getBoolean("interpolate"),e.getBoolean("autoscale"));for(let r of e.getNodes("e")){let s=Number(r.getTextContent()),o=r.getIntAttribute("red"),n=r.getIntAttribute("green"),a=r.getIntAttribute("blue");i.addMapping(s,o,n,a)}}else return new Ut(e.getInt("map"),e.getBoolean("interpolate"),e.getBoolean("autoscale"))}getRules(t){let e=this.getNode(t),i=new te;for(let r of e.getNodes("rule")){let s=[];for(let n of r.getNodes("pv"))s.push({pvName:n.getTextContent(),trigger:n.getBooleanAttribute("trig")});let o=[];for(let n of r.getNodes("exp"))if(n.getNode("value").hasNode("color"))o.push({type:"color",expression:n.getStringAttribute("bool_exp"),outputValue:n.getColor("value")});else{let l=n.getString("value");l.trim()!==""&&o.push({type:"string",expression:n.getStringAttribute("bool_exp"),outputValue:l})}i.rules.push({name:r.getStringAttribute("name"),propertyName:r.getStringAttribute("prop_id"),outputExpression:r.getBooleanAttribute("out_exp"),inputs:s,expressions:o})}return i}getMacros(t){let e=this.getNode(t),i=new gi;i.includeParentMacros=e.getBoolean("include_parent_macros");for(let r of e.getNodes())r.name!=="include_parent_macros"&&i.set(r.name,e.getString(r.name));return i}getActions(t){let e=this.getNode(t),i=new Jt;i.hookFirstActionToClick=e.getBooleanAttribute("hook"),i.hookAllActionsToClick=e.getBooleanAttribute("hook_all",!1);for(let r of e.getNodes("action")){let s=r.getStringAttribute("type");if(s==="OPEN_DISPLAY"){let o=new ni;o.parseNode(r),i.add(o)}else if(s==="OPEN_FILE"){let o=new ai;o.parseNode(r),i.add(o)}else if(s==="EXECUTE_CMD"){let o=new $e;o.parseNode(r),i.add(o)}else if(s==="EXECUTE_JAVASCRIPT"){let o=new oi;o.parseNode(r),i.add(o)}else if(s==="WRITE_PV"){let o=new ui;o.parseNode(r),i.add(o)}else if(s==="PLAY_SOUND"){let o=new hi;o.parseNode(r),i.add(o)}else if(s==="OPEN_WEBPAGE"){let o=new li;o.parseNode(r),i.add(o)}else if(s==="RUN_COMMAND"){let o=new ci;o.parseNode(r),i.add(o)}else if(s==="RUN_COMMAND_STACK"){let o=new di;o.parseNode(r),i.add(o)}else if(s==="RUN_PROCEDURE"){let o=new pi;o.parseNode(r),i.add(o)}else console.warn(`Unsupported action type ${s}`),i.add(null)}return i}parseColorNode(t){let e=t.getIntAttribute("red"),i=t.getIntAttribute("green"),r=t.getIntAttribute("blue");return new m(e,i,r)}findChild(t){for(let e=0;e<this.node.childNodes.length;e++){let i=this.node.childNodes[e];if(i.nodeName===t)return i}throw new Error(`No child node named ${t} could be found`)}};var Js="actions",Qs="background_color",to="backcolor_alarm_sensitive",eo="border_alarm_sensitive",io="border_color",ro="border_width",so="border_style",oo="enabled",no="foreground_color",ao="forecolor_alarm_sensitive",Lr="height",lo="name",Ar="pv_name",ho="pv_value",co="rules",po="scale_options",uo="scripts",Er="text",go="tooltip",mo="transparent",fo="visible",xo="widget_type",Or="width",wo="wuid",Vr="x",Mr="y",V=class{constructor(t,e){this.display=t;this.parent=e;this.properties=new jt(this,[new ve(Js,new Jt),new w(to,!1),new S(Qs,m.TRANSPARENT),new w(eo,!1),new S(io),new P(so),new P(ro),new w(oo,!0),new w(ao,!1),new S(no),new P(Lr),new R(lo),new R(Ar),new bt(ho,Ar),new Re(co,new te),new _e(uo),new R(Er,""),new R(go,""),new w(mo,!1),new w(fo),new R(xo),new P(Or),new R(wo),new P(Vr),new P(Mr),new Te(po)])}display;parent;x=0;y=0;width=0;height=0;_value;fillRoundRectangleBackgroundBorder=!0;customSize;customHolderWidth;customHolderHeight;holderRegion;properties;vars=new Map;pvs=[];async parseNode(t){this.properties.loadXMLValues(t);for(let e of this.properties.all())if(e instanceof H){let i=e.value;this.loadFont(i)}if(this.pvName){let e=this.display.pvEngine.createPV(this.pvName);this.pvs.push(e)}for(let e of this.scripts.scripts){let i=[];for(let r of e.inputs){let s=this.expandMacro(r.pvName);i.push(this.display.pvEngine.createPV(s))}if(this.pvs.push(...i),e.embedded)this.display.pvEngine.createScript(this,e,e.text,i);else{let s=await this.display.getScriptLoader().load(e.path);s&&this.display.pvEngine.createScript(this,e,s,i)}}for(let e of this.rules.rules)this.properties.getProperty(e.propertyName)?this.display.pvEngine.createRule(this,e):console.warn(`Cannot create rule for unsupported property ${e.propertyName}`);this.actions.isClickable()&&(this.holderRegion={id:`${this.wuid}-holder`},this.tooltip&&(this.holderRegion.tooltip=()=>this.tooltip),this.actions.isClickable()&&(this.holderRegion.click=()=>{for(let e of this.getHookedActions())this.executeAction(e)},this.holderRegion.cursor="pointer")),await this.init()}getHookedActions(){let{actions:t}=this,e=[];for(let i=0;i<t.actions.length;i++)i===0?(t.hookFirstActionToClick||t.hookAllActionsToClick)&&e.push(t.actions[i]):t.hookAllActionsToClick&&e.push(t.actions[i]);return e}drawHolder(t){let{scale:e}=this,i=[0,0,0,0],r=this.borderAlarmSensitive&&(this.pv?.severity==="MINOR"||this.pv?.severity==="MAJOR");if(!r)switch(this.borderStyle){case 0:break;case 1:i=[this.borderWidth,this.borderWidth,this.borderWidth,this.borderWidth];break;case 2:case 3:i=[1*e,1*e,1*e,1*e];break;case 4:case 5:case 6:i=[2*e,2*e,2*e,2*e];break;case 7:i=[2*e,2*e,1*e,1*e];break;case 8:case 9:case 10:case 11:i=[this.borderWidth,this.borderWidth,this.borderWidth,this.borderWidth];break;case 12:i=[17*e,1*e,1*e,1*e];break;case 13:i=[16*e,16*e,16*e,16*e];break;case 14:let s=this.borderWidth*2;i=[s,s,s,s];break}this.customSize?(this.customHolderWidth=this.customSize.width+i[1]+i[3],this.customHolderHeight=this.customSize.height+i[0]+i[2]):(this.customHolderWidth=void 0,this.customHolderHeight=void 0),this.x=this.holderX+i[1],this.y=this.holderY+i[0],this.width=this.holderWidth-i[1]-i[3],this.height=this.holderHeight-i[0]-i[2],r||(this.beforeDrawBorder(t),this.drawBorderStyle(t)),this.holderRegion&&t.addHitRegion(this.holderRegion).addRect(this.holderX,this.holderY,this.holderWidth,this.holderHeight)}beforeDrawBorder(t){}drawBorderStyle(t){let{scale:e}=this;if(this.borderStyle!==0)if(this.borderStyle===1)t.strokeRect({x:this.holderX,y:this.holderY,width:this.holderWidth,height:this.holderHeight,color:this.borderColor,lineWidth:this.borderWidth,crispen:!0});else if(this.borderStyle===2){let i=1*e,r=this.holderY+i/2,s=this.holderX+i/2,o=this.holderY+this.holderHeight-i+i/2,n=this.holderX+this.holderWidth-i+i/2;t.strokePath({color:m.BLACK,path:new _(n,o).lineTo(n,r).moveTo(n,o).lineTo(s,o)}),t.strokePath({color:m.WHITE,path:new _(s,r).lineTo(n-i,r).moveTo(s,r).lineTo(s,o-i)})}else if(this.borderStyle===3){if(this.isAnyPvInvalid())return;let i=1*e,r=this.holderY+i/2,s=this.holderX+i/2,o=this.holderY+this.holderHeight-i+i/2,n=this.holderX+this.holderWidth-i+i/2;t.strokePath({color:m.WHITE,path:new _(n,o).lineTo(n,r).moveTo(n,o).lineTo(s,o)}),t.strokePath({color:m.BLACK,path:new _(s,r).lineTo(n-i,r).moveTo(s,r).lineTo(s,o-i)})}else if(this.borderStyle===4)this.drawShadowBorder(t,m.BUTTON_LIGHTEST,m.BUTTON_DARKER,m.BUTTON_DARKER,m.BUTTON_LIGHTEST);else if(this.borderStyle===5)this.drawShadowBorder(t,m.BUTTON_DARKER,m.BUTTON_LIGHTEST,m.BUTTON_LIGHTEST,m.BUTTON_DARKER);else if(this.borderStyle===6)this.drawShadowBorder(t,m.BUTTON_DARKEST,m.BUTTON_DARKER,m.BUTTON,m.BUTTON_LIGHTEST);else if(this.borderStyle===7)this.drawShadowBorder(t,m.BUTTON_LIGHTEST,m.BUTTON_LIGHTEST,m.BUTTON_DARKEST,m.BUTTON_DARKER);else if(this.borderStyle===8)this.drawDashedBorder(t,[2*e,2*e]);else if(this.borderStyle===9)this.drawDashedBorder(t,[6*e,2*e]);else if(this.borderStyle===10)this.drawDashedBorder(t,[6*e,2*e,2*e,2*e]);else if(this.borderStyle===11)this.drawDashedBorder(t,[6*e,2*e,2*e,2*e,2*e,2*e]);else if(this.borderStyle===12)t.fillRect({x:this.holderX,y:this.holderY+1*e,width:this.holderWidth,height:16*e,color:this.borderColor}),t.fillText({x:this.holderX+1*e+3*e,y:this.holderY+1*e+16/2*e,baseline:"middle",align:"left",font:q.ARIAL_11.scale(e),color:m.BLACK,text:this.name}),t.strokeRect({x:this.holderX,y:this.holderY,width:this.holderWidth,height:this.holderHeight,color:m.BLACK,crispen:!0});else if(this.borderStyle===13){let i=t.measureText(this.name,q.ARIAL_11.scale(e)),r=1,s=xt(this.holderX+8*e,this.holderY+8*e,this.holderWidth-16*e-r,this.holderHeight-16*e-r,r);this.transparent||(t.fillRect({...D(s,8*e),color:this.backgroundColor}),t.fillRect({x:this.holderX+16*e,y:this.holderY,width:i.width,height:16*e,color:this.backgroundColor})),t.fillText({x:this.holderX+16*e,y:this.holderY+8*e,baseline:"middle",align:"left",font:q.ARIAL_11.scale(e),color:this.borderColor,text:this.name}),t.strokePath({color:this.backgroundColor.darker(),path:new _(s.x,s.y).lineTo(s.x+8*e,s.y).moveTo(s.x+8*e+i.width,s.y).lineTo(s.x+s.width,s.y).lineTo(s.x+s.width,s.y+s.height).lineTo(s.x,s.y+s.height).lineTo(s.x,s.y)}),s=xt(this.holderX+8*e+r,this.holderY+8*e+r,this.holderWidth-16*e-r,this.holderHeight-16*e-r,r),t.strokePath({color:this.backgroundColor.brighter(),path:new _(s.x,s.y).lineTo(s.x+8*e-r,s.y).moveTo(s.x+8*e-r+i.width,s.y).lineTo(s.x+s.width,s.y).lineTo(s.x+s.width,s.y+s.height).lineTo(s.x,s.y+s.height).lineTo(s.x,s.y)})}else if(this.borderStyle===14){let i=xt(this.holderX,this.holderY,this.holderWidth,this.holderHeight,this.borderWidth);this.fillRoundRectangleBackgroundBorder&&t.fillRect({...i,rx:4*e,ry:4*e,color:this.backgroundColor}),this.borderWidth&&t.strokeRect({...i,rx:4*e,ry:4*e,color:this.borderColor,lineWidth:this.borderWidth})}else this.borderStyle===15||console.warn(`Unsupported border style: ${this.borderStyle}`)}isAnyPvDisconnected(){let t=this.pvName&&(!this.pv||this.pv.disconnected),e=this.pvs.find(i=>i.disconnected)!==void 0;return t||e}isAnyPvInvalid(){let t=!1;for(let e of this.pvs)if(e.value===void 0){t=!0;break}return this.pvs.length&&t}drawDecoration(t){if(this.display.editMode)return;let{scale:e}=this;if(this.isAnyPvDisconnected()){let i=1*e;t.fillRect({x:this.holderX-i/2,y:this.holderY-i/2,width:this.holderWidth+i,height:this.holderHeight+i,color:this.display.disconnectedColor,opacity:.4}),t.strokeRect({x:this.holderX-i/2,y:this.holderY-i/2,width:this.holderWidth+i,height:this.holderHeight+i,color:this.display.disconnectedColor})}else this.isAnyPvInvalid()&&t.strokeRect({...this.bounds,dash:[2*e,2*e],lineWidth:2*e,color:this.display.invalidColor,crispen:!0});if(this.borderAlarmSensitive){let i;this.borderStyle===8?i=[2*e,2*e]:this.borderStyle===9?i=[6*e,2*e]:this.borderStyle===10?i=[6*e,2*e,2*e,2*e]:this.borderStyle===11&&(i=[6*e,2*e,2*e,2*e,2*e,2*e]),this.pv?.severity==="MAJOR"?t.strokeRect({...this.bounds,lineWidth:2*e,color:this.display.majorColor,crispen:!0,dash:i}):this.pv?.severity==="MINOR"?t.strokeRect({...this.bounds,lineWidth:2*e,color:this.display.minorColor,crispen:!0,dash:i}):this.pv?.severity==="INVALID"&&t.strokeRect({...this.bounds,lineWidth:2*e,color:this.display.invalidColor,crispen:!0})}}drawOverlay(t){}drawSelection(t){t.lineWidth=1,t.strokeStyle="black",t.strokeRect(this.holderX-.5,this.holderY-.5,this.holderWidth+1,this.holderHeight+1),t.fillStyle="black";let e=2;t.fillRect(this.holderX-e,this.holderY-e,e+e,e+e),t.fillRect(this.holderX+this.holderWidth/2-e,this.holderY-e,e+e,e+e),t.fillRect(this.holderX+this.holderWidth-e,this.holderY-e,e+e,e+e),t.fillRect(this.holderX-e,this.holderY+this.holderHeight/2-e,e+e,e+e),t.fillRect(this.holderX+this.holderWidth-e,this.holderY+this.holderHeight/2-e,e+e,e+e),t.fillRect(this.holderX-e,this.holderY+this.holderHeight-e,e+e,e+e),t.fillRect(this.holderX+this.holderWidth/2-e,this.holderY+this.holderHeight-e,e+e,e+e),t.fillRect(this.holderX+this.holderWidth-e,this.holderY+this.holderHeight-e,e+e,e+e),t.strokeStyle="white",e=3,t.strokeRect(this.holderX-e+.5,this.holderY-e+.5,e+e-1,e+e-1),t.strokeRect(this.holderX+this.holderWidth/2-e+.5,this.holderY-e+.5,e+e-1,e+e-1),t.strokeRect(this.holderX+this.holderWidth-e+.5,this.holderY-e+.5,e+e-1,e+e-1),t.strokeRect(this.holderX-e+.5,this.holderY+this.holderHeight/2-e+.5,e+e-1,e+e-1),t.strokeRect(this.holderX+this.holderWidth-e+.5,this.holderY+this.holderHeight/2-e+.5,e+e-1,e+e-1),t.strokeRect(this.holderX-e+.5,this.holderY+this.holderHeight-e+.5,e+e-1,e+e-1),t.strokeRect(this.holderX+this.holderWidth/2-e+.5,this.holderY+this.holderHeight-e+.5,e+e-1,e+e-1),t.strokeRect(this.holderX+this.holderWidth-e+.5,this.holderY+this.holderHeight-e+.5,e+e-1,e+e-1)}requestRepaint(){this.display.requestRepaint()}resolvePath(t){return this.display.resolvePath(t,this)}get bounds(){return{x:this.holderX,y:this.holderY,width:this.holderWidth,height:this.holderHeight}}get unscaledBounds(){return{x:this.properties.getValue(Vr),y:this.properties.getValue(Mr),width:this.properties.getValue(Or),height:this.properties.getValue(Lr)}}get area(){return{x:this.x,y:this.y,width:this.width,height:this.height}}drawShadowBorder(t,e,i,r,s){let o=1*this.scale,n=this.holderY+o/2,a=this.holderX+o/2,l=this.holderY+this.holderHeight-o+o/2,c=this.holderX+this.holderWidth-o+o/2;t.strokePath({color:e,path:new _(c,l).lineTo(c,n).moveTo(c,l).lineTo(a,l)}),t.strokePath({color:i,path:new _(c-o,l-o).lineTo(c-o,n+o).moveTo(c-o,l-o).lineTo(a+o,l-o)}),t.strokePath({color:r,path:new _(a,n).lineTo(c-o,n).moveTo(a,n).lineTo(a,l-o)}),t.strokePath({color:s,path:new _(a+o,n+o).lineTo(c-o-o,n+o).moveTo(a+o,n+o).lineTo(a+o,l-o-o)})}drawDashedBorder(t,e){let i=xt(this.holderX,this.holderY,this.holderWidth,this.holderHeight,this.borderWidth);t.strokePath({color:this.borderColor,lineWidth:this.borderWidth,dash:e,path:new _(i.x,i.y).lineTo(i.x+i.width,i.y).lineTo(i.x+i.width,i.y+i.height).lineTo(i.x,i.y+i.height).closePath()})}executeActionByIndex(t){let e=this.actions.getAction(t);e&&this.executeAction(e)}executeAction(t){t.execute(this)}expandMacro(t){if(t.indexOf("$")===-1)return t;for(let e of this.properties.all())if(e instanceof bt){let i=this.properties.getProperty(e.pvPropertyName),r="",s=i?.value;s&&(r=this.display.getPV(s)?.value??""),t=t.replace(`$(${e.name})`,r),t=t.replace(`\${${e.name}}`,r)}else t=t.replace(`$(${e.name})`,e.value||""),t=t.replace(`\${${e.name}}`,e.value||"");return this.parent?this.parent.expandContainerMacros(t):t}loadFont(t){if(t.isWebSafe())return;let e=this.display.getFontResolver();if(!e){console.warn(`Failed to load font '${t.getFontString()}'.`);return}let i=e.resolve(t);if(!i){console.warn(`Failed to load font '${t.getFontString()}'.`);return}i.load().then(r=>{document.fonts.add(r),this.requestRepaint()}).catch(r=>{console.warn(`Failed to load font '${t.getFontString()}'.`,r)})}get pv(){if(this.pvName)return this.display.getPV(this.pvName)}isMinorSeverity(){return this.pv?.severity==="MINOR"}isMajorSeverity(){return this.pv?.severity==="MAJOR"}get alarm(){return this.pv?.severity==="MINOR"||this.pv?.severity==="MAJOR"||this.pv?.severity==="INVALID"}get alarmSensitiveBackgroundColor(){if(this.backgroundAlarmSensitive){if(this.isMajorSeverity())return this.display.majorColor;if(this.isMinorSeverity())return this.display.minorColor;if(this.pv?.severity==="INVALID")return this.display.invalidColor}return this.backgroundColor}get alarmSensitiveForegroundColor(){if(this.foregroundAlarmSensitive){if(this.isMajorSeverity())return this.display.majorColor;if(this.isMinorSeverity())return this.display.minorColor}return this.foregroundColor}get scale(){let t=this.display.scale,e=this.parent;for(;e;)t*=e.relativeScale,e=e.parent;return t}get value(){return this._value}set value(t){this._value=t,this.requestRepaint()}addPropertyListener(t,e){this.properties.getProperty(t).addListener(e)}removePropertyListener(t,e){this.properties.getProperty(t).removeListener(e)}toDataURL(t="image/png",e){let i=this.display.measureAbsoluteArea(this);return this.display.copyCanvas(i).toDataURL(t,e)}get wuid(){return this.properties.getValue(wo)}get name(){return this.properties.getValue(lo)}get holderX(){return this.scale*this.properties.getValue(Vr)}get holderY(){return this.scale*this.properties.getValue(Mr)}get holderWidth(){return this.customHolderWidth!==void 0?this.scale*this.customHolderWidth:this.scale*this.properties.getValue(Or)}get holderHeight(){return this.customHolderHeight!==void 0?this.scale*this.customHolderHeight:this.scale*this.properties.getValue(Lr)}get borderAlarmSensitive(){return this.properties.getValue(eo)}get backgroundAlarmSensitive(){return this.properties.getValue(to)}get foregroundAlarmSensitive(){return this.properties.getValue(ao)}get pvName(){return this.properties.getValue(Ar,!0)}get pvValue(){return this.properties.getValue(ho,!0)}get borderColor(){return this.properties.getValue(io)}get borderStyle(){return this.properties.getValue(so)}get borderWidth(){return this.scale*this.properties.getValue(ro)}get backgroundColor(){return this.properties.getValue(Qs)}get enabled(){return this.properties.getValue(oo)}get foregroundColor(){return this.properties.getValue(no)}get tooltip(){let t=this.properties.getProperty(go);if(t.rawValue)return this.expandMacro(t.rawValue)}get transparent(){return this.properties.getValue(mo)}get visible(){return this.properties.getValue(fo)}get actions(){return this.properties.getValue(Js)}get scripts(){return this.properties.getValue(uo)}get rules(){return this.properties.getValue(co)}get scaleOptions(){return this.properties.getValue(po)}get widgetType(){return this.properties.getValue(xo,!0)}get text(){return this.display.editMode?(this.properties.getProperty(Er).rawValue||"").split(" ").join("\xA0"):this.properties.getValue(Er).split(" ").join("\xA0")}init(){}hide(){}destroy(){}};var yo="macros",ut=class p extends V{_widgets=[];_connections=[];relativeScale=1;constructor(t,e){super(t,e),this.properties.add(new Gt(yo))}expandContainerMacros(t){for(let e in this.macros.macros)t=t.replace(`$(${e})`,this.macros.macros[e]),t=t.replace(`\${${e}}`,this.macros.macros[e]);return this.parent&&this.macros.includeParentMacros&&(t=this.parent.expandContainerMacros(t)),t}findWidget(t){for(let e of this.widgets){if(e.wuid===t)return e;if(e instanceof p){let i=e.findWidget(t);if(i)return i}}}findWidgetByName(t){for(let e of this.widgets){if(e.name===t)return e;if(e instanceof p){let i=e.findWidgetByName(t);if(i)return i}}for(let e of this.connections)if(e.name===t)return e}hide(){for(let t of this.widgets)t.hide()}destroy(){for(let t of this.widgets)t.destroy()}get widgets(){return this._widgets}get connections(){return this._connections}get macros(){return this.properties.getValue(yo)}};var bo="arrow_length",Po="arrows",vo="fill_arrow",_o="name",Ro="line_color",To="line_style",Co="line_width",So="src_wuid",Lo="src_term",Ao="tgt_wuid",Eo="tgt_term",Oo="router",Vo="points",Gu="wuid",At="LEFT",Et="UP",Ot="DOWN",Vt="RIGHT",wi=class extends V{sourceWidget;targetWidget;constructor(t){super(t),this.properties.clear(),this.properties.add(new P(bo)),this.properties.add(new P(Po)),this.properties.add(new w(vo)),this.properties.add(new R(_o)),this.properties.add(new S(Ro)),this.properties.add(new P(To)),this.properties.add(new P(Co)),this.properties.add(new R(So)),this.properties.add(new R(Lo)),this.properties.add(new R(Ao)),this.properties.add(new R(Eo)),this.properties.add(new P(Oo)),this.properties.add(new Pt(Vo)),this.properties.add(new R(Gu))}async parseNode(t){this.properties.loadXMLValues(t),this.sourceWidget=this.display.findWidget(this.sourceWuid),this.sourceWidget||console.warn(`Can't find source widget ${this.sourceWuid}`),this.targetWidget=this.display.findWidget(this.targetWuid),this.targetWidget||console.warn(`Can't find target widget ${this.targetWuid}`)}draw(t){!this.sourceWidget||!this.targetWidget||(this.points.length?this.drawPath(t):this.router===0?this.drawManhattanConnection(t):this.router===1&&this.drawDirectConnection(t))}drawPath(t){let e=this.getPosition(this.sourceWidget,this.sourceTerm),i=this.getPosition(this.targetWidget,this.targetTerm),r=[e,...this.points,i],s=_.fromPoints(r).translate(.5*this.scale,.5*this.scale);t.strokePath({path:s,lineWidth:this.lineWidth,color:this.lineColor,dash:this.getDashArray()}),this.drawStartArrow(t,r[1],r[0]),this.drawStopArrow(t,r[r.length-2],r[r.length-1])}drawManhattanConnection(t){let e=this.getManhattanAnchor(this.sourceWidget,this.sourceTerm),i=this.getManhattanAnchor(this.targetWidget,this.targetTerm),r=this.route(e,i),s=_.fromPoints(r);this.lineWidth&&t.strokePath({lineWidth:this.lineWidth,color:this.lineColor,path:s,dash:this.getDashArray()}),this.drawStartArrow(t,r[r.length-2],r[r.length-1]),this.drawStopArrow(t,r[1],r[0])}getDashArray(){let{scale:t}=this;if(this.lineWidth){if(this.lineStyle===0)return[];if(this.lineStyle===1)return[6*t,2*t];if(this.lineStyle===2)return[2*t,2*t];if(this.lineStyle===3)return[6*t,2*t,2*t,2*t];if(this.lineStyle===4)return[6*t,2*t,2*t,2*t,2*t,2*t];console.warn(`Unsupported connection line style ${this.lineStyle}`)}}drawDirectConnection(t){let e=this.getPosition(this.sourceWidget,this.sourceTerm),i=this.getPosition(this.targetWidget,this.targetTerm);this.lineWidth&&t.strokePath({path:new _(e.x,e.y).lineTo(i.x,i.y),lineWidth:this.lineWidth,color:this.lineColor,dash:this.getDashArray()}),this.drawStartArrow(t,i,e),this.drawStopArrow(t,e,i)}getManhattanAnchor(t,e){let i;switch(e){case"TOP":case"TOP_LEFT":case"TOP_RIGHT":i=Et;break;case"BOTTOM":case"BOTTOM_LEFT":case"BOTTOM_RIGHT":i=Ot;break;case"LEFT":i=At;break;case"RIGHT":i=Vt;break;default:}let r=t.bounds,s=this.getPosition(t,e),o=s.x-r.x,n=r.x+r.width-s.x,a=s.y-r.y,l=r.y+r.height-s.y;return Math.min(o,n)<Math.min(a,l)?i=o<n?At:Vt:i=a<l?Et:Ot,{x:s.x,y:s.y,direction:i}}getPosition(t,e){switch(e){case"LEFT":return{x:t.holderX,y:t.holderY+t.holderHeight/2};case"TOP":return{x:t.holderX+t.holderWidth/2,y:t.holderY};case"RIGHT":return{x:t.holderX+t.holderWidth,y:t.holderY+t.holderHeight/2};case"BOTTOM":return{x:t.holderX+t.holderWidth/2,y:t.holderY+t.holderHeight};case"TOP_LEFT":return{x:t.holderX,y:t.holderY};case"TOP_RIGHT":return{x:t.holderX+t.holderWidth,y:t.holderY};case"BOTTOM_LEFT":return{x:t.holderX,y:t.holderY+t.holderHeight};case"BOTTOM_RIGHT":return{x:t.holderX+t.holderWidth,y:t.holderY+t.holderHeight};default:let i=parseInt(e,10),r=t.properties.getProperty("points");if(r){let s=r.value;return s=Dt(s,this.scale),s[i]}else throw Error(`Unexpected term ${e}`)}}route(t,e){let i=t.x-e.x,r=t.y-e.y,s={x:0,y:0},o,n,a=[],{tolxtol:l,tol:c,minDist:h}=this;if(i*i<l&&r*r<l)return[{x:e.x,y:e.y}];t.direction===At?i>0&&r*r<c&&e.direction===Vt?(s=e,o=e.direction):(i<0?s={x:t.x-h,y:t.y}:r>0&&e.direction===Ot||r<0&&e.direction===Et?s={x:e.x,y:t.y}:t.direction===e.direction?(n=Math.min(t.x,e.x)-h,s={x:n,y:t.y}):s={x:t.x-i/2,y:t.y},r>0?o=Et:o=Ot):t.direction===Vt?i<0&&r*r<c&&e.direction===At?(s=e,o=e.direction):(i>0?s={x:t.x+h,y:t.y}:r>0&&e.direction===Ot||r<0&&e.direction===Et?s={x:e.x,y:t.y}:t.direction===e.direction?(n=Math.max(t.x,e.x)+h,s={x:n,y:t.y}):s={x:t.x-i/2,y:t.y},r>0?o=Et:o=Ot):t.direction===Ot?i*i<c&&r<0&&e.direction===Et?(s=e,o=e.direction):(r>0?s={x:t.x,y:t.y+h}:i>0&&e.direction===Vt||i<0&&e.direction===At?s={x:t.x,y:e.y}:t.direction===e.direction?(n=Math.max(t.y,e.y)+h,s={x:t.x,y:n}):s={x:t.x,y:t.y-r/2},i>0?o=At:o=Vt):t.direction===Et&&(i*i<c&&r>0&&e.direction===Ot?(s=e,o=e.direction):(r<0?s={x:t.x,y:t.y-h}:i>0&&e.direction===Vt||i<0&&e.direction===At?s={x:t.x,y:e.y}:t.direction===e.direction?(n=Math.min(t.y,e.y)-h,s={x:t.x,y:n}):s={x:t.x,y:t.y-r/2},i>0?o=At:o=Vt));let u={...s,direction:o};return a=a.concat(this.route(u,e)),a.push(t),a}drawStartArrow(t,e,i){let r=t.ctx;if(this.arrows===1||this.arrows===3){let s=this.calculateArrowPoints(e,i);if(s[2]=i,this.fillArrow){r.fillStyle=this.lineColor.toString(),r.beginPath();for(let o=0;o<s.length;o++)o===0?r.moveTo(s[o].x,s[o].y):r.lineTo(s[o].x,s[o].y);r.fill()}else r.strokeStyle=this.lineColor.toString(),r.lineWidth=this.lineWidth,r.beginPath(),r.moveTo(i.x,i.y),r.lineTo(s[0].x,s[0].y),r.moveTo(i.x,i.y),r.lineTo(s[1].x,s[1].y),r.stroke()}}drawStopArrow(t,e,i){let r=t.ctx;if(this.arrows===2||this.arrows===3){let s=this.calculateArrowPoints(e,i);if(s[2]=i,this.fillArrow){r.fillStyle=this.lineColor.toString(),r.beginPath();for(let o=0;o<s.length;o++)o===0?r.moveTo(s[o].x,s[o].y):r.lineTo(s[o].x,s[o].y);r.fill()}else r.strokeStyle=this.lineColor.toString(),r.lineWidth=this.lineWidth,r.beginPath(),r.moveTo(i.x,i.y),r.lineTo(s[0].x,s[0].y),r.moveTo(i.x,i.y),r.lineTo(s[1].x,s[1].y),r.stroke()}}calculateArrowPoints(t,e){let i=De(e,t),r=Math.PI/10,s=new at(this.arrowLength,i.theta-r),o=new at(this.arrowLength,i.theta+r),n=new at(Math.floor(this.arrowLength*Math.cos(r)),i.theta),a=wt(s.toPoint(),e.x,e.y),l=wt(o.toPoint(),e.x,e.y),c=wt(n.toPoint(),e.x,e.y);return[a,l,c]}get minDist(){return this.scale*20}get tol(){return this.scale*.1}get tolxtol(){return this.scale*.01}get name(){return this.properties.getValue(_o)}get arrows(){return this.properties.getValue(Po)}get fillArrow(){return this.properties.getValue(vo)}get arrowLength(){return this.scale*this.properties.getValue(bo)}get lineColor(){return this.properties.getValue(Ro)}get lineStyle(){return this.properties.getValue(To)}get lineWidth(){return this.scale*this.properties.getValue(Co)}get router(){return this.properties.getValue(Oo)}get sourceTerm(){return this.properties.getValue(Lo)}get sourceWuid(){return this.properties.getValue(So)}get targetTerm(){return this.properties.getValue(Eo)}get targetWuid(){return this.properties.getValue(Ao)}get points(){return Dt(this.properties.getValue(Vo),this.scale)}};var $u=0,Mo="auto_scale_widgets",ie=class extends ut{displayArgs;constructor(t,e,i){super(t,e),this.displayArgs=i??{},this.properties.add(new Ce(Mo))}async parseNode(t){await super.parseNode(t);let e=$u++;this.macros.set("DID",`DID_${e}`);let i=this.properties.getValue("name");this.macros.set("DNAME",i);for(let r in this.displayArgs)this.macros.set(r,this.displayArgs[r]);for(let r of t.getNodes("widget")){let s=r.getString("widget_type"),o=this.display.createWidget(s,this);o&&(await o.parseNode(r),this.widgets.push(o))}for(let r of t.getNodes("connection")){let s=new wi(this.display);s.parseNode(r),this.connections.push(s)}}draw(t){for(let e of this.widgets.filter(i=>i.visible))e.drawHolder(t),e.draw(t),e.drawDecoration(t);for(let e of this.connections)e.draw(t);for(let e of this.widgets.filter(i=>i.visible))e.drawOverlay(t)}measureContentBounds(t){let e=this.widgets.filter(n=>n.visible);if(e.length===0)return{x:0,y:0,width:0,height:0};let i=1/0,r=1/0,s=-1/0,o=-1/0;for(let n of e){let a=t?n.bounds:n.unscaledBounds;i=Math.min(i,a.x),r=Math.min(r,a.y),s=Math.max(s,a.x+a.width),o=Math.max(o,a.y+a.height)}return{x:i,y:r,width:s-i,height:o-r}}get autoScaleWidgets(){return this.properties.getValue(Mo)}};var Uu=0,Io="group_name",Bo="opi_file",Wo="resize_behaviour",re=class extends ut{linkedDisplay;resolvedOpiFile;constructor(t,e){super(t,e),this.properties.add(new R(Io)),this.properties.add(new R(Bo)),this.properties.add(new P(Wo,0))}async parseNode(t){await super.parseNode(t);let e=Uu++;this.macros.set("LCID",`LCID_${e}`)}async init(){if(this.opiFile){this.resolvedOpiFile=this.display.resolvePath(this.opiFile);let t=await this.display.loadContent(this.resolvedOpiFile);if(t!==null){this.linkedDisplay=new ie(this.display,this);let e=ee.parseFromXML(t);await this.linkedDisplay.parseNode(e),this.requestRepaint()}}if(this.linkedDisplay&&this.resizeBehavior===1){let t=this.linkedDisplay.measureContentBounds(!0);this.customSize={width:t.width,height:t.height}}}draw(t){this.transparent||t.fillRect({...this.area,color:this.backgroundColor});let e=this.getLinkedWidget();if(this.linkedDisplay&&e)if(t.fillRect({...this.area,color:this.linkedDisplay.backgroundColor}),this.resizeBehavior===0){let i=this.linkedDisplay.measureContentBounds(!1),{width:r,height:s}=i,o=this.display.scale;r*=o,s*=o;let n=r/s,a=this.width,l=a/n,c=a/r;l>this.height&&(l=this.height,a=l*n,c=l/r),this.linkedDisplay.relativeScale=c;let h=t.createChild(Math.ceil(a),Math.ceil(l));h.translate(i.x,i.y),this.linkedDisplay.draw(h),t.copy(h,this.x,this.y)}else if(this.resizeBehavior===1){let i=this.linkedDisplay.measureContentBounds(!0),r=t.createChild(i.width,i.height);r.translate(-i.x,-i.y),this.linkedDisplay.draw(r),t.copy(r,this.x,this.y)}else if(this.resizeBehavior===2){let i=this.linkedDisplay.measureContentBounds(!0),r=t.createChild(i.width,i.height);r.translate(i.x,i.y),this.linkedDisplay.draw(r),t.copy(r,this.x,this.y)}else this.resizeBehavior===3&&console.warn("Unsupported resize behavior of LinkingContainer",this.resizeBehavior)}getLinkedWidget(){return this.linkedDisplay&&this.groupName!==""?this.linkedDisplay.findWidgetByName(this.groupName):this.linkedDisplay}get widgets(){return this.linkedDisplay?this.linkedDisplay.widgets:[]}get connections(){return this.linkedDisplay?this.linkedDisplay.connections:[]}findWidget(t){if(this.linkedDisplay)return this.linkedDisplay.findWidget(t)}get opiFile(){return this.properties.getValue(Bo)}get groupName(){return this.properties.getValue(Io)}get resizeBehavior(){return this.properties.getValue(Wo)}};var Se=class{constructor(t){this.display=t}display;resolve(t,e){if(t.startsWith("/"))return`${this.display.absPrefix}${t.slice(1)}`;if(t.startsWith("http://")||t.startsWith("https://"))return t;if(e){let i=e.parent;for(;i;){if(i instanceof re){let r=i.resolvedOpiFile,s=r.lastIndexOf("/")+1;return`${r.substring(0,s)}${t}`}i=i.parent}}return`${this.display.relPrefix}${t}`}};var yi=class{constructor(t){this.display=t}display;cache=new Map;ttl=5e3;async load(t){this.removeOldEntries();let e=this.cache.get(t);if(e)return e.text;let i=await fetch(this.display.resolvePath(t),{credentials:"same-origin"});if(i.ok){let r=await i.text();return this.cache.set(t,{timestamp:Date.now(),text:r}),r}else return null}removeOldEntries(){let t=Date.now();this.cache.forEach((e,i)=>{e.timestamp+this.ttl<=t&&this.cache.delete(i)})}};var Le=class{constructor(t,e){this.pvName=t;this.formula=e}pvName;formula;pvValues=new Map;updateDataSource(t,e){this.pvValues.set(t,e)}clearState(){this.pvValues.clear()}getPVNames(){let t=this.formula.expression,e=[];return this.getExpressionParameters(t,e),e}getExpressionParameters(t,e){switch(t.type){case"ParameterLiteral":e.indexOf(t.value)===-1&&e.push(t.value);break;case"ConditionalExpression":this.getExpressionParameters(t.consequent,e),t.alternate&&this.getExpressionParameters(t.alternate,e);break;case"BinaryExpression":this.getExpressionParameters(t.left,e),this.getExpressionParameters(t.right,e);break;case"LogicalExpression":this.getExpressionParameters(t.left,e),this.getExpressionParameters(t.right,e);break;case"UnaryExpression":this.getExpressionParameters(t.argument,e);break;case"CallExpression":for(let i of t.arguments)this.getExpressionParameters(i,e);break}}execute(){let t=this.formula.expression;return this.executeExpression(t)}executeExpression(t){switch(t.type){case"BooleanLiteral":return t.value;case"ParameterLiteral":let e=this.pvValues.get(t.value);return e?e.value:void 0;case"ConstantLiteral":return t.value;case"NumericLiteral":return t.value;case"StringLiteral":return t.value;case"ConditionalExpression":return this.executeConditionalExpression(t);case"BinaryExpression":return this.executeBinaryExpression(t);case"LogicalExpression":return this.executeLogicalExpression(t);case"UnaryExpression":return this.executeUnaryExpression(t);case"CallExpression":return this.executeCallExpression(t);default:throw new Error("Unexpected expression type")}}executeBinaryExpression(t){let e=this.executeExpression(t.left),i=this.executeExpression(t.right);switch(t.operator){case"+":return e+i;case"-":return e-i;case"*":return e*i;case"/":return e/i;case"^":return Math.pow(e,i);case"%":return e%i;case"==":return e===i;case"!=":return e!==i;case"<=":return e<=i;case"<":return e<i;case">=":return e>=i;case">":return e>i;default:throw new Error(`Unexpected binary operator ${t.operator}`)}}executeLogicalExpression(t){let e=this.executeExpression(t.left),i=this.executeExpression(t.right);switch(t.operator){case"&&":return e&&i;case"||":return e||i;default:throw new Error(`Unexpected logical operator ${t.operator}`)}}executeConditionalExpression(t){let e=this.executeExpression(t.test),i=this.executeExpression(t.consequent);if(t.alternate===void 0)return e?i:null;{let r=this.executeExpression(t.alternate);return e?i:r}}executeUnaryExpression(t){let e=this.executeExpression(t.argument);switch(t.operator){case"-":return-e;case"+":return e;default:throw new Error(`Unexpected unary operator ${t.operator}`)}}executeCallExpression(t){let e=t.callee.name,i=[];for(let r of t.arguments)i.push(this.executeExpression(r));switch(e){case"abs":return Math.abs(i[0]);case"acos":return Math.acos(i[0]);case"asin":return Math.asin(i[0]);case"atan":return Math.atan(i[0]);case"cbrt":return Math.cbrt(i[0]);case"ceil":return Math.ceil(i[0]);case"cos":return Math.cos(i[0]);case"cosh":return Math.cosh(i[0]);case"exp":return Math.exp(i[0]);case"floor":return Math.floor(i[0]);case"log":return Math.log(i[0]);case"log10":return Math.log10(i[0]);case"round":return Math.round(i[0]);case"signum":return Math.sign(i[0]);case"sin":return Math.sin(i[0]);case"sinh":return Math.sinh(i[0]);case"sqrt":return Math.sqrt(i[0]);case"tan":return Math.tan(i[0]);case"tanh":return Math.tanh(i[0]);case"toDegrees":return i[0]*180/Math.PI;case"toRadians":return i[0]/180*Math.PI;case"parameterAcquisitionStatus":return this.callParameterAcquisitionStatus(i[0]);default:throw new Error(`Unsupported function '${e}'`)}}callParameterAcquisitionStatus(t){let e=this.pvValues.get(t);if(e)return e.acquisitionStatus}};var Ae=class extends SyntaxError{constructor(t,e,i,r){super(t),this.expected=e,this.found=i,this.location=r,this.name="SyntaxError"}format(t){let e="Error: "+this.message;if(this.location){let i=null,r=t.find(a=>a.source===this.location.source);r&&(i=r.text.split(/\r\n|\n|\r/g));let s=this.location.start,o=this.location.source&&typeof this.location.source.offset=="function"?this.location.source.offset(s):s,n=this.location.source+":"+o.line+":"+o.column;if(i){let a=this.location.end,l="".padEnd(o.line.toString().length," "),c=i[s.line-1],u=(s.line===a.line?a.column:c.length+1)-s.column||1;e+=`
|
|
1
|
+
function Bu(p){let t=document.createElement("canvas").getContext("2d");t.fillStyle=p;let e=String(t.fillStyle),i=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return i?new m(parseInt(i[1],16),parseInt(i[2],16),parseInt(i[3],16)):m.BLACK}var m=class p{constructor(t,e,i,r=255){this.red=t;this.green=e;this.blue=i;this.alpha=r}red;green;blue;alpha;static TRANSPARENT=new p(0,0,0,0);static BLACK=new p(0,0,0);static BLUE=new p(0,0,255);static CYAN=new p(0,255,255);static DARK_GRAY=new p(150,150,150);static GRAY=new p(200,200,200);static GREEN=new p(0,255,0);static LIGHT_BLUE=new p(153,186,243);static ORANGE=new p(255,128,0);static PINK=new p(255,0,255);static PURPLE=new p(128,0,255);static RED=new p(255,0,0);static WHITE=new p(255,255,255);static YELLOW=new p(255,255,0);static BUTTON=new p(239,240,241);static BUTTON_DARKER=new p(164,168,172);static BUTTON_DARKEST=p.BLACK;static BUTTON_LIGHTEST=p.WHITE;withAlpha(t){return new p(this.red,this.green,this.blue,t)}mixWith(t,e){let i=Math.floor(this.red*e+t.red*(1-e)),r=Math.floor(this.green*e+t.green*(1-e)),s=Math.floor(this.blue*e+t.blue*(1-e));return new p(i,r,s)}brighter(){let{red:t,green:e,blue:i}=this,r=Math.floor(1/(1-.7));return t===0&&e===0&&i===0?new p(r,r,r):(t>0&&t<r&&(t=r),e>0&&e<r&&(e=r),i>0&&i<r&&(i=r),new p(Math.min(Math.floor(this.red/.7),255),Math.min(Math.floor(this.green/.7),255),Math.min(Math.floor(this.blue/.7),255)))}darker(){return new p(Math.max(Math.floor(this.red*.7),0),Math.max(Math.floor(this.green*.7),0),Math.max(Math.floor(this.blue*.7),0))}contrast(){return new p(this.red,255-this.green,255-this.blue)}hex(){let t=this.red.toString(16);t=t.length==1?"0"+t:t;let e=this.green.toString(16);e=e.length==1?"0"+e:e;let i=this.blue.toString(16);i=i.length==1?"0"+i:i;let r=this.alpha.toString(16);return r=r.length==1?"0"+r:r,`#${t}${e}${i}${r}`}getRGBValue(){return this}equals(t){return t&&this.toString()===t.toString()}toString(){return`rgba(${this.red},${this.green},${this.blue},${this.alpha})`}};var ye=class{writeInfo(t){console.log(t)}writeError(t){console.error(t)}writeWarning(t){console.warn(t)}};var be=class{openConfirmDialog(t,e){return confirm(e)}openInformationDialog(t,e){alert(e)}openWarningDialog(t,e){alert(e)}openErrorDialog(t,e){alert(e)}openPasswordDialog(t,e,i){let r=prompt(e);return r?r===i:!1}};var Tr=p=>(document.removeEventListener("click",Tr,!0),p.preventDefault(),p.stopPropagation(),!1);function Rr(p){return(p.buttons&1)===1||p.buttons===void 0&&p.which==1}var Ps=5;function Wu(p,t,e,i){return Math.sqrt((e-p)*(e-p)+(i-t)*(i-t))}function vs(p,t){return p&&t&&p.id===t.id}var We=class{constructor(t,e,i){this.display=t;this.canvas=e;this.hitCanvas=i;e.addEventListener("click",r=>this.onCanvasClick(r),!1),e.addEventListener("mousedown",r=>this.onCanvasMouseDown(r),!1),e.addEventListener("mouseup",r=>this.onCanvasMouseUp(r),!1),e.addEventListener("mouseout",r=>this.onCanvasMouseOut(r),!1),e.addEventListener("mousemove",r=>this.onCanvasMouseMove(r),!1)}display;canvas;hitCanvas;grabbing=!1;grabTarget;grabPoint;documentMouseMoveListener=t=>this.onDocumentMouseMove(t);documentMouseUpListener=t=>this.onDocumentMouseUp(t);prevEnteredRegion;toPoint(t){let e=this.canvas.getBoundingClientRect();return{x:t.clientX-e.left,y:t.clientY-e.top}}onCanvasClick(t){this.display.clearSelection();let e=this.toPoint(t);if(this.display.editMode)this.selectSingleWidget(e.x,e.y);else{let i=this.hitCanvas.getActiveRegion(e.x,e.y);i&&i.click&&i.click({clientX:t.clientX,clientY:t.clientY,point:e})}}onCanvasMouseDown(t){if(!this.display.editMode&&(document.removeEventListener("click",Tr,!0),Rr(t))){let e=this.toPoint(t),i=document.activeElement;this.display.rootPanel.contains(i)&&(i instanceof HTMLInputElement||i instanceof HTMLTextAreaElement||i instanceof HTMLSelectElement)&&i.blur();let r=this.hitCanvas.getActiveRegion(e.x,e.y);return r&&r.mouseDown&&r.mouseDown({clientX:t.clientX,clientY:t.clientY,point:e}),r&&r.grab&&(this.grabPoint={...e},this.grabTarget=r),t.preventDefault(),t.stopPropagation(),!1}}onCanvasMouseUp(t){if(this.display.editMode)return;let e=this.toPoint(t),i=this.hitCanvas.getActiveRegion(e.x,e.y);i&&i.mouseUp&&i.mouseUp()}onCanvasMouseOut(t){this.prevEnteredRegion&&this.prevEnteredRegion.mouseOut&&this.prevEnteredRegion.mouseOut(),this.prevEnteredRegion=void 0,t.preventDefault(),t.stopPropagation()}onCanvasMouseMove(t){let e=this.toPoint(t),i=this.hitCanvas.getActiveRegion(e.x,e.y);this.prevEnteredRegion&&this.prevEnteredRegion.mouseOut&&(vs(this.prevEnteredRegion,i)||this.prevEnteredRegion.mouseOut()),i&&i.mouseEnter&&(vs(this.prevEnteredRegion,i)||i.mouseEnter()),this.prevEnteredRegion=i;let r=i&&i.cursor?i.cursor:"auto";if(r!=this.canvas.style.cursor&&(this.canvas.style.cursor=r),!this.grabbing&&i&&i.tooltip?this.display.setTooltip(i.tooltip()):this.display.setTooltip(void 0),this.grabPoint&&!this.grabbing&&Rr(t)){let s=Wu(this.grabPoint.x,this.grabPoint.y,e.x,e.y);Math.abs(s)>Ps&&(this.initiateGrab(),Ps>0&&this.grabPoint&&(this.grabPoint=e))}this.grabbing&&this.grabTarget&&Rr(t)&&this.grabTarget.grab({clientX:t.clientX,clientY:t.clientY,point:e,dx:e.x-this.grabPoint.x,dy:e.y-this.grabPoint.y})}initiateGrab(){document.addEventListener("click",Tr,!0),document.addEventListener("mouseup",this.documentMouseUpListener),document.addEventListener("mousemove",this.documentMouseMoveListener),this.grabbing=!0}onDocumentMouseUp(t){if(this.grabbing){document.removeEventListener("mouseup",this.documentMouseUpListener),document.removeEventListener("mousemove",this.documentMouseMoveListener);let e=this.grabTarget;this.grabbing=!1,this.grabPoint=void 0,this.grabTarget=void 0,e?.grabEnd&&e.grabEnd()}}onDocumentMouseMove(t){this.onCanvasMouseMove(t)}selectSingleWidget(t,e){let i=this.display.instance;if(i)for(let r of i.widgets.slice().reverse()){let s=r.holderX,o=r.holderY,n=r.holderX+r.holderWidth,a=r.holderY+r.holderHeight;if(s<t&&t<n&&o<e&&e<a)return this.display.selection=[r.wuid],!1}}};var He=class{constructor(t){this.utc=t}utc;formatDate(t,e){let i=this.utc,r="";if(e.year&&(r+=i?t.getUTCFullYear():t.getFullYear()),e.month){e.year&&(r+="-");let s=(i?t.getUTCMonth():t.getMonth())+1;r+=(s<10?"0":"")+s}if(e.day){e.month&&(r+="-");let s=i?t.getUTCDate():t.getDate();r+=(s<10?"0":"")+s}return r}formatTime(t,e){let i=this.utc,r="";if(e.hours){let s=i?t.getUTCHours():t.getHours();r+=(s<10?"0":"")+s}if(e.minutes){e.hours&&(r+=":");let s=i?t.getUTCMinutes():t.getMinutes();r+=(s<10?"0":"")+s}if(e.seconds){e.minutes&&(r+=":");let s=i?t.getUTCSeconds():t.getSeconds();r+=(s<10?"0":"")+s}if(e.milliseconds){e.seconds&&(r+=".");let s=i?t.getUTCMilliseconds():t.getMilliseconds();r+=(s<10?"00":s<100?"0":"")+s}return r}};var _s="rgb(255,255,255)",Hu=!!navigator.brave,ke=class p{constructor(t,e,i){this.parent=t;let r=document.createElement("canvas");r.width=e??r.width,r.height=i??r.height,this.ctx=r.getContext("2d",{willReadFrequently:!0}),this.root=t?.root||t}parent;ctx;regionsByColor=new Map;root;clear(){this.regionsByColor.clear(),this.ctx.fillStyle=_s,this.ctx.fillRect(0,0,this.ctx.canvas.width,this.ctx.canvas.height)}beginHitRegion(t){let e=(this.root||this).generateUniqueColor(t);return this.ctx.beginPath(),this.ctx.fillStyle=e,e}getActiveRegion(t,e){let i=this.ctx.getImageData(t,e,1,1).data,r=`rgb(${i[0]},${i[1]},${i[2]})`;return this.regionsByColor.get(r)||void 0}createChild(t,e){return new p(this,t,e)}transferToParent(t,e,i,r){if(!this.parent)throw new Error("No parent to transfer to");this.parent.ctx.drawImage(this.ctx.canvas,t,e,i,r)}generateUniqueColor(t){for(;;){let e=Math.round(Math.random()*255),i=Math.round(Math.random()*255),r=Math.round(Math.random()*255),s=`rgb(${e},${i},${r})`;if(!this.regionsByColor.has(s)&&s!==_s)return Hu?(this.regionsByColor.set(`rgb(${e-1},${i-1},${r-1})`,t),this.regionsByColor.set(`rgb(${e-1},${i-1},${r})`,t),this.regionsByColor.set(`rgb(${e-1},${i-1},${r+1})`,t),this.regionsByColor.set(`rgb(${e-1},${i},${r-1})`,t),this.regionsByColor.set(`rgb(${e-1},${i},${r})`,t),this.regionsByColor.set(`rgb(${e-1},${i},${r+1})`,t),this.regionsByColor.set(`rgb(${e-1},${i+1},${r-1})`,t),this.regionsByColor.set(`rgb(${e-1},${i+1},${r})`,t),this.regionsByColor.set(`rgb(${e-1},${i+1},${r+1})`,t),this.regionsByColor.set(`rgb(${e},${i-1},${r-1})`,t),this.regionsByColor.set(`rgb(${e},${i-1},${r})`,t),this.regionsByColor.set(`rgb(${e},${i-1},${r+1})`,t),this.regionsByColor.set(`rgb(${e},${i},${r-1})`,t),this.regionsByColor.set(`rgb(${e},${i},${r})`,t),this.regionsByColor.set(`rgb(${e},${i},${r+1})`,t),this.regionsByColor.set(`rgb(${e},${i+1},${r-1})`,t),this.regionsByColor.set(`rgb(${e},${i+1},${r})`,t),this.regionsByColor.set(`rgb(${e},${i+1},${r+1})`,t),this.regionsByColor.set(`rgb(${e+1},${i-1},${r-1})`,t),this.regionsByColor.set(`rgb(${e+1},${i-1},${r})`,t),this.regionsByColor.set(`rgb(${e+1},${i-1},${r+1})`,t),this.regionsByColor.set(`rgb(${e+1},${i},${r-1})`,t),this.regionsByColor.set(`rgb(${e+1},${i},${r})`,t),this.regionsByColor.set(`rgb(${e+1},${i},${r+1})`,t),this.regionsByColor.set(`rgb(${e+1},${i+1},${r-1})`,t),this.regionsByColor.set(`rgb(${e+1},${i+1},${r})`,t),this.regionsByColor.set(`rgb(${e+1},${i+1},${r+1})`,t)):this.regionsByColor.set(s,t),s}}};function xt(p,t,e,i,r){return D({x:p,y:t,width:e,height:i},r/2)}function Tt(p,t,e,i,r){let s=Math.sin(r),o=Math.cos(r),n=p-e,a=t-i;return{x:n*o-a*s+e,y:n*s+a*o+i}}function D(p,t,e){return e===void 0&&(e=t),{x:p.x+e,y:p.y+t,width:p.width-(e+e),height:p.height-(t+t)}}function Cr(p){return{x:Math.round(p.x)+.5,y:Math.round(p.y)+.5,width:Math.round(p.width),height:Math.round(p.height)}}function Rs(p,t){let e=p.x,i=p.y,r=e+p.width,s=i+p.height;if(r<e){let u=e;e=r,r=u}if(s<i){let u=i;i=s,s=u}let o=t.x,n=t.y,a=o+t.width,l=n+t.height;if(a<o){let u=o;o=a,a=u}if(l<n){let u=n;n=l,l=u}let c=Math.max(e,o),h=Math.max(i,n);return{x:c,y:h,width:Math.min(r,a)-c,height:Math.min(s,l)-h}}function wt(p,t,e){return{x:p.x+t,y:p.y+e}}function Kt(p,t,e){return p.map(i=>wt(i,t,e))}function $(p){return p*Math.PI/180}function yt(p,t,e){let i=Math.floor(p*Math.cos(t)),r=Math.floor(-p*Math.sin(t));return{x:e.x+e.width/2+i,y:e.y+e.height/2+r}}function De(p,t){let e=t.x-p.x,i=t.y-p.y,r=Math.sqrt(Math.pow(e,2)+Math.pow(i,2)),s=Math.acos(e/r);return i>0&&(s=2*Math.PI-s),new at(Math.floor(r),s)}var at=class{constructor(t,e){this.r=t;this.theta=e}r;theta;toPoint(){let t=Math.floor(this.r*Math.cos(this.theta)),e=Math.floor(-this.r*Math.sin(this.theta));return{x:t,y:e}}};function Dt(p,t){return p.map(e=>({x:e.x*t,y:e.y*t}))}function Ne(p){return p.map(t=>({x:t.x+.5,y:t.y+.5}))}function Fe(p,t,e,i,r,s,o){p.beginPath(),!s&&!o?p.rect(t,e,i,r):(i<2*s&&(s=i/2),r<2*o&&(o=r/2),p.moveTo(t+s,e),p.lineTo(t+i-s,e),p.quadraticCurveTo(t+i,e,t+i,e+o),p.lineTo(t+i,e+r-o),p.quadraticCurveTo(t+i,e+r,t+i-s,e+r),p.lineTo(t+s,e+r),p.quadraticCurveTo(t,e+r,t,e+r-o),p.lineTo(t,e+o),p.quadraticCurveTo(t,e,t+s,e))}function Nt(p,t,e,i){return p===null?"":typeof p=="string"?i==="BINARY_STRING"?ku(p):p:typeof p=="number"?e===-1?Ts(t,p,void 0,3):Ts(t,p,e,e):p instanceof Date?p.toISOString().replace("T"," ").replace("Z",""):String(p)}function ku(p){let t="";for(let e=0;e<p.length;e++){let i=p.charCodeAt(e).toString(16);t+=i.length===2?i:"0"+i}return t&&`0x${t.toUpperCase()}`}function Ts(p,t,e,i){if(t==null||t==null)return"";switch(p){case 0:case 1:let r={minimumFractionDigits:e,maximumFractionDigits:i,useGrouping:!1,roundingMode:"halfEven"};return Intl.NumberFormat("en-US",r).format(t);case 2:return t.toExponential(i).replace("e+","E").toUpperCase();case 3:return"0x"+t.toString(16).toUpperCase();default:return console.warn(`Unexpected format type ${p}`),String(t)}}var Ge=class p{constructor(t,e){this.canvas=t;this.ctx=t.getContext("2d"),this.hitCanvas=e||new ke,this.hitCtx=this.hitCanvas.ctx}canvas;ctx;hitCanvas;hitCtx;createChild(t,e){let i=this.hitCanvas.createChild(t,e),r=document.createElement("canvas");return r.width=t,r.height=e,new p(r,i)}translate(t,e){this.ctx.translate(t,e),this.hitCtx.translate(t,e)}copy(t,e,i){this.ctx.drawImage(t.canvas,e,i),t.hitCanvas.transferToParent(e,i,t.canvas.width,t.canvas.height)}copyFitted(t,e,i,r,s){let{width:o,height:n}=t.canvas,a=o/n,l=r,c=l/a;c>s&&(c=s,l=c*a),this.copyScaled(t,e,i,l,c)}copyScaled(t,e,i,r,s){this.ctx.drawImage(t.canvas,e,i,r,s),t.hitCanvas.transferToParent(e,i,r,s)}clearHitCanvas(){this.hitCanvas.clear()}fillCanvas(t){this.ctx.fillStyle=t.toString(),this.ctx.fillRect(0,0,this.ctx.canvas.width,this.ctx.canvas.height)}clearCanvas(){this.ctx.clearRect(0,0,this.ctx.canvas.width,this.ctx.canvas.height)}scaleCanvas(t,e){this.ctx.canvas.style.width=t+"px",this.ctx.canvas.style.height=e+"px"}resize(t,e){(this.ctx.canvas.width!=t||this.ctx.canvas.height!=e)&&(this.ctx.canvas.width=t,this.ctx.canvas.height=e,this.hitCanvas.ctx.canvas.width=t,this.hitCanvas.ctx.canvas.height=e)}fillRect(t){"color"in t?this.ctx.fillStyle=t.color.toString():this.ctx.fillStyle=t.gradient,t.opacity!==void 0&&(this.ctx.globalAlpha=t.opacity),t.rx||t.ry?(Fe(this.ctx,t.x,t.y,t.width,t.height,t.rx||0,t.ry||0),this.ctx.fill()):this.ctx.fillRect(t.x,t.y,t.width,t.height),t.opacity!==void 0&&(this.ctx.globalAlpha=1)}fillText(t){this.ctx.textBaseline=t.baseline,this.ctx.textAlign=t.align,this.ctx.font=t.font.getFontString(),this.ctx.fillStyle=t.color.toString(),this.ctx.fillText(t.text,t.x,t.y)}fillEllipse(t){this.ctx.beginPath();let e=t.startAngle||0,i=t.endAngle===void 0?2*Math.PI:t.endAngle;this.ctx.ellipse(t.cx,t.cy,t.rx,t.ry,0,e,i,t.anticlockwise),"color"in t?this.ctx.fillStyle=t.color.toString():this.ctx.fillStyle=t.gradient,t.opacity!==void 0&&(this.ctx.globalAlpha=t.opacity),this.ctx.fill(),t.opacity!==void 0&&(this.ctx.globalAlpha=1)}strokeEllipse(t){t.dash&&this.ctx.setLineDash(t.dash),this.ctx.lineWidth=t.lineWidth||1,this.ctx.beginPath();let e=t.startAngle||0,i=t.endAngle===void 0?2*Math.PI:t.endAngle;this.ctx.ellipse(t.cx,t.cy,t.rx,t.ry,0,e,i,t.anticlockwise),"color"in t?this.ctx.strokeStyle=t.color.toString():this.ctx.strokeStyle=t.gradient,this.ctx.stroke(),t.dash&&this.ctx.setLineDash([])}measureText(t,e,i=!1){this.ctx.font=e.getFontString();let r=this.ctx.measureText(t),s;return r.fontBoundingBoxAscent!==void 0&&r.fontBoundingBoxDescent!==void 0?s={width:r.width,height:r.fontBoundingBoxAscent+r.fontBoundingBoxDescent}:s={width:r.width,height:e.height},i&&(s.width=Math.ceil(s.width),s.height=Math.ceil(s.height)),s}createLinearGradient(t,e,i,r){return this.ctx.createLinearGradient(t,e,i,r)}strokeRect(t){t.dash&&this.ctx.setLineDash(t.dash);let e=t.lineWidth||1;if(this.ctx.lineWidth=e,this.ctx.strokeStyle=t.color.toString(),t.crispen&&e){let i=D(t,e/2,e/2);t.rx||t.ry?(Fe(this.ctx,i.x,i.y,i.width,i.height,t.rx||0,t.ry||0),this.ctx.stroke()):this.ctx.strokeRect(i.x,i.y,i.width,i.height)}else t.rx||t.ry?(Fe(this.ctx,t.x,t.y,t.width,t.height,t.rx||0,t.ry||0),this.ctx.stroke()):this.ctx.strokeRect(t.x,t.y,t.width,t.height);t.dash&&this.ctx.setLineDash([])}strokePath(t){t.dash&&this.ctx.setLineDash(t.dash),this.ctx.beginPath();for(let e of t.path.segments)e.line?this.ctx.lineTo(e.x,e.y):this.ctx.moveTo(e.x,e.y);this.ctx.lineWidth=t.lineWidth||1,this.ctx.strokeStyle=t.color.toString(),t.opacity!==void 0&&(this.ctx.globalAlpha=t.opacity),this.ctx.stroke(),t.opacity!==void 0&&(this.ctx.globalAlpha=1),t.dash&&this.ctx.setLineDash([])}fillPath(t){this.ctx.beginPath();for(let e of t.path.segments)e.line?this.ctx.lineTo(e.x,e.y):this.ctx.moveTo(e.x,e.y);"color"in t?this.ctx.fillStyle=t.color.toString():this.ctx.fillStyle=t.gradient,t.opacity!==void 0&&(this.ctx.globalAlpha=t.opacity),this.ctx.fill("evenodd"),t.opacity!==void 0&&(this.ctx.globalAlpha=1)}addHitRegion(t){return this.hitCanvas.beginHitRegion(t),new Sr(this.hitCanvas.ctx)}},_=class p{segments=[];constructor(t,e){this.segments.push({x:t,y:e,line:!1})}static fromPoints(t){let e=t.findIndex(r=>r.y!==null);if(e===-1){let r=new p(0,0);return r.segments.length=0,r}let i=new p(t[e].x,t[e].y);for(let r=e+1;r<t.length;r++){let{x:s,y:o}=t[r];o!==null&&(r>0&&t[r-1].y===null?i.moveTo(s,o):i.lineTo(s,o))}return i}getBoundingBox(){let t={x:this.segments[0].x,y:this.segments[0].y},e={x:this.segments[0].x,y:this.segments[0].y};for(let i=0;i<this.segments.length;i++){let r=this.segments[i];r.x<t.x&&(t.x=r.x),r.x>e.x&&(e.x=r.x),r.y<t.y&&(t.y=r.y),r.y>e.y&&(e.y=r.y)}return{x:t.x,y:t.y,width:e.x-t.x,height:e.y-t.y}}lineTo(t,e){return this.segments.push({x:t,y:e,line:!0}),this}moveTo(t,e){return this.segments.push({x:t,y:e,line:!1}),this}closePath(){if(this.segments.length){let t=this.segments[0];this.segments.push({x:t.x,y:t.y,line:!0})}return this}translate(t,e){for(let i of this.segments)i.x+=t,i.y+=e;return this}},Sr=class{constructor(t){this.ctx=t}ctx;addRect(t,e,i,r){return this.ctx.fillRect(t,e,i,r),this}addEllipse(t,e,i,r,s,o,n,a){this.ctx.beginPath(),this.ctx.ellipse(t,e,i,r,s,o,n,a),this.ctx.fill()}addPath(t){this.ctx.beginPath();for(let e of t.segments)e.line?this.ctx.lineTo(e.x,e.y):this.ctx.moveTo(e.x,e.y);this.ctx.fill()}};var Pe=class{load(t){return Promise.resolve(t)}};var jt=class{constructor(t,e=[]){this.widget=t;for(let i of e)this.properties.set(i.name,i)}widget;properties=new Map;generators=[];clear(){this.properties.clear()}add(t){this.properties.set(t.name,t)}addGenerator(t){this.generators.push(t)}all(){return[...this.properties.values()]}loadProperty(t,e){if(t.hasNode(e.name)){if(e instanceof ve)e.value=t.getActions(e.name);else if(e instanceof Ce)e.value=t.getAutoScaleWidgets(e.name);else if(e instanceof w)e.value=t.getBoolean(e.name);else if(e instanceof Ft)e.value=t.getColorMap(e.name);else if(e instanceof S)e.value=t.getColor(e.name);else if(e instanceof B)e.value=t.getFloat(e.name);else if(e instanceof H)e.value=t.getFont(e.name);else if(e instanceof P)e.value=t.getInt(e.name);else if(e instanceof Gt)e.value=t.getMacros(e.name);else if(e instanceof Pt)e.value=t.getPoints(e.name);else if(!(e instanceof bt))if(e instanceof Re)e.value=t.getRules(e.name);else if(e instanceof Te)e.value=t.getScaleOptions(e.name);else if(e instanceof _e)e.value=t.getScripts(e.name);else if(e instanceof R)e.rawValue=t.getString(e.name);else if(e instanceof vt)e.value=t.getStringList(e.name);else if(e instanceof $t)e.value=t.getStringMap(e.name);else if(e instanceof Zt)e.value=t.getStringTable(e.name);else throw new Error(`Property ${e.name} has an unexpected type`)}}loadXMLValues(t){this.properties.forEach(e=>{this.loadProperty(t,e)}),this.resolveStringProperties();for(let e of this.generators)for(let i of e())this.properties.set(i.name,i),this.loadProperty(t,i);this.resolveStringProperties()}resolveStringProperties(){for(let t=0;t<2;t++)this.properties.forEach(e=>{if(e instanceof R){let i=e;i.rawValue!==void 0&&this.widget?e.value=this.widget.expandMacro(i.rawValue):e.value=i.rawValue}})}getProperty(t){return this.properties.get(t)}getValue(t,e=!1){let i=this.properties.get(t);if(i&&i.value!==void 0)return i.value;if(!e)throw new Error(`Missing property ${t}`)}setValue(t,e){let i=this.properties.get(t);if(!i)throw new Error(`Cannot set value of unknown property ${t}`);i.value=e}},Z=class{constructor(t,e){this.name=t;this.defaultValue=e;this.value=e}name;defaultValue;_value;listeners;get value(){return this._value}set value(t){if(this.value!==t){let e=this._value;if(this._value=t,this.listeners)for(let i of this.listeners)i(t,e)}}addListener(t){this.listeners=this.listeners||[],this.listeners.push(t)}removeListener(t){let e=this.listeners||[],i=e.indexOf(t);i!==-1&&e.splice(i,1)}printScriptValue(t){return String(t)}},R=class extends Z{rawValue;printScriptValue(t){return`"${t.replace('"','\\"')}"`}},bt=class extends Z{constructor(e,i){super(e);this.pvPropertyName=i}pvPropertyName},P=class extends Z{},B=class extends Z{},w=class extends Z{},S=class extends Z{printScriptValue(t){let{red:e,green:i,blue:r}={...t};return`ColorFontUtil.getColorFromRGB(${e}, ${i}, ${r})`}},H=class extends Z{printScriptValue(t){let{name:e,height:i,style:r}={...t};return`ColorFontUtil.getFont("${e}", ${i}, ${r})`}},Ft=class extends Z{printScriptValue(t){return`${t.code}`}},Pt=class extends Z{},ve=class extends Z{},Gt=class extends Z{},_e=class extends Z{},vt=class extends Z{},$t=class extends Z{},Zt=class extends Z{},Re=class extends Z{},Te=class extends Z{},Ce=class extends Z{};var Jt=class{actions=[];hookFirstActionToClick=!1;hookAllActionsToClick=!1;add(t){this.actions.push(t)}isClickable(){return this.actions.length&&(this.hookFirstActionToClick||this.hookAllActionsToClick)}getAction(t){if(!(t>=this.actions.length))return this.actions[t]}toString(){return this.actions.length===1?String(this.actions[0]):`${this.actions.length} actions`}};var Cs="description",K=class{properties;constructor(){this.properties=new jt(null,[new R(Cs,"")])}parseNode(t){this.properties.loadXMLValues(t)}get description(){return this.properties.getValue(Cs)}};var Ss="command",Ls="command_directory",As="wait_time",$e=class extends K{constructor(){super(),this.properties.add(new R(Ss,"")),this.properties.add(new R(Ls,"$(user.home)")),this.properties.add(new P(As,10))}execute(t){throw new Error("Unsupported action EXECUTE_CMD")}get command(){return this.properties.getValue(Ss)}get commandDirectory(){return this.properties.getValue(Ls)}get waitTime(){return this.properties.getValue(As)}toString(){return`Execute Command ${this.command}`}};var Nu=["Arial","Arial Black","Courier New","Helvetica","Tahoma","Verdana"],q=class p{constructor(t,e,i,r){this.name=t;this.style=i;r?this.height=e:p.LEGACY_FONT_SIZING?this.height=Math.round(e*16/15):this.height=Math.ceil(e*4/3)}name;style;static LEGACY_FONT_SIZING=!1;static ARIAL_9=new p("Arial",9,0,!1);static ARIAL_10=new p("Arial",10,0,!1);static ARIAL_11=new p("Arial",11,0,!1);static ARIAL_12_BOLD=new p("Arial",12,1,!1);height;scale(t){return new p(this.name,t*this.height,this.style,!0)}getFontString(){let t=this.name;return t.indexOf(" ")!==-1&&(t=`"${t}"`),this.style===1?`bold ${this.height}px ${t}`:this.style===2?`italic ${this.height}px ${t}`:this.style===3?`italic bold ${this.height}px ${t}`:(this.style!==0&&console.warn(`Unsupported font style ${this.style}`),`normal ${this.height}px ${t}`)}get bold(){return this.style===1||this.style===3}get italic(){return this.style===2||this.style===3}isWebSafe(){return Nu.indexOf(this.name)!==-1}};var Ue=class{BLACK=m.BLACK;BLUE=m.BLUE;CYAN=m.CYAN;DARK_GRAY=m.DARK_GRAY;GRAY=m.GRAY;GREEN=m.GREEN;LIGHT_BLUE=m.LIGHT_BLUE;ORANGE=m.ORANGE;PINK=m.PINK;PURPLE=m.PURPLE;RED=m.RED;WHITE=m.WHITE;YELLOW=m.YELLOW;getColorFromRGB(t,e,i){return new m(t,e,i)}getFont(t,e,i){return new q(t,e,i,!1)}};var Ye=class{constructor(t){this.display=t}display;writeInfo(t){this.display.getConsoleHandler().writeInfo(t)}writeError(t){this.display.getConsoleHandler().writeError(t)}writeWarning(t){this.display.getConsoleHandler().writeWarning(t)}};var Xe=class{createDoubleArray(t){return Array(t).fill(0)}createIntArray(t){return Array(t).fill(0)}toJavaDoubleArray(t){return[...t]}toJavaIntArray(t){return[...t]}};var ze=class{constructor(t,e){this.spreadsheet=t;this.scriptEngine=e}spreadsheet;scriptEngine;addModifiedListener(t){}addSelectionChangedListener(t){this.spreadsheet.addSelectionChangedListener(()=>{this.scriptEngine.schedule(()=>{let e=t.selectionChanged;e(this.spreadsheet.getSelection())})})}appendRow(){return this.spreadsheet.appendRow()}deleteColumn(t){this.spreadsheet.deleteColumn(t)}deleteRow(t){this.spreadsheet.deleteRow(t)}getCellText(t,e){return this.spreadsheet.getCellText(t,e)}getColumnCount(){return this.spreadsheet.getColumnCount()}getContent(){return this.spreadsheet.getContent()}getRowCount(){return this.spreadsheet.getRowCount()}getSelection(){return this.spreadsheet.getSelection()}insertColumn(t){this.spreadsheet.insertColumn(t)}insertRow(t){this.spreadsheet.insertRow(t)}isEmpty(){return this.spreadsheet.isEmpty()}refresh(){this.spreadsheet.refresh()}setCellBackground(t,e,i){this.spreadsheet.setCellBackground(t,e,i)}setCellForeground(t,e,i){this.spreadsheet.setCellForeground(t,e,i)}setCellText(t,e,i){this.spreadsheet.setCellText(t,e,i)}setColumnCellEditorData(t,e){this.spreadsheet.setColumnCellEditorData(t,e)}setColumnsCount(t){this.spreadsheet.setColumnsCount(t)}setContent(t){this.spreadsheet.setContent(t)}setRowBackground(t,e){this.spreadsheet.setRowBackground(t,e)}setRowForeground(t,e){this.spreadsheet.setRowForeground(t,e)}revealRow(t){}};var Ut=class{constructor(t,e,i){this.code=t;this.interpolate=e;this.autoscale=i;t===0||(t===1?(this.values=[0,1],this.colors=[[0,0,0],[255,255,255]]):t===2?(this.values=[0,.111,.365,.619,.873,1],this.colors=[[0,0,143],[0,0,255],[0,255,255],[255,255,0],[255,0,0],[128,0,0]]):t===3?(this.values=[0,.126,.251,.375,.5,.625,.749,.874,1],this.colors=[[0,0,0],[255,0,255],[0,0,255],[0,255,255],[0,255,0],[255,255,0],[255,128,0],[255,0,0],[255,255,255]]):t===4?(this.values=[0,.365,.746,1],this.colors=[[11,0,0],[255,0,0],[255,255,0],[255,255,255]]):t===5?(this.values=[0,1],this.colors=[[0,255,255],[255,0,255]]):t===6&&(this.values=[0,.5,1],this.colors=[[0,0,0],[255,0,0],[255,255,255]]))}code;interpolate;autoscale;values=[];colors=[];entries=[];dirty=!0;addMapping(t,e,i,r){this.values.push(t),this.colors.push([e,i,r]),this.dirty=!0}compile(){this.entries.length=0;for(let t=0;t<this.values.length;t++)this.entries.push([this.values[t],this.colors[t]]);this.entries.sort((t,e)=>t[0]<e[0]?-1:t[0]>e[0]?1:0)}lookup(t){this.dirty&&(this.compile(),this.dirty=!1);let e=this.binarySearch(t);if(e>=0)return this.entries[e][1];if(e=-e-1,e===0)return this.entries[e][1];if(e===this.entries.length)return this.entries[e-1][1];if(this.interpolate){let[i,r]=this.entries[e-1],[s,o]=this.entries[e],n=(t-i)/(s-i),a=Math.floor((o[0]-r[0])*n+r[0]),l=Math.floor((o[1]-r[1])*n+r[1]),c=Math.floor((o[2]-r[2])*n+r[2]);return[a,l,c]}else return this.entries[e-1][1]}getMinMax(){let t=Math.min.apply(Math,this.values),e=Math.max.apply(Math,this.values);return[t,e]}binarySearch(t){let e=0,i=this.entries.length-1;for(;e<=i;){let r=i+e>>1;if(t>this.entries[r][0])e=r+1;else if(t<this.entries[r][0])i=r-1;else return r}return-e-1}};var qe=class{constructor(t,e){this.action=t;this.widget=e}action;widget;getPropertyValue(t){let e=this.action.properties.getProperty(t);return e?e.value:null}setPropertyValue(t,e){let i=this.action.properties.getProperty(t);if(!i)throw new Error(`Cannot set value of unknown property ${t}`);i instanceof R?(e=e!==void 0?String(e):e,this.action.properties.setValue(t,e)):this.action.properties.setValue(t,e),this.widget.requestRepaint()}};var Ke=class{constructor(t){this.array=t}array;get(t){return this.array[t]}};var Ct=class{constructor(t){this._pv=t}_pv;getName(){return this._pv.name}getValue(){return this._pv.value??null}setValue(t,e){this._pv.pvEngine.setValue(new Date,this._pv.name,t)}isConnected(){return!this._pv.disconnected}isWriteAllowed(){return this._pv.writable}addListener(t){this._pv.addListener(()=>{t.valueChanged(this)})}removeListener(t){this._pv.removeListener(t)}};var St=class{constructor(t){this.widget=t}widget;executeAction(t){this.widget.executeActionByIndex(t)}getPVByName(t){let e=this.widget.display.getPV(t);return e?new Ct(e):null}getPV(t="pv_name"){let e=this.getPropertyValue(t);return e?this.getPVByName(e):null}getHookedActions(){let t=this.widget.getHookedActions().map(e=>new qe(e,this.widget));return new Ke(t)}getVar(t){return this.widget.vars.get(t)??null}setVar(t,e){this.widget.vars.set(t,e)}getPropertyValue(t){let e=this.widget.properties.getProperty(t);return e?e.value:null}setPropertyValue(t,e){let i=this.widget.properties.getProperty(t);if(!i)throw new Error(`Cannot set value of unknown property ${t}`);if(i instanceof R)e=e!==void 0?String(e):e,this.widget.properties.setValue(t,e);else if(i instanceof Ft){let r=0;switch(e){case"GrayScale":r=1;break;case"JET":r=2;break;case"ColorSpectrum":r=3;break;case"Hot":r=4;break;case"Cool":r=5;break;case"Shaded":r=6;break}let s=new Ut(r,!0,!0);this.widget.properties.setValue(t,s)}else this.widget.properties.setValue(t,e);this.widget.requestRepaint()}getName(){return this.getPropertyValue("name")}setX(t){this.setPropertyValue("x",t)}setY(t){this.setPropertyValue("y",t)}setWidth(t){this.setPropertyValue("width",t)}setHeight(t){this.setPropertyValue("height",t)}setEnabled(t){this.setPropertyValue("enabled",t)}setVisible(t){this.setPropertyValue("visible",t)}getValue(){return this.widget.value??null}setValue(t){this.widget.value=t}setValueInUIThread(t){this.setValue(t)}};var je=class extends St{table;spreadSheetTable;constructor(t,e){super(t),this.table=t,this.spreadSheetTable=new ze(this.table.spreadsheet,e)}getTable(){return this.spreadSheetTable}};var Ze=class extends St{xyGraph;constructor(t){super(t),this.xyGraph=t}clearGraph(){this.xyGraph.clearGraph()}getXBuffer(t){return this.xyGraph.getTrace(t).snapshot().map(i=>i.x)}getYBuffer(t){return this.xyGraph.getTrace(t).snapshot().map(i=>i.y)}};function Je(p,t){switch(p.widgetType){case"Table":return new je(p,t);case"XY Graph":return new Ze(p);default:return new St(p)}}var Qe=class{constructor(t,e){this.display=t;this.scriptEngine=e}display;scriptEngine;isActive(){return!0}getWidget(t){let e=this.display.findWidgetByName(t);if(e)return Je(e,this.scriptEngine)}};var ti=class{constructor(t){this.display=t}display;readTextFile(t){let e=this.display.resolvePath(t);var i=new XMLHttpRequest;if(i.open("GET",e,!1),i.send(null),i.status===200)return i.responseText;throw Error(`Cannot open ${e}`)}};var ei=class{constructor(t){this.display=t}display;fullScreen(){document.documentElement.requestFullscreen()}openConfirmDialog(t){return this.display.getDialogHandler().openConfirmDialog("Confirm Dialog",t)}openInformationDialog(t){this.display.getDialogHandler().openInformationDialog("Information",t)}openWarningDialog(t){this.display.getDialogHandler().openWarningDialog("Warning",t)}openErrorDialog(t){this.display.getDialogHandler().openErrorDialog("Error",t)}openPasswordDialog(t,e){return this.display.getDialogHandler().openPasswordDialog("Password Input Dialog",t,e)}};var ii=class{constructor(t){this.display=t}display;openInformation(t,e,i){this.display.getDialogHandler().openInformationDialog(e,i)}openConfirm(t,e,i){return this.display.getDialogHandler().openConfirmDialog(e,i)}openError(t,e,i){this.display.getDialogHandler().openErrorDialog(e,i)}};var Yt=class{constructor(t,e){this.name=t;this.pvEngine=e}name;pvEngine;_writable=!1;_units;_labels;_typeHint;_lowerDisplayLimit;_lowerAlarmLimit;_lowerWarningLimit;_upperWarningLimit;_upperAlarmLimit;_upperDisplayLimit;_time;_value;_severity="NONE";_indexValue;_precision=-1;_disconnected=!1;provider;get navigable(){return this.provider?.isNavigable()||!1}get units(){return this._units}set units(t){this._units=t,this.pvEngine.requestRepaint()}get labels(){return this._labels}set labels(t){this._labels=t,this.pvEngine.requestRepaint()}get lowerDisplayLimit(){return this._lowerDisplayLimit}set lowerDisplayLimit(t){this._lowerDisplayLimit=t,this.pvEngine.requestRepaint()}get lowerAlarmLimit(){return this._lowerAlarmLimit}set lowerAlarmLimit(t){this._lowerAlarmLimit=t,this.pvEngine.requestRepaint()}get lowerWarningLimit(){return this._lowerWarningLimit}set lowerWarningLimit(t){this._lowerWarningLimit=t,this.pvEngine.requestRepaint()}get upperWarningLimit(){return this._upperWarningLimit}set upperWarningLimit(t){this._upperWarningLimit=t,this.pvEngine.requestRepaint()}get upperAlarmLimit(){return this._upperAlarmLimit}set upperAlarmLimit(t){this._upperAlarmLimit=t,this.pvEngine.requestRepaint()}get upperDisplayLimit(){return this._upperDisplayLimit}set upperDisplayLimit(t){this._upperDisplayLimit=t,this.pvEngine.requestRepaint()}get precision(){return this._precision}set precision(t){this._precision=t,this.pvEngine.requestRepaint()}get writable(){return this._writable}set writable(t){this._writable=t,this.pvEngine.requestRepaint()}get disconnected(){return this._disconnected}set disconnected(t){this._disconnected=t,this.pvEngine.requestRepaint()}get time(){return this._time}get value(){return this._value}get indexValue(){return this._indexValue}get severity(){return this._severity}get typeHint(){return this._typeHint}get alarmName(){let t=this.toNumber();return t==null?"NONE":t<=(this.lowerAlarmLimit??NaN)?"LOLO":t>=(this.upperAlarmLimit??NaN)?"HIHI":t<=(this.lowerWarningLimit??NaN)?"LOW":t>=(this.upperWarningLimit??NaN)?"HIGH":"NONE"}toNumber(){if(this.value===null)return null;if(typeof this.value=="number")return this.value;if(typeof this.value=="boolean")return this.value?1:0;if(typeof this.indexValue!==void 0)return this.indexValue}setSample(t){this._time=t.time,this._value=t.value,this._indexValue=t.valueIndex,this._severity=t.severity,this._units=t.units,this._typeHint=t.typeHint,this.pvEngine.requestRepaint()}addListener(t){this.pvEngine.addListener(this.name,t)}removeListener(t){this.pvEngine.addListener(this.name,t)}toString(){if(this.value!==void 0)return String(this.value)}},Qt=(s=>(s.NONE="NONE",s.MINOR="MINOR",s.MAJOR="MAJOR",s.INVALID="INVALID",s.UNDEFINED="UNDEFINED",s))(Qt||{});var Fu=["yyyy","MM","dd","HH","mm","ss","nnnnnnnnn"],ri=class{constructor(t){this.display=t;this.pvEngine=t.pvEngine}display;pvEngine;checkPVValue(t){if(t.getValue()===null)throw new Error(`PV ${t.getName()} has no value.`)}createPV(t,e){let i=this.pvEngine.createPV(t);return new Ct(i)}writePV(t,e,i){this.pvEngine.createPV(t),this.pvEngine.setValue(new Date,t,e)}getDouble(t){this.checkPVValue(t);let e=t._pv.toNumber();return parseFloat(e??t.getValue())}getDoubleArray(t){this.checkPVValue(t);let e=t.getValue();return Array.isArray(e)?e.map(i=>parseFloat(i)):[parseFloat(e)]}getLong(t){this.checkPVValue(t);let e=t._pv.toNumber();return typeof e=="number"&&(e=Math.floor(e)),parseInt(e??t.getValue(),10)}getLongArray(t){this.checkPVValue(t);let e=t.getValue();return Array.isArray(e)?e.map(i=>(typeof i=="number"&&(i=Math.floor(i)),parseInt(i,10))):(typeof e=="number"&&(e=Math.floor(e)),[parseInt(e,10)])}getString(t){return this.checkPVValue(t),Nt(t._pv.value,0,-1,t._pv.typeHint)}getStringArray(t){this.checkPVValue(t);let e=t.getValue();return Array.isArray(e)?e.map(i=>String(i)):[String(e)]}getTimeInMilliseconds(t){return this.checkPVValue(t),t._pv.time?.getTime()??0}getTimeString(t,e="yyyy-MM-dd HH:mm:ss.nnnnnnnnn"){this.checkPVValue(t);let i=t._pv.time;if(i){let r=e;for(let s of Fu)r=r.replace(s,this.formatDate(i,s));return r}return null}getSeverity(t){switch(this.checkPVValue(t),t._pv.severity){case"NONE":return 0;case"MAJOR":return 1;case"MINOR":return 2;default:return-1}}getSeverityString(t){return this.checkPVValue(t),String(t._pv.severity)}getStatus(t){return this.checkPVValue(t),t._pv.alarmName}getUnits(t){return this.checkPVValue(t),t._pv.units||null}formatDate(t,e){let{utc:i}=this.display;if(e==="yyyy")return String(i?t.getUTCFullYear():t.getFullYear());if(e==="MM"){let r=(i?t.getUTCMonth():t.getMonth())+1;return r<10?"0"+r:""+r}else if(e==="dd"){let r=i?t.getUTCDate():t.getDate();return r<10?"0"+r:""+r}else if(e==="HH"){let r=i?t.getUTCHours():t.getHours();return r<10?"0"+r:""+r}else if(e==="mm"){let r=i?t.getUTCMinutes():t.getMinutes();return r<10?"0"+r:""+r}else if(e==="ss"){let r=i?t.getUTCSeconds():t.getSeconds();return r<10?"0"+r:""+r}else if(e==="nnnnnnnnn"){let r=i?t.getUTCMilliseconds():t.getMilliseconds();return r<10?"00"+r:r<100?"0"+r:""+r}else throw new Error(`Unexpected format '${e}'`)}};var si=class{constructor(t){this.display=t}display;openOPI(t,e,i,r){if(i===0){let s={path:e,replace:i===0};this.display.fireEvent("opendisplay",s)}else throw new Error(`Unsupported target ${i}`)}closeCurrentOPI(){this.display.fireEvent("closedisplay",{})}};function Es(p){let t=p.widget,e=p.widget.display,i=function(c){this.run=c.run},r=function(c){this.runnable=c};r.prototype.start=function(){p.schedule(()=>this.runnable.run())},r.sleep=function(c){let h=Date.now(),u=0;for(;Date.now()<h+c;)u++;u||console.trace("Should not happen")};let s=function(){};s.prototype.schedule=function(c,h){p.schedule(c,h)};let o=function(c){this.valueChanged=h=>{p.schedule(()=>{let u=c.valueChanged;u(h)})}},l={ITableModifiedListener:function(c){this.modified=h=>{let u=c.modified;u(h)}},ITableSelectionChangedListener:function(c){this.selectionChanged=h=>{let u=c.selectionChanged;u(h)}}};return{display:new Qe(t.display,p),widget:Je(t,p),java:{lang:{Runnable:i,Thread:r},util:{Timer:s}},org:{csstudio:{swt:{widgets:{natives:{SpreadSheetTable:l}}}},yamcs:{studio:{data:{IPVListener:o}}}},ColorFontUtil:new Ue,ConsoleUtil:new Ye(e),DataUtil:new Xe,FileUtil:new ti(e),GUIUtil:new ei(e),MessageDialog:new ii(e),PVUtil:new ri(e),ScriptUtil:new si(e),SpreadSheetTable:l,Java:{type:function(c){switch(c){case"java.lang.Runnable":return i;case"java.lang.Thread":return r;case"java.util.Timer":return s;case"org.csstudio.swt.widgets.natives.SpreadSheetTable":return l;case"org.yamcs.studio.data.IPVListener":return o;default:throw new Error("Unexpected class name: "+c)}},to:function(c,h){return c}}}}var Lt=class{constructor(t,e,i=[]){this.widget=t;this.scriptText=e;this.scriptText=e.replace(/importClass\([^\)]*\)\s*\;?/gi,"").replace(/importPackage\([^\)]*\)\s*\;?/gi,"").trim(),this.context={pvs:i.map(r=>new Ct(r)),triggerPV:null,...t.display.pvEngine.scriptLibraries,...Es(this)}}widget;scriptText;context;run(t){window.setTimeout(()=>{if(this.context.triggerPV=null,t)for(let e of this.context.pvs)e._pv===t&&(this.context.triggerPV=e);this.runWithContext(()=>{(0,eval)(this.scriptText)})})}schedule(t,e){window.setTimeout(()=>this.runWithContext(t),e)}runWithContext(t){let e=[];for(let i in window)e.push(i);try{for(let r in this.context)this.context.hasOwnProperty(r)&&(window[r]=this.context[r]);t();let i={};for(let r in window)e.indexOf(r)===-1&&(i[r]=window[r]);this.context=i}finally{for(let i in window)e.indexOf(i)===-1&&delete window[i]}}};var Os="path",Vs="embedded",Ms="scriptText",oi=class extends K{constructor(){super(),this.properties.add(new R(Os,"")),this.properties.add(new w(Vs,!1)),this.properties.add(new R(Ms,""))}execute(t){this.embedded?new Lt(t,this.scriptText).run():t.display.getScriptLoader().load(this.path).then(i=>{i&&new Lt(t.display.instance,i).run()})}get path(){return this.properties.getValue(Os)}get embedded(){return this.properties.getValue(Vs)}get scriptText(){return this.properties.getValue(Ms)}toString(){return"Execute JavaScript"}};var Is="macros",Bs="mode",Ws="path",ni=class extends K{constructor(){super(),this.properties.add(new R(Ws,"")),this.properties.add(new Gt(Is)),this.properties.add(new P(Bs,0))}execute(t){let e={...this.macros.macros},i={path:this.path,replace:this.mode===0,args:e};t.display.fireEvent("opendisplay",i)}get macros(){return this.properties.getValue(Is)}get path(){return this.properties.getValue(Ws)}get mode(){return this.properties.getValue(Bs)}toString(){return`Open ${this.path}`}};var Hs="path",ai=class extends K{constructor(){super(),this.properties.add(new R(Hs,""))}execute(t){throw new Error("Unsupported action OPEN_FILE")}get path(){return this.properties.getValue(Hs)}toString(){return`Open ${this.path}`}};var ks="hyperlink",li=class extends K{constructor(){super(),this.properties.add(new R(ks,"http://"))}execute(t){this.hyperlink&&window.parent.postMessage({type:"openwebpage",url:this.hyperlink},"*")}get hyperlink(){return this.properties.getValue(ks)}toString(){return`Open Webpage ${this.hyperlink}`}};var Ds="path",hi=class extends K{constructor(){super(),this.properties.add(new R(Ds,""))}execute(t){this.path&&new Audio(t.display.resolvePath(this.path)).play()}get path(){return this.properties.getValue(Ds)}toString(){return`Play WAV File ${this.path}`}};var Ns="command",Fs="args",Gs="confirm_message",ci=class extends K{constructor(){super(),this.properties.add(new R(Ns,"")),this.properties.add(new $t(Fs,{})),this.properties.add(new R(Gs,""))}execute(t){if(this.confirmMessage&&!t.display.getDialogHandler().openConfirmDialog("Confirm Dialog",this.confirmMessage))return;let e=t.expandMacro(this.command),i={};for(let s in this.args)i[s]=t.expandMacro(this.args[s]);let r={command:e,args:i};t.display.fireEvent("runcommand",r)}get command(){return this.properties.getValue(Ns)}get args(){return this.properties.getValue(Fs)}get confirmMessage(){return this.properties.getValue(Gs)}toString(){return`Run ${this.command}`}};var $s="procedure",Us="args",Ys="confirm_message",pi=class extends K{constructor(){super(),this.properties.add(new R($s,"")),this.properties.add(new $t(Us,{})),this.properties.add(new R(Ys,""))}execute(t){if(this.confirmMessage&&!t.display.getDialogHandler().openConfirmDialog("Confirm Dialog",this.confirmMessage))return;let e={procedure:this.procedure,args:this.args};t.display.fireEvent("runprocedure",e)}get procedure(){return this.properties.getValue($s)}get args(){return this.properties.getValue(Us)}get confirmMessage(){return this.properties.getValue(Ys)}toString(){return`Run ${this.procedure}`}};var Xs="path",zs="confirm_message",di=class extends K{constructor(){super(),this.properties.add(new R(Xs,"")),this.properties.add(new R(zs,""))}execute(t){if(this.confirmMessage&&!t.display.getDialogHandler().openConfirmDialog("Confirm Dialog",this.confirmMessage))return;let i={path:t.display.resolvePath(this.path)};t.display.fireEvent("runstack",i)}get path(){return this.properties.getValue(Xs)}get confirmMessage(){return this.properties.getValue(zs)}toString(){return`Run ${this.path}`}};var qs="pv_name",Ks="value",js="timeout",Zs="confirm_message",ui=class extends K{constructor(){super(),this.properties.add(new R(qs,"$(pv_name)")),this.properties.add(new R(Ks,"")),this.properties.add(new P(js,10)),this.properties.add(new R(Zs,""))}execute(t){if(!(this.confirmMessage&&!t.display.getDialogHandler().openConfirmDialog("Confirm Dialog",this.confirmMessage))&&this.pvName){let e=t.expandMacro(this.pvName);t.display.pvEngine.createPV(e),t.display.pvEngine.setValue(new Date,e,this.value)}}get pvName(){return this.properties.getValue(qs)}get value(){return this.properties.getValue(Ks)}get timeout(){return this.properties.getValue(js)}get confirmMessage(){return this.properties.getValue(Zs)}toString(){return`Write ${this.value} to ${this.pvName}`}};var gi=class{includeParentMacros=!0;macros={};clear(){this.macros={}}set(t,e){this.macros[t]=e}get(t){if(t in this.macros)return this.macros[t]}};var te=class{rules=[]};var mi=class{constructor(t,e,i){this.autoScaleWidgets=t;this.minWidth=e;this.minHeight=i}autoScaleWidgets;minWidth;minHeight},fi=class{constructor(t,e,i){this.widthScalable=t;this.heightScalable=e;this.keepWidthHeightRatio=i}widthScalable;heightScalable;keepWidthHeightRatio};var xi=class{scripts=[]};var ee=class p{constructor(t){this.node=t}node;get name(){return this.node.nodeName}static parseFromXML(t){let i=new DOMParser().parseFromString(t,"text/xml");return new p(i.documentElement)}getNode(t){let e=this.findChild(t);return new p(e)}getNodes(t){let e=[];for(let i=0;i<this.node.childNodes.length;i++){let r=this.node.childNodes[i];r.nodeType!==3&&(!t||r.nodeName===t)&&e.push(new p(r))}return e}hasNode(t){for(let e=0;e<this.node.childNodes.length;e++)if(this.node.childNodes[e].nodeName===t)return!0;return!1}hasAttribute(t){return this.node.hasAttribute(t)}getTextContent(t){return this.node.textContent||t||""}getString(t,e){for(let i=0;i<this.node.childNodes.length;i++){let r=this.node.childNodes[i];if(r.nodeName===t&&r.textContent!==null)return r.textContent}if(e!==void 0)return e;throw new Error(`No child node named ${t} could be found`)}getStringAttribute(t){let e=this.node.attributes.getNamedItem(t);if(e===null)throw new Error(`No attribute named ${t}`);return e.textContent||""}getFloat(t,e){for(let i=0;i<this.node.childNodes.length;i++){let r=this.node.childNodes[i];if(r.nodeName===t&&r.textContent!==null)return parseFloat(r.textContent)}if(e!==void 0)return e;throw new Error(`No child node named ${t} could be found`)}getInt(t,e){for(let i=0;i<this.node.childNodes.length;i++){let r=this.node.childNodes[i];if(r.nodeName===t&&r.textContent!==null)return parseInt(r.textContent,10)}if(e!==void 0)return e;throw new Error(`No child node named ${t} could be found`)}getIntAttribute(t){let e=this.node.attributes.getNamedItem(t);if(e===null)throw new Error(`No attribute named ${t}`);return parseInt(e.textContent||"",10)}getBoolean(t,e){for(let i=0;i<this.node.childNodes.length;i++){let r=this.node.childNodes[i];if(r.nodeName===t)return r.textContent==="true"}if(e!==void 0)return e;throw new Error(`No child node named ${t} could be found`)}getBooleanAttribute(t,e){let i=this.node.attributes.getNamedItem(t);if(i===null){if(e!==void 0)return e;throw new Error(`No attribute named ${t}`)}else return i.textContent==="true"}getColor(t,e){let i=this.findChild(t);for(let r=0;r<i.childNodes.length;r++){let s=i.childNodes[r];if(s.nodeName==="color")return this.parseColorNode(new p(s))}if(e!==void 0)return e;throw new Error("No child node named 'color' could be found")}getFont(t){let e=this.getNode(t);if(e.hasNode("opifont.name")){let i=e.getNode("opifont.name"),r=i.getStringAttribute("fontName"),s=i.getIntAttribute("height"),o=i.getIntAttribute("style"),n=!1;return i.hasAttribute("pixels")&&(n=i.getBooleanAttribute("pixels")),new q(r,s,o,n)}else{let i=e.getNode("fontdata"),r=i.getStringAttribute("fontName"),s=i.getIntAttribute("height"),o=i.getIntAttribute("style"),n=!1;return i.hasAttribute("pixels")&&(n=i.getBooleanAttribute("pixels")),new q(r,s,o,n)}}getPoints(t){let e=this.getNode(t),i=[];for(let r of e.getNodes("point"))i.push({x:r.getIntAttribute("x"),y:r.getIntAttribute("y")});return i}getStringList(t){let e=this.getNode(t),i=[];for(let r of e.getNodes("s"))i.push(r.getTextContent());return i}getStringMap(t){let e=this.getNode(t),i={};for(let r of e.getNodes())i[r.name]=e.getString(r.name);return i}getStringTable(t){let e=this.getNode(t),i=[];for(let r of e.getNodes("row")){let s=[];for(let o of r.getNodes("col"))s.push(o.getTextContent());i.push(s)}return i}getScripts(t){let e=this.getNode(t),i=new xi;for(let r of e.getNodes("path")){let s=[];for(let n of r.getNodes("pv"))s.push({pvName:n.getTextContent(),trigger:n.getBooleanAttribute("trig")});let o=r.getStringAttribute("pathString");o==="EmbeddedJs"?i.scripts.push({embedded:!0,text:r.getString("scriptText"),checkConnect:r.getBooleanAttribute("checkConnect"),skipFirstExecution:r.getBooleanAttribute("sfe",!1),inputs:s}):o==="EmbeddedPy"?console.warn("Unsupported EmbeddedPy script"):i.scripts.push({embedded:!1,path:o,checkConnect:r.getBooleanAttribute("checkConnect"),skipFirstExecution:r.getBooleanAttribute("sfe",!1),inputs:s})}return i}getScaleOptions(t){let e=this.getNode(t);return new fi(e.getBoolean("width_scalable"),e.getBoolean("height_scalable"),e.getBoolean("keep_wh_ratio"))}getAutoScaleWidgets(t){let e=this.getNode(t);return new mi(e.getBoolean("auto_scale_widgets"),e.getInt("min_width"),e.getInt("min_height"))}getColorMap(t){let e=this.getNode(t);if(e.hasNode("e")){let i=new Ut(0,e.getBoolean("interpolate"),e.getBoolean("autoscale"));for(let r of e.getNodes("e")){let s=Number(r.getTextContent()),o=r.getIntAttribute("red"),n=r.getIntAttribute("green"),a=r.getIntAttribute("blue");i.addMapping(s,o,n,a)}}else return new Ut(e.getInt("map"),e.getBoolean("interpolate"),e.getBoolean("autoscale"))}getRules(t){let e=this.getNode(t),i=new te;for(let r of e.getNodes("rule")){let s=[];for(let n of r.getNodes("pv"))s.push({pvName:n.getTextContent(),trigger:n.getBooleanAttribute("trig")});let o=[];for(let n of r.getNodes("exp"))if(n.getNode("value").hasNode("color"))o.push({type:"color",expression:n.getStringAttribute("bool_exp"),outputValue:n.getColor("value")});else{let l=n.getString("value");l.trim()!==""&&o.push({type:"string",expression:n.getStringAttribute("bool_exp"),outputValue:l})}i.rules.push({name:r.getStringAttribute("name"),propertyName:r.getStringAttribute("prop_id"),outputExpression:r.getBooleanAttribute("out_exp"),inputs:s,expressions:o})}return i}getMacros(t){let e=this.getNode(t),i=new gi;i.includeParentMacros=e.getBoolean("include_parent_macros");for(let r of e.getNodes())r.name!=="include_parent_macros"&&i.set(r.name,e.getString(r.name));return i}getActions(t){let e=this.getNode(t),i=new Jt;i.hookFirstActionToClick=e.getBooleanAttribute("hook"),i.hookAllActionsToClick=e.getBooleanAttribute("hook_all",!1);for(let r of e.getNodes("action")){let s=r.getStringAttribute("type");if(s==="OPEN_DISPLAY"){let o=new ni;o.parseNode(r),i.add(o)}else if(s==="OPEN_FILE"){let o=new ai;o.parseNode(r),i.add(o)}else if(s==="EXECUTE_CMD"){let o=new $e;o.parseNode(r),i.add(o)}else if(s==="EXECUTE_JAVASCRIPT"){let o=new oi;o.parseNode(r),i.add(o)}else if(s==="WRITE_PV"){let o=new ui;o.parseNode(r),i.add(o)}else if(s==="PLAY_SOUND"){let o=new hi;o.parseNode(r),i.add(o)}else if(s==="OPEN_WEBPAGE"){let o=new li;o.parseNode(r),i.add(o)}else if(s==="RUN_COMMAND"){let o=new ci;o.parseNode(r),i.add(o)}else if(s==="RUN_COMMAND_STACK"){let o=new di;o.parseNode(r),i.add(o)}else if(s==="RUN_PROCEDURE"){let o=new pi;o.parseNode(r),i.add(o)}else console.warn(`Unsupported action type ${s}`),i.add(null)}return i}parseColorNode(t){let e=t.getIntAttribute("red"),i=t.getIntAttribute("green"),r=t.getIntAttribute("blue");return new m(e,i,r)}findChild(t){for(let e=0;e<this.node.childNodes.length;e++){let i=this.node.childNodes[e];if(i.nodeName===t)return i}throw new Error(`No child node named ${t} could be found`)}};var Js="actions",Qs="background_color",to="backcolor_alarm_sensitive",eo="border_alarm_sensitive",io="border_color",ro="border_width",so="border_style",oo="enabled",no="foreground_color",ao="forecolor_alarm_sensitive",Lr="height",lo="name",Ar="pv_name",ho="pv_value",co="rules",po="scale_options",uo="scripts",Er="text",go="tooltip",mo="transparent",fo="visible",xo="widget_type",Or="width",wo="wuid",Vr="x",Mr="y",V=class{constructor(t,e){this.display=t;this.parent=e;this.properties=new jt(this,[new ve(Js,new Jt),new w(to,!1),new S(Qs,m.TRANSPARENT),new w(eo,!1),new S(io),new P(so),new P(ro),new w(oo,!0),new w(ao,!1),new S(no),new P(Lr),new R(lo),new R(Ar),new bt(ho,Ar),new Re(co,new te),new _e(uo),new R(Er,""),new R(go,""),new w(mo,!1),new w(fo),new R(xo),new P(Or),new R(wo),new P(Vr),new P(Mr),new Te(po)])}display;parent;x=0;y=0;width=0;height=0;_value;fillRoundRectangleBackgroundBorder=!0;customSize;customHolderWidth;customHolderHeight;holderRegion;properties;vars=new Map;pvs=[];async parseNode(t){this.properties.loadXMLValues(t);for(let e of this.properties.all())if(e instanceof H){let i=e.value;this.loadFont(i)}if(this.pvName){let e=this.display.pvEngine.createPV(this.pvName);this.pvs.push(e)}for(let e of this.scripts.scripts){let i=[];for(let r of e.inputs){let s=this.expandMacro(r.pvName);i.push(this.display.pvEngine.createPV(s))}if(this.pvs.push(...i),e.embedded)this.display.pvEngine.createScript(this,e,e.text,i);else{let s=await this.display.getScriptLoader().load(e.path);s&&this.display.pvEngine.createScript(this,e,s,i)}}for(let e of this.rules.rules)this.properties.getProperty(e.propertyName)?this.display.pvEngine.createRule(this,e):console.warn(`Cannot create rule for unsupported property ${e.propertyName}`);this.actions.isClickable()&&(this.holderRegion={id:`${this.wuid}-holder`},this.tooltip&&(this.holderRegion.tooltip=()=>this.tooltip),this.actions.isClickable()&&(this.holderRegion.click=()=>{for(let e of this.getHookedActions())this.executeAction(e)},this.holderRegion.cursor="pointer")),await this.init()}getHookedActions(){let{actions:t}=this,e=[];for(let i=0;i<t.actions.length;i++)i===0?(t.hookFirstActionToClick||t.hookAllActionsToClick)&&e.push(t.actions[i]):t.hookAllActionsToClick&&e.push(t.actions[i]);return e}drawHolder(t){let{scale:e}=this,i=[0,0,0,0],r=this.borderAlarmSensitive&&(this.pv?.severity==="MINOR"||this.pv?.severity==="MAJOR");if(!r)switch(this.borderStyle){case 0:break;case 1:i=[this.borderWidth,this.borderWidth,this.borderWidth,this.borderWidth];break;case 2:case 3:i=[1*e,1*e,1*e,1*e];break;case 4:case 5:case 6:i=[2*e,2*e,2*e,2*e];break;case 7:i=[2*e,2*e,1*e,1*e];break;case 8:case 9:case 10:case 11:i=[this.borderWidth,this.borderWidth,this.borderWidth,this.borderWidth];break;case 12:i=[17*e,1*e,1*e,1*e];break;case 13:i=[16*e,16*e,16*e,16*e];break;case 14:let s=this.borderWidth*2;i=[s,s,s,s];break}this.customSize?(this.customHolderWidth=this.customSize.width+i[1]+i[3],this.customHolderHeight=this.customSize.height+i[0]+i[2]):(this.customHolderWidth=void 0,this.customHolderHeight=void 0),this.x=this.holderX+i[1],this.y=this.holderY+i[0],this.width=this.holderWidth-i[1]-i[3],this.height=this.holderHeight-i[0]-i[2],r||(this.beforeDrawBorder(t),this.drawBorderStyle(t)),this.holderRegion&&t.addHitRegion(this.holderRegion).addRect(this.holderX,this.holderY,this.holderWidth,this.holderHeight)}beforeDrawBorder(t){}drawBorderStyle(t){let{scale:e}=this;if(this.borderStyle!==0)if(this.borderStyle===1)t.strokeRect({x:this.holderX,y:this.holderY,width:this.holderWidth,height:this.holderHeight,color:this.borderColor,lineWidth:this.borderWidth,crispen:!0});else if(this.borderStyle===2){let i=1*e,r=this.holderY+i/2,s=this.holderX+i/2,o=this.holderY+this.holderHeight-i+i/2,n=this.holderX+this.holderWidth-i+i/2;t.strokePath({color:m.BLACK,path:new _(n,o).lineTo(n,r).moveTo(n,o).lineTo(s,o)}),t.strokePath({color:m.WHITE,path:new _(s,r).lineTo(n-i,r).moveTo(s,r).lineTo(s,o-i)})}else if(this.borderStyle===3){if(this.isAnyPvInvalid())return;let i=1*e,r=this.holderY+i/2,s=this.holderX+i/2,o=this.holderY+this.holderHeight-i+i/2,n=this.holderX+this.holderWidth-i+i/2;t.strokePath({color:m.WHITE,path:new _(n,o).lineTo(n,r).moveTo(n,o).lineTo(s,o)}),t.strokePath({color:m.BLACK,path:new _(s,r).lineTo(n-i,r).moveTo(s,r).lineTo(s,o-i)})}else if(this.borderStyle===4)this.drawShadowBorder(t,m.BUTTON_LIGHTEST,m.BUTTON_DARKER,m.BUTTON_DARKER,m.BUTTON_LIGHTEST);else if(this.borderStyle===5)this.drawShadowBorder(t,m.BUTTON_DARKER,m.BUTTON_LIGHTEST,m.BUTTON_LIGHTEST,m.BUTTON_DARKER);else if(this.borderStyle===6)this.drawShadowBorder(t,m.BUTTON_DARKEST,m.BUTTON_DARKER,m.BUTTON,m.BUTTON_LIGHTEST);else if(this.borderStyle===7)this.drawShadowBorder(t,m.BUTTON_LIGHTEST,m.BUTTON_LIGHTEST,m.BUTTON_DARKEST,m.BUTTON_DARKER);else if(this.borderStyle===8)this.drawDashedBorder(t,[2*e,2*e]);else if(this.borderStyle===9)this.drawDashedBorder(t,[6*e,2*e]);else if(this.borderStyle===10)this.drawDashedBorder(t,[6*e,2*e,2*e,2*e]);else if(this.borderStyle===11)this.drawDashedBorder(t,[6*e,2*e,2*e,2*e,2*e,2*e]);else if(this.borderStyle===12)t.fillRect({x:this.holderX,y:this.holderY+1*e,width:this.holderWidth,height:16*e,color:this.borderColor}),t.fillText({x:this.holderX+1*e+3*e,y:this.holderY+1*e+16/2*e,baseline:"middle",align:"left",font:q.ARIAL_11.scale(e),color:m.BLACK,text:this.name}),t.strokeRect({x:this.holderX,y:this.holderY,width:this.holderWidth,height:this.holderHeight,color:m.BLACK,crispen:!0});else if(this.borderStyle===13){let i=t.measureText(this.name,q.ARIAL_11.scale(e)),r=1,s=xt(this.holderX+8*e,this.holderY+8*e,this.holderWidth-16*e-r,this.holderHeight-16*e-r,r);this.transparent||(t.fillRect({...D(s,8*e),color:this.backgroundColor}),t.fillRect({x:this.holderX+16*e,y:this.holderY,width:i.width,height:16*e,color:this.backgroundColor})),t.fillText({x:this.holderX+16*e,y:this.holderY+8*e,baseline:"middle",align:"left",font:q.ARIAL_11.scale(e),color:this.borderColor,text:this.name}),t.strokePath({color:this.backgroundColor.darker(),path:new _(s.x,s.y).lineTo(s.x+8*e,s.y).moveTo(s.x+8*e+i.width,s.y).lineTo(s.x+s.width,s.y).lineTo(s.x+s.width,s.y+s.height).lineTo(s.x,s.y+s.height).lineTo(s.x,s.y)}),s=xt(this.holderX+8*e+r,this.holderY+8*e+r,this.holderWidth-16*e-r,this.holderHeight-16*e-r,r),t.strokePath({color:this.backgroundColor.brighter(),path:new _(s.x,s.y).lineTo(s.x+8*e-r,s.y).moveTo(s.x+8*e-r+i.width,s.y).lineTo(s.x+s.width,s.y).lineTo(s.x+s.width,s.y+s.height).lineTo(s.x,s.y+s.height).lineTo(s.x,s.y)})}else if(this.borderStyle===14){let i=xt(this.holderX,this.holderY,this.holderWidth,this.holderHeight,this.borderWidth);this.fillRoundRectangleBackgroundBorder&&t.fillRect({...i,rx:4*e,ry:4*e,color:this.backgroundColor}),this.borderWidth&&t.strokeRect({...i,rx:4*e,ry:4*e,color:this.borderColor,lineWidth:this.borderWidth})}else this.borderStyle===15||console.warn(`Unsupported border style: ${this.borderStyle}`)}isAnyPvDisconnected(){let t=this.pvName&&(!this.pv||this.pv.disconnected),e=this.pvs.find(i=>i.disconnected)!==void 0;return t||e}isAnyPvInvalid(){let t=!1;for(let e of this.pvs)if(e.value===void 0){t=!0;break}return this.pvs.length&&t}drawDecoration(t){if(this.display.editMode)return;let{scale:e}=this;if(this.isAnyPvDisconnected()){let i=1*e;t.fillRect({x:this.holderX-i/2,y:this.holderY-i/2,width:this.holderWidth+i,height:this.holderHeight+i,color:this.display.disconnectedColor,opacity:.4}),t.strokeRect({x:this.holderX-i/2,y:this.holderY-i/2,width:this.holderWidth+i,height:this.holderHeight+i,color:this.display.disconnectedColor})}else this.isAnyPvInvalid()&&t.strokeRect({...this.bounds,dash:[2*e,2*e],lineWidth:2*e,color:this.display.invalidColor,crispen:!0});if(this.borderAlarmSensitive){let i;this.borderStyle===8?i=[2*e,2*e]:this.borderStyle===9?i=[6*e,2*e]:this.borderStyle===10?i=[6*e,2*e,2*e,2*e]:this.borderStyle===11&&(i=[6*e,2*e,2*e,2*e,2*e,2*e]),this.pv?.severity==="MAJOR"?t.strokeRect({...this.bounds,lineWidth:2*e,color:this.display.majorColor,crispen:!0,dash:i}):this.pv?.severity==="MINOR"?t.strokeRect({...this.bounds,lineWidth:2*e,color:this.display.minorColor,crispen:!0,dash:i}):this.pv?.severity==="INVALID"&&t.strokeRect({...this.bounds,lineWidth:2*e,color:this.display.invalidColor,crispen:!0})}}drawOverlay(t){}drawSelection(t){t.lineWidth=1,t.strokeStyle="black",t.strokeRect(this.holderX-.5,this.holderY-.5,this.holderWidth+1,this.holderHeight+1),t.fillStyle="black";let e=2;t.fillRect(this.holderX-e,this.holderY-e,e+e,e+e),t.fillRect(this.holderX+this.holderWidth/2-e,this.holderY-e,e+e,e+e),t.fillRect(this.holderX+this.holderWidth-e,this.holderY-e,e+e,e+e),t.fillRect(this.holderX-e,this.holderY+this.holderHeight/2-e,e+e,e+e),t.fillRect(this.holderX+this.holderWidth-e,this.holderY+this.holderHeight/2-e,e+e,e+e),t.fillRect(this.holderX-e,this.holderY+this.holderHeight-e,e+e,e+e),t.fillRect(this.holderX+this.holderWidth/2-e,this.holderY+this.holderHeight-e,e+e,e+e),t.fillRect(this.holderX+this.holderWidth-e,this.holderY+this.holderHeight-e,e+e,e+e),t.strokeStyle="white",e=3,t.strokeRect(this.holderX-e+.5,this.holderY-e+.5,e+e-1,e+e-1),t.strokeRect(this.holderX+this.holderWidth/2-e+.5,this.holderY-e+.5,e+e-1,e+e-1),t.strokeRect(this.holderX+this.holderWidth-e+.5,this.holderY-e+.5,e+e-1,e+e-1),t.strokeRect(this.holderX-e+.5,this.holderY+this.holderHeight/2-e+.5,e+e-1,e+e-1),t.strokeRect(this.holderX+this.holderWidth-e+.5,this.holderY+this.holderHeight/2-e+.5,e+e-1,e+e-1),t.strokeRect(this.holderX-e+.5,this.holderY+this.holderHeight-e+.5,e+e-1,e+e-1),t.strokeRect(this.holderX+this.holderWidth/2-e+.5,this.holderY+this.holderHeight-e+.5,e+e-1,e+e-1),t.strokeRect(this.holderX+this.holderWidth-e+.5,this.holderY+this.holderHeight-e+.5,e+e-1,e+e-1)}requestRepaint(){this.display.requestRepaint()}resolvePath(t){return this.display.resolvePath(t,this)}get bounds(){return{x:this.holderX,y:this.holderY,width:this.holderWidth,height:this.holderHeight}}get unscaledBounds(){return{x:this.properties.getValue(Vr),y:this.properties.getValue(Mr),width:this.properties.getValue(Or),height:this.properties.getValue(Lr)}}get area(){return{x:this.x,y:this.y,width:this.width,height:this.height}}drawShadowBorder(t,e,i,r,s){let o=1*this.scale,n=this.holderY+o/2,a=this.holderX+o/2,l=this.holderY+this.holderHeight-o+o/2,c=this.holderX+this.holderWidth-o+o/2;t.strokePath({color:e,path:new _(c,l).lineTo(c,n).moveTo(c,l).lineTo(a,l)}),t.strokePath({color:i,path:new _(c-o,l-o).lineTo(c-o,n+o).moveTo(c-o,l-o).lineTo(a+o,l-o)}),t.strokePath({color:r,path:new _(a,n).lineTo(c-o,n).moveTo(a,n).lineTo(a,l-o)}),t.strokePath({color:s,path:new _(a+o,n+o).lineTo(c-o-o,n+o).moveTo(a+o,n+o).lineTo(a+o,l-o-o)})}drawDashedBorder(t,e){let i=xt(this.holderX,this.holderY,this.holderWidth,this.holderHeight,this.borderWidth);t.strokePath({color:this.borderColor,lineWidth:this.borderWidth,dash:e,path:new _(i.x,i.y).lineTo(i.x+i.width,i.y).lineTo(i.x+i.width,i.y+i.height).lineTo(i.x,i.y+i.height).closePath()})}executeActionByIndex(t){let e=this.actions.getAction(t);e&&this.executeAction(e)}executeAction(t){t.execute(this)}expandMacro(t){if(t.indexOf("$")===-1)return t;for(let e of this.properties.all())if(e instanceof bt){let i=this.properties.getProperty(e.pvPropertyName),r="",s=i?.value;s&&(r=this.display.getPV(s)?.value??""),t=t.replace(`$(${e.name})`,r),t=t.replace(`\${${e.name}}`,r)}else t=t.replace(`$(${e.name})`,e.value||""),t=t.replace(`\${${e.name}}`,e.value||"");return this.parent?this.parent.expandContainerMacros(t):t}loadFont(t){if(t.isWebSafe())return;let e=this.display.getFontResolver();if(!e){console.warn(`Failed to load font '${t.getFontString()}'.`);return}let i=e.resolve(t);if(!i){console.warn(`Failed to load font '${t.getFontString()}'.`);return}i.load().then(r=>{document.fonts.add(r),this.requestRepaint()}).catch(r=>{console.warn(`Failed to load font '${t.getFontString()}'.`,r)})}get pv(){if(this.pvName)return this.display.getPV(this.pvName)}isMinorSeverity(){return this.pv?.severity==="MINOR"}isMajorSeverity(){return this.pv?.severity==="MAJOR"}get alarm(){return this.pv?.severity==="MINOR"||this.pv?.severity==="MAJOR"||this.pv?.severity==="INVALID"}get alarmSensitiveBackgroundColor(){if(this.backgroundAlarmSensitive){if(this.isMajorSeverity())return this.display.majorColor;if(this.isMinorSeverity())return this.display.minorColor;if(this.pv?.severity==="INVALID")return this.display.invalidColor}return this.backgroundColor}get alarmSensitiveForegroundColor(){if(this.foregroundAlarmSensitive){if(this.isMajorSeverity())return this.display.majorColor;if(this.isMinorSeverity())return this.display.minorColor}return this.foregroundColor}get scale(){let t=this.display.scale,e=this.parent;for(;e;)t*=e.relativeScale,e=e.parent;return t}get value(){return this._value}set value(t){this._value=t,this.requestRepaint()}addPropertyListener(t,e){this.properties.getProperty(t).addListener(e)}removePropertyListener(t,e){this.properties.getProperty(t).removeListener(e)}toDataURL(t="image/png",e){let i=this.display.measureAbsoluteArea(this);return this.display.copyCanvas(i).toDataURL(t,e)}get wuid(){return this.properties.getValue(wo)}get name(){return this.properties.getValue(lo)}get holderX(){return this.scale*this.properties.getValue(Vr)}get holderY(){return this.scale*this.properties.getValue(Mr)}get holderWidth(){return this.customHolderWidth!==void 0?this.scale*this.customHolderWidth:this.scale*this.properties.getValue(Or)}get holderHeight(){return this.customHolderHeight!==void 0?this.scale*this.customHolderHeight:this.scale*this.properties.getValue(Lr)}get borderAlarmSensitive(){return this.properties.getValue(eo)}get backgroundAlarmSensitive(){return this.properties.getValue(to)}get foregroundAlarmSensitive(){return this.properties.getValue(ao)}get pvName(){return this.properties.getValue(Ar,!0)}get pvValue(){return this.properties.getValue(ho,!0)}get borderColor(){return this.properties.getValue(io)}get borderStyle(){return this.properties.getValue(so)}get borderWidth(){return this.scale*this.properties.getValue(ro)}get backgroundColor(){return this.properties.getValue(Qs)}get enabled(){return this.properties.getValue(oo)}get foregroundColor(){return this.properties.getValue(no)}get tooltip(){let t=this.properties.getProperty(go);if(t.rawValue)return this.expandMacro(t.rawValue)}get transparent(){return this.properties.getValue(mo)}get visible(){return this.properties.getValue(fo)}get actions(){return this.properties.getValue(Js)}get scripts(){return this.properties.getValue(uo)}get rules(){return this.properties.getValue(co)}get scaleOptions(){return this.properties.getValue(po)}get widgetType(){return this.properties.getValue(xo,!0)}get text(){return this.display.editMode?(this.properties.getProperty(Er).rawValue||"").split(" ").join("\xA0"):this.properties.getValue(Er).split(" ").join("\xA0")}init(){}hide(){}destroy(){}};var yo="macros",ut=class p extends V{_widgets=[];_connections=[];relativeScale=1;constructor(t,e){super(t,e),this.properties.add(new Gt(yo))}expandContainerMacros(t){for(let e in this.macros.macros)t=t.replace(`$(${e})`,this.macros.macros[e]),t=t.replace(`\${${e}}`,this.macros.macros[e]);return this.parent&&this.macros.includeParentMacros&&(t=this.parent.expandContainerMacros(t)),t}findWidget(t){for(let e of this.widgets){if(e.wuid===t)return e;if(e instanceof p){let i=e.findWidget(t);if(i)return i}}}findWidgetByName(t){for(let e of this.widgets){if(e.name===t)return e;if(e instanceof p){let i=e.findWidgetByName(t);if(i)return i}}for(let e of this.connections)if(e.name===t)return e}hide(){for(let t of this.widgets)t.hide()}destroy(){for(let t of this.widgets)t.destroy()}get widgets(){return this._widgets}get connections(){return this._connections}get macros(){return this.properties.getValue(yo)}};var bo="arrow_length",Po="arrows",vo="fill_arrow",_o="name",Ro="line_color",To="line_style",Co="line_width",So="src_wuid",Lo="src_term",Ao="tgt_wuid",Eo="tgt_term",Oo="router",Vo="points",Gu="wuid",At="LEFT",Et="UP",Ot="DOWN",Vt="RIGHT",wi=class extends V{sourceWidget;targetWidget;constructor(t){super(t),this.properties.clear(),this.properties.add(new P(bo)),this.properties.add(new P(Po)),this.properties.add(new w(vo)),this.properties.add(new R(_o)),this.properties.add(new S(Ro)),this.properties.add(new P(To)),this.properties.add(new P(Co)),this.properties.add(new R(So)),this.properties.add(new R(Lo)),this.properties.add(new R(Ao)),this.properties.add(new R(Eo)),this.properties.add(new P(Oo)),this.properties.add(new Pt(Vo)),this.properties.add(new R(Gu))}async parseNode(t){this.properties.loadXMLValues(t),this.sourceWidget=this.display.findWidget(this.sourceWuid),this.sourceWidget||console.warn(`Can't find source widget ${this.sourceWuid}`),this.targetWidget=this.display.findWidget(this.targetWuid),this.targetWidget||console.warn(`Can't find target widget ${this.targetWuid}`)}draw(t){!this.sourceWidget||!this.targetWidget||(this.points.length?this.drawPath(t):this.router===0?this.drawManhattanConnection(t):this.router===1&&this.drawDirectConnection(t))}drawPath(t){let e=this.getPosition(this.sourceWidget,this.sourceTerm),i=this.getPosition(this.targetWidget,this.targetTerm),r=[e,...this.points,i],s=_.fromPoints(r).translate(.5*this.scale,.5*this.scale);t.strokePath({path:s,lineWidth:this.lineWidth,color:this.lineColor,dash:this.getDashArray()}),this.drawStartArrow(t,r[1],r[0]),this.drawStopArrow(t,r[r.length-2],r[r.length-1])}drawManhattanConnection(t){let e=this.getManhattanAnchor(this.sourceWidget,this.sourceTerm),i=this.getManhattanAnchor(this.targetWidget,this.targetTerm),r=this.route(e,i),s=_.fromPoints(r);this.lineWidth&&t.strokePath({lineWidth:this.lineWidth,color:this.lineColor,path:s,dash:this.getDashArray()}),this.drawStartArrow(t,r[r.length-2],r[r.length-1]),this.drawStopArrow(t,r[1],r[0])}getDashArray(){let{scale:t}=this;if(this.lineWidth){if(this.lineStyle===0)return[];if(this.lineStyle===1)return[6*t,2*t];if(this.lineStyle===2)return[2*t,2*t];if(this.lineStyle===3)return[6*t,2*t,2*t,2*t];if(this.lineStyle===4)return[6*t,2*t,2*t,2*t,2*t,2*t];console.warn(`Unsupported connection line style ${this.lineStyle}`)}}drawDirectConnection(t){let e=this.getPosition(this.sourceWidget,this.sourceTerm),i=this.getPosition(this.targetWidget,this.targetTerm);this.lineWidth&&t.strokePath({path:new _(e.x,e.y).lineTo(i.x,i.y),lineWidth:this.lineWidth,color:this.lineColor,dash:this.getDashArray()}),this.drawStartArrow(t,i,e),this.drawStopArrow(t,e,i)}getManhattanAnchor(t,e){let i;switch(e){case"TOP":case"TOP_LEFT":case"TOP_RIGHT":i=Et;break;case"BOTTOM":case"BOTTOM_LEFT":case"BOTTOM_RIGHT":i=Ot;break;case"LEFT":i=At;break;case"RIGHT":i=Vt;break;default:}let r=t.bounds,s=this.getPosition(t,e),o=s.x-r.x,n=r.x+r.width-s.x,a=s.y-r.y,l=r.y+r.height-s.y;return Math.min(o,n)<Math.min(a,l)?i=o<n?At:Vt:i=a<l?Et:Ot,{x:s.x,y:s.y,direction:i}}getPosition(t,e){switch(e){case"LEFT":return{x:t.holderX,y:t.holderY+t.holderHeight/2};case"TOP":return{x:t.holderX+t.holderWidth/2,y:t.holderY};case"RIGHT":return{x:t.holderX+t.holderWidth,y:t.holderY+t.holderHeight/2};case"BOTTOM":return{x:t.holderX+t.holderWidth/2,y:t.holderY+t.holderHeight};case"TOP_LEFT":return{x:t.holderX,y:t.holderY};case"TOP_RIGHT":return{x:t.holderX+t.holderWidth,y:t.holderY};case"BOTTOM_LEFT":return{x:t.holderX,y:t.holderY+t.holderHeight};case"BOTTOM_RIGHT":return{x:t.holderX+t.holderWidth,y:t.holderY+t.holderHeight};default:let i=parseInt(e,10),r=t.properties.getProperty("points");if(r){let s=r.value;return s=Dt(s,this.scale),s[i]}else throw Error(`Unexpected term ${e}`)}}route(t,e){let i=t.x-e.x,r=t.y-e.y,s={x:0,y:0},o,n,a=[],{tolxtol:l,tol:c,minDist:h}=this;if(i*i<l&&r*r<l)return[{x:e.x,y:e.y}];t.direction===At?i>0&&r*r<c&&e.direction===Vt?(s=e,o=e.direction):(i<0?s={x:t.x-h,y:t.y}:r>0&&e.direction===Ot||r<0&&e.direction===Et?s={x:e.x,y:t.y}:t.direction===e.direction?(n=Math.min(t.x,e.x)-h,s={x:n,y:t.y}):s={x:t.x-i/2,y:t.y},r>0?o=Et:o=Ot):t.direction===Vt?i<0&&r*r<c&&e.direction===At?(s=e,o=e.direction):(i>0?s={x:t.x+h,y:t.y}:r>0&&e.direction===Ot||r<0&&e.direction===Et?s={x:e.x,y:t.y}:t.direction===e.direction?(n=Math.max(t.x,e.x)+h,s={x:n,y:t.y}):s={x:t.x-i/2,y:t.y},r>0?o=Et:o=Ot):t.direction===Ot?i*i<c&&r<0&&e.direction===Et?(s=e,o=e.direction):(r>0?s={x:t.x,y:t.y+h}:i>0&&e.direction===Vt||i<0&&e.direction===At?s={x:t.x,y:e.y}:t.direction===e.direction?(n=Math.max(t.y,e.y)+h,s={x:t.x,y:n}):s={x:t.x,y:t.y-r/2},i>0?o=At:o=Vt):t.direction===Et&&(i*i<c&&r>0&&e.direction===Ot?(s=e,o=e.direction):(r<0?s={x:t.x,y:t.y-h}:i>0&&e.direction===Vt||i<0&&e.direction===At?s={x:t.x,y:e.y}:t.direction===e.direction?(n=Math.min(t.y,e.y)-h,s={x:t.x,y:n}):s={x:t.x,y:t.y-r/2},i>0?o=At:o=Vt));let u={...s,direction:o};return a=a.concat(this.route(u,e)),a.push(t),a}drawStartArrow(t,e,i){let r=t.ctx;if(this.arrows===1||this.arrows===3){let s=this.calculateArrowPoints(e,i);if(s[2]=i,this.fillArrow){r.fillStyle=this.lineColor.toString(),r.beginPath();for(let o=0;o<s.length;o++)o===0?r.moveTo(s[o].x,s[o].y):r.lineTo(s[o].x,s[o].y);r.fill()}else r.strokeStyle=this.lineColor.toString(),r.lineWidth=this.lineWidth,r.beginPath(),r.moveTo(i.x,i.y),r.lineTo(s[0].x,s[0].y),r.moveTo(i.x,i.y),r.lineTo(s[1].x,s[1].y),r.stroke()}}drawStopArrow(t,e,i){let r=t.ctx;if(this.arrows===2||this.arrows===3){let s=this.calculateArrowPoints(e,i);if(s[2]=i,this.fillArrow){r.fillStyle=this.lineColor.toString(),r.beginPath();for(let o=0;o<s.length;o++)o===0?r.moveTo(s[o].x,s[o].y):r.lineTo(s[o].x,s[o].y);r.fill()}else r.strokeStyle=this.lineColor.toString(),r.lineWidth=this.lineWidth,r.beginPath(),r.moveTo(i.x,i.y),r.lineTo(s[0].x,s[0].y),r.moveTo(i.x,i.y),r.lineTo(s[1].x,s[1].y),r.stroke()}}calculateArrowPoints(t,e){let i=De(e,t),r=Math.PI/10,s=new at(this.arrowLength,i.theta-r),o=new at(this.arrowLength,i.theta+r),n=new at(Math.floor(this.arrowLength*Math.cos(r)),i.theta),a=wt(s.toPoint(),e.x,e.y),l=wt(o.toPoint(),e.x,e.y),c=wt(n.toPoint(),e.x,e.y);return[a,l,c]}get minDist(){return this.scale*20}get tol(){return this.scale*.1}get tolxtol(){return this.scale*.01}get name(){return this.properties.getValue(_o)}get arrows(){return this.properties.getValue(Po)}get fillArrow(){return this.properties.getValue(vo)}get arrowLength(){return this.scale*this.properties.getValue(bo)}get lineColor(){return this.properties.getValue(Ro)}get lineStyle(){return this.properties.getValue(To)}get lineWidth(){return this.scale*this.properties.getValue(Co)}get router(){return this.properties.getValue(Oo)}get sourceTerm(){return this.properties.getValue(Lo)}get sourceWuid(){return this.properties.getValue(So)}get targetTerm(){return this.properties.getValue(Eo)}get targetWuid(){return this.properties.getValue(Ao)}get points(){return Dt(this.properties.getValue(Vo),this.scale)}};var $u=0,Mo="auto_scale_widgets",ie=class extends ut{displayArgs;constructor(t,e,i){super(t,e),this.displayArgs=i??{},this.properties.add(new Ce(Mo))}async parseNode(t){await super.parseNode(t);let e=$u++;this.macros.set("DID",`DID_${e}`);let i=this.properties.getValue("name");this.macros.set("DNAME",i);for(let r in this.displayArgs)this.macros.set(r,this.displayArgs[r]);for(let r of t.getNodes("widget")){let s=r.getString("widget_type"),o=this.display.createWidget(s,this);o&&(await o.parseNode(r),this.widgets.push(o))}for(let r of t.getNodes("connection")){let s=new wi(this.display);s.parseNode(r),this.connections.push(s)}}draw(t){for(let e of this.widgets.filter(i=>i.visible))e.drawHolder(t),e.draw(t),e.drawDecoration(t);for(let e of this.connections)e.draw(t);for(let e of this.widgets.filter(i=>i.visible))e.drawOverlay(t)}measureContentBounds(t){let e=this.widgets.filter(n=>n.visible);if(e.length===0)return{x:0,y:0,width:0,height:0};let i=1/0,r=1/0,s=-1/0,o=-1/0;for(let n of e){let a=t?n.bounds:n.unscaledBounds;i=Math.min(i,a.x),r=Math.min(r,a.y),s=Math.max(s,a.x+a.width),o=Math.max(o,a.y+a.height)}return{x:i,y:r,width:s-i,height:o-r}}get autoScaleWidgets(){return this.properties.getValue(Mo)}};var Uu=0,Io="group_name",Bo="opi_file",Wo="resize_behaviour",re=class extends ut{linkedDisplay;resolvedOpiFile;constructor(t,e){super(t,e),this.properties.add(new R(Io)),this.properties.add(new R(Bo)),this.properties.add(new P(Wo,0))}async parseNode(t){await super.parseNode(t);let e=Uu++;this.macros.set("LCID",`LCID_${e}`)}async init(){if(this.opiFile){this.resolvedOpiFile=this.display.resolvePath(this.opiFile);let t=await this.display.loadContent(this.opiFile);if(t!==null){this.linkedDisplay=new ie(this.display,this);let e=ee.parseFromXML(t);await this.linkedDisplay.parseNode(e),this.requestRepaint()}}if(this.linkedDisplay&&this.resizeBehavior===1){let t=this.linkedDisplay.measureContentBounds(!0);this.customSize={width:t.width,height:t.height}}}draw(t){this.transparent||t.fillRect({...this.area,color:this.backgroundColor});let e=this.getLinkedWidget();if(this.linkedDisplay&&e)if(t.fillRect({...this.area,color:this.linkedDisplay.backgroundColor}),this.resizeBehavior===0){let i=this.linkedDisplay.measureContentBounds(!1),{width:r,height:s}=i,o=this.display.scale;r*=o,s*=o;let n=r/s,a=this.width,l=a/n,c=a/r;l>this.height&&(l=this.height,a=l*n,c=l/r),this.linkedDisplay.relativeScale=c;let h=t.createChild(Math.ceil(a),Math.ceil(l));h.translate(i.x,i.y),this.linkedDisplay.draw(h),t.copy(h,this.x,this.y)}else if(this.resizeBehavior===1){let i=this.linkedDisplay.measureContentBounds(!0),r=t.createChild(i.width,i.height);r.translate(-i.x,-i.y),this.linkedDisplay.draw(r),t.copy(r,this.x,this.y)}else if(this.resizeBehavior===2){let i=this.linkedDisplay.measureContentBounds(!0),r=t.createChild(i.width,i.height);r.translate(i.x,i.y),this.linkedDisplay.draw(r),t.copy(r,this.x,this.y)}else this.resizeBehavior===3&&console.warn("Unsupported resize behavior of LinkingContainer",this.resizeBehavior)}getLinkedWidget(){return this.linkedDisplay&&this.groupName!==""?this.linkedDisplay.findWidgetByName(this.groupName):this.linkedDisplay}get widgets(){return this.linkedDisplay?this.linkedDisplay.widgets:[]}get connections(){return this.linkedDisplay?this.linkedDisplay.connections:[]}findWidget(t){if(this.linkedDisplay)return this.linkedDisplay.findWidget(t)}get opiFile(){return this.properties.getValue(Bo)}get groupName(){return this.properties.getValue(Io)}get resizeBehavior(){return this.properties.getValue(Wo)}};var Se=class{constructor(t){this.display=t}display;resolve(t,e){if(t.startsWith("/"))return`${this.display.absPrefix}${t.slice(1)}`;if(t.startsWith("http://")||t.startsWith("https://"))return t;if(e){let i=e.parent;for(;i;){if(i instanceof re){let r=i.resolvedOpiFile,s=r.lastIndexOf("/")+1;return`${r.substring(0,s)}${t}`}i=i.parent}}return`${this.display.relPrefix}${t}`}};var yi=class{constructor(t){this.display=t}display;cache=new Map;ttl=5e3;async load(t){this.removeOldEntries();let e=this.cache.get(t);if(e)return e.text;let i=await fetch(this.display.resolvePath(t),{credentials:"same-origin"});if(i.ok){let r=await i.text();return this.cache.set(t,{timestamp:Date.now(),text:r}),r}else return null}removeOldEntries(){let t=Date.now();this.cache.forEach((e,i)=>{e.timestamp+this.ttl<=t&&this.cache.delete(i)})}};var Le=class{constructor(t,e){this.pvName=t;this.formula=e}pvName;formula;pvValues=new Map;updateDataSource(t,e){this.pvValues.set(t,e)}clearState(){this.pvValues.clear()}getPVNames(){let t=this.formula.expression,e=[];return this.getExpressionParameters(t,e),e}getExpressionParameters(t,e){switch(t.type){case"ParameterLiteral":e.indexOf(t.value)===-1&&e.push(t.value);break;case"ConditionalExpression":this.getExpressionParameters(t.consequent,e),t.alternate&&this.getExpressionParameters(t.alternate,e);break;case"BinaryExpression":this.getExpressionParameters(t.left,e),this.getExpressionParameters(t.right,e);break;case"LogicalExpression":this.getExpressionParameters(t.left,e),this.getExpressionParameters(t.right,e);break;case"UnaryExpression":this.getExpressionParameters(t.argument,e);break;case"CallExpression":for(let i of t.arguments)this.getExpressionParameters(i,e);break}}execute(){let t=this.formula.expression;return this.executeExpression(t)}executeExpression(t){switch(t.type){case"BooleanLiteral":return t.value;case"ParameterLiteral":let e=this.pvValues.get(t.value);return e?e.value:void 0;case"ConstantLiteral":return t.value;case"NumericLiteral":return t.value;case"StringLiteral":return t.value;case"ConditionalExpression":return this.executeConditionalExpression(t);case"BinaryExpression":return this.executeBinaryExpression(t);case"LogicalExpression":return this.executeLogicalExpression(t);case"UnaryExpression":return this.executeUnaryExpression(t);case"CallExpression":return this.executeCallExpression(t);default:throw new Error("Unexpected expression type")}}executeBinaryExpression(t){let e=this.executeExpression(t.left),i=this.executeExpression(t.right);switch(t.operator){case"+":return e+i;case"-":return e-i;case"*":return e*i;case"/":return e/i;case"^":return Math.pow(e,i);case"%":return e%i;case"==":return e===i;case"!=":return e!==i;case"<=":return e<=i;case"<":return e<i;case">=":return e>=i;case">":return e>i;default:throw new Error(`Unexpected binary operator ${t.operator}`)}}executeLogicalExpression(t){let e=this.executeExpression(t.left),i=this.executeExpression(t.right);switch(t.operator){case"&&":return e&&i;case"||":return e||i;default:throw new Error(`Unexpected logical operator ${t.operator}`)}}executeConditionalExpression(t){let e=this.executeExpression(t.test),i=this.executeExpression(t.consequent);if(t.alternate===void 0)return e?i:null;{let r=this.executeExpression(t.alternate);return e?i:r}}executeUnaryExpression(t){let e=this.executeExpression(t.argument);switch(t.operator){case"-":return-e;case"+":return e;default:throw new Error(`Unexpected unary operator ${t.operator}`)}}executeCallExpression(t){let e=t.callee.name,i=[];for(let r of t.arguments)i.push(this.executeExpression(r));switch(e){case"abs":return Math.abs(i[0]);case"acos":return Math.acos(i[0]);case"asin":return Math.asin(i[0]);case"atan":return Math.atan(i[0]);case"cbrt":return Math.cbrt(i[0]);case"ceil":return Math.ceil(i[0]);case"cos":return Math.cos(i[0]);case"cosh":return Math.cosh(i[0]);case"exp":return Math.exp(i[0]);case"floor":return Math.floor(i[0]);case"log":return Math.log(i[0]);case"log10":return Math.log10(i[0]);case"round":return Math.round(i[0]);case"signum":return Math.sign(i[0]);case"sin":return Math.sin(i[0]);case"sinh":return Math.sinh(i[0]);case"sqrt":return Math.sqrt(i[0]);case"tan":return Math.tan(i[0]);case"tanh":return Math.tanh(i[0]);case"toDegrees":return i[0]*180/Math.PI;case"toRadians":return i[0]/180*Math.PI;case"parameterAcquisitionStatus":return this.callParameterAcquisitionStatus(i[0]);default:throw new Error(`Unsupported function '${e}'`)}}callParameterAcquisitionStatus(t){let e=this.pvValues.get(t);if(e)return e.acquisitionStatus}};var Ae=class extends SyntaxError{constructor(t,e,i,r){super(t),this.expected=e,this.found=i,this.location=r,this.name="SyntaxError"}format(t){let e="Error: "+this.message;if(this.location){let i=null,r=t.find(a=>a.source===this.location.source);r&&(i=r.text.split(/\r\n|\n|\r/g));let s=this.location.start,o=this.location.source&&typeof this.location.source.offset=="function"?this.location.source.offset(s):s,n=this.location.source+":"+o.line+":"+o.column;if(i){let a=this.location.end,l="".padEnd(o.line.toString().length," "),c=i[s.line-1],u=(s.line===a.line?a.column:c.length+1)-s.column||1;e+=`
|
|
2
2
|
--> `+n+`
|
|
3
3
|
`+l+` |
|
|
4
4
|
`+o.line+" | "+c+`
|