@yamcs/opi 1.2.4 → 1.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +2 -2
  3. package/dist/fonts/LiberationMono-Bold.woff +0 -0
  4. package/dist/fonts/LiberationMono-BoldItalic.woff +0 -0
  5. package/dist/fonts/LiberationMono-Italic.woff +0 -0
  6. package/dist/fonts/LiberationMono-Regular.woff +0 -0
  7. package/dist/fonts/LiberationSans-Bold.woff +0 -0
  8. package/dist/fonts/LiberationSans-BoldItalic.woff +0 -0
  9. package/dist/fonts/LiberationSans-Italic.woff +0 -0
  10. package/dist/fonts/LiberationSans-Regular.woff +0 -0
  11. package/dist/fonts/LiberationSerif-Bold.woff +0 -0
  12. package/dist/fonts/LiberationSerif-BoldItalic.woff +0 -0
  13. package/dist/fonts/LiberationSerif-Italic.woff +0 -0
  14. package/dist/fonts/LiberationSerif-Regular.woff +0 -0
  15. package/dist/fonts/stylesheet.css +56 -0
  16. package/dist/opi.js +1 -1
  17. package/dist/opi.js.map +1 -1
  18. package/dist/opi.umd.js +1 -1
  19. package/dist/opi.umd.js.map +1 -1
  20. package/dist/types/ConsoleHandler.d.ts +10 -0
  21. package/dist/types/Display.d.ts +15 -11
  22. package/dist/types/PathResolver.d.ts +10 -0
  23. package/dist/types/Widget.d.ts +4 -6
  24. package/dist/types/XMLNode.d.ts +1 -0
  25. package/dist/types/index.d.ts +2 -1
  26. package/dist/types/properties.d.ts +2 -0
  27. package/dist/types/pv/PV.d.ts +6 -5
  28. package/dist/types/pv/PVEngine.d.ts +11 -1
  29. package/dist/types/scripting/ConsoleUtil.d.ts +3 -0
  30. package/dist/types/scripting/DisplayWrapper.d.ts +1 -0
  31. package/dist/types/scripting/FileUtil.d.ts +6 -0
  32. package/dist/types/scripting/Java.d.ts +18 -0
  33. package/dist/types/scripting/PVUtil.d.ts +5 -0
  34. package/dist/types/scripting/PVWrapper.d.ts +2 -0
  35. package/dist/types/scripting/ScriptEngine.d.ts +1 -1
  36. package/dist/types/scripting/SpreadSheetTable.d.ts +36 -0
  37. package/dist/types/scripting/TableWrapper.d.ts +9 -0
  38. package/dist/types/scripting/WidgetWrapper.d.ts +3 -0
  39. package/dist/types/widgets/controls/Combo.d.ts +3 -5
  40. package/dist/types/widgets/controls/MenuButton.d.ts +18 -0
  41. package/dist/types/widgets/controls/TextInput.d.ts +12 -0
  42. package/dist/types/widgets/others/AbstractContainerWidget.d.ts +0 -1
  43. package/dist/types/widgets/others/GroupingContainer.d.ts +1 -0
  44. package/dist/types/widgets/others/LinkingContainer.d.ts +1 -0
  45. package/dist/types/widgets/others/Table.d.ts +22 -0
  46. package/package.json +4 -4
  47. package/dist/fonts/LiberationSans-Bold.ttf +0 -0
  48. package/dist/fonts/LiberationSans-BoldItalic.ttf +0 -0
  49. package/dist/fonts/LiberationSans-Italic.ttf +0 -0
  50. package/dist/fonts/LiberationSans-Regular.ttf +0 -0
  51. package/dist/types/AutoScaleWidgets.d.ts +0 -6
  52. package/dist/types/ImageResolver.d.ts +0 -9
  53. package/dist/types/ScaleOptions.d.ts +0 -6
  54. package/dist/types/widgets/monitors/SampleBuffer.d.ts +0 -23
  55. package/dist/types/widgets/monitors/XYGraph.d.ts +0 -33
  56. package/dist/types/widgets/monitors/XYGraphCSS.d.ts +0 -14
package/dist/opi.umd.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).opi={})}(this,(function(t){"use strict";class e{constructor(t,e,i,s=255){this.red=t,this.green=e,this.blue=i,this.alpha=s}withAlpha(t){return new e(this.red,this.green,this.blue,t)}mixWith(t,i){const s=Math.floor(this.red*i+t.red*(1-i)),r=Math.floor(this.green*i+t.green*(1-i)),o=Math.floor(this.blue*i+t.blue*(1-i));return new e(s,r,o)}brighter(){let{red:t,green:i,blue:s}=this;const r=Math.floor(1/(1-.7));return 0===t&&0===i&&0===s?new e(r,r,r):(t>0&&t<r&&(t=r),i>0&&i<r&&(i=r),s>0&&s<r&&(s=r),new e(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 e(Math.max(Math.floor(.7*this.red),0),Math.max(Math.floor(.7*this.green),0),Math.max(Math.floor(.7*this.blue),0))}contrast(){return new e(this.red,255-this.green,255-this.blue)}hex(){let t=this.red.toString(16);t=1==t.length?"0"+t:t;let e=this.green.toString(16);e=1==e.length?"0"+e:e;let i=this.blue.toString(16);i=1==i.length?"0"+i:i;let s=this.alpha.toString(16);return s=1==s.length?"0"+s:s,`#${t}${e}${i}${s}`}getRGBValue(){return this}equals(t){return t&&this.toString()===t.toString()}toString(){return`rgba(${this.red},${this.green},${this.blue},${this.alpha})`}}e.TRANSPARENT=new e(0,0,0,0),e.BLACK=new e(0,0,0),e.BLUE=new e(0,0,255),e.CYAN=new e(0,255,255),e.DARK_GRAY=new e(150,150,150),e.GRAY=new e(200,200,200),e.GREEN=new e(0,255,0),e.LIGHT_BLUE=new e(153,186,243),e.ORANGE=new e(255,128,0),e.PINK=new e(255,0,255),e.PURPLE=new e(128,0,255),e.RED=new e(255,0,0),e.WHITE=new e(255,255,255),e.YELLOW=new e(255,255,0),e.BUTTON=new e(239,240,241),e.BUTTON_DARKER=new e(164,168,172),e.BUTTON_DARKEST=e.BLACK,e.BUTTON_LIGHTEST=e.WHITE;const i=t=>(document.removeEventListener("click",i,!0),t.preventDefault(),t.stopPropagation(),!1);function s(t){return 1==(1&t.buttons)||void 0===t.buttons&&1==t.which}function r(t,e){return t&&e&&t.id===e.id}class o{constructor(t,e,i){this.display=t,this.canvas=e,this.hitCanvas=i,this.grabbing=!1,this.documentMouseMoveListener=t=>this.onDocumentMouseMove(t),this.documentMouseUpListener=t=>this.onDocumentMouseUp(t),e.addEventListener("click",(t=>this.onCanvasClick(t)),!1),e.addEventListener("mousedown",(t=>this.onCanvasMouseDown(t)),!1),e.addEventListener("mouseup",(t=>this.onCanvasMouseUp(t)),!1),e.addEventListener("mouseout",(t=>this.onCanvasMouseOut(t)),!1),e.addEventListener("mousemove",(t=>this.onCanvasMouseMove(t)),!1)}toPoint(t){const e=this.canvas.getBoundingClientRect();return{x:t.clientX-e.left,y:t.clientY-e.top}}onCanvasClick(t){this.display.clearSelection();const e=this.toPoint(t);if(this.display.editMode)this.selectSingleWidget(e.x,e.y);else{const 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",i,!0),s(t))){const e=this.toPoint(t),i=this.hitCanvas.getActiveRegion(e.x,e.y);return i&&i.mouseDown&&i.mouseDown({clientX:t.clientX,clientY:t.clientY,point:e}),i&&i.grab&&(this.grabPoint=Object.assign({},e),this.grabTarget=i),t.preventDefault(),t.stopPropagation(),!1}}onCanvasMouseUp(t){if(this.display.editMode)return;const 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){const e=this.toPoint(t),i=this.hitCanvas.getActiveRegion(e.x,e.y);this.prevEnteredRegion&&this.prevEnteredRegion.mouseOut&&(r(this.prevEnteredRegion,i)||this.prevEnteredRegion.mouseOut()),i&&i.mouseEnter&&(r(this.prevEnteredRegion,i)||i.mouseEnter()),this.prevEnteredRegion=i;const o=i&&i.cursor?i.cursor:"auto";if(o!=this.canvas.style.cursor&&(this.canvas.style.cursor=o),!this.grabbing&&i&&i.tooltip?this.display.setTooltip(i.tooltip()):this.display.setTooltip(void 0),this.grabPoint&&!this.grabbing&&s(t)){const t=(h=this.grabPoint.x,n=this.grabPoint.y,a=e.x,l=e.y,Math.sqrt((a-h)*(a-h)+(l-n)*(l-n)));Math.abs(t)>5&&(this.initiateGrab(),this.grabPoint&&(this.grabPoint=e))}var h,n,a,l;this.grabbing&&this.grabTarget&&s(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",i,!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);const t=this.grabTarget;this.grabbing=!1,this.grabPoint=void 0,this.grabTarget=void 0,(null==t?void 0:t.grabEnd)&&t.grabEnd()}}onDocumentMouseMove(t){this.onCanvasMouseMove(t)}selectSingleWidget(t,e){const i=this.display.instance;if(i)for(const s of i.widgets.slice().reverse()){const i=s.holderX,r=s.holderY,o=s.holderX+s.holderWidth,h=s.holderY+s.holderHeight;if(i<t&&t<o&&r<e&&e<h)return this.display.selection=[s.wuid],!1}}}const h="rgb(255,255,255)";class n{constructor(t,e,i){this.parent=t,this.regions={};const s=document.createElement("canvas");s.width=null!=e?e:s.width,s.height=null!=i?i:s.height,this.ctx=s.getContext("2d"),this.root=(null==t?void 0:t.root)||t}clear(){this.regions={},this.ctx.fillStyle=h,this.ctx.fillRect(0,0,this.ctx.canvas.width,this.ctx.canvas.height)}beginHitRegion(t){const e=(this.root||this).generateUniqueColor();return(this.root||this).regions[e]=t,this.ctx.beginPath(),this.ctx.fillStyle=e,e}getActiveRegion(t,e){const i=this.ctx.getImageData(t,e,1,1).data,s=`rgb(${i[0]},${i[1]},${i[2]})`;return this.regions[s]||void 0}createChild(t,e){return new n(this,t,e)}transferToParent(t,e,i,s){if(!this.parent)throw new Error("No parent to transfer to");this.parent.ctx.drawImage(this.ctx.canvas,t,e,i,s)}generateUniqueColor(){for(;;){const t=`rgb(${Math.round(255*Math.random())},${Math.round(255*Math.random())},${Math.round(255*Math.random())})`;if(!this.regions[t]&&t!=h)return t}}}function a(t,e,i,s,r){return d({x:t,y:e,width:i,height:s},r/2)}function l(t,e,i,s,r){const o=Math.sin(r),h=Math.cos(r),n=t-i,a=e-s;return{x:n*h-a*o+i,y:n*o+a*h+s}}function d(t,e,i){return void 0===i&&(i=e),{x:t.x+i,y:t.y+e,width:t.width-(i+i),height:t.height-(e+e)}}function c(t){return{x:Math.round(t.x)+.5,y:Math.round(t.y)+.5,width:Math.round(t.width),height:Math.round(t.height)}}function p(t,e,i){return{x:t.x+e,y:t.y+i}}function g(t,e,i){return t.map((t=>p(t,e,i)))}function u(t){return t*Math.PI/180}function m(t,e,i){const s=Math.floor(t*Math.cos(e)),r=Math.floor(-t*Math.sin(e));return{x:i.x+i.width/2+s,y:i.y+i.height/2+r}}function x(t,e){const i=e.x-t.x,s=e.y-t.y,r=Math.sqrt(Math.pow(i,2)+Math.pow(s,2));let o=Math.acos(i/r);return s>0&&(o=2*Math.PI-o),new f(Math.floor(r),o)}class f{constructor(t,e){this.r=t,this.theta=e}toPoint(){return{x:Math.floor(this.r*Math.cos(this.theta)),y:Math.floor(-this.r*Math.sin(this.theta))}}}function w(t,e){return t.map((t=>({x:t.x*e,y:t.y*e})))}function y(t,e,i,s,r,o,h){t.beginPath(),o||h?(s<2*o&&(o=s/2),r<2*h&&(h=r/2),t.moveTo(e+o,i),t.lineTo(e+s-o,i),t.quadraticCurveTo(e+s,i,e+s,i+h),t.lineTo(e+s,i+r-h),t.quadraticCurveTo(e+s,i+r,e+s-o,i+r),t.lineTo(e+o,i+r),t.quadraticCurveTo(e,i+r,e,i+r-h),t.lineTo(e,i+h),t.quadraticCurveTo(e,i,e+o,i)):t.rect(e,i,s,r)}class v{constructor(t,e){this.canvas=t,this.ctx=t.getContext("2d"),this.hitCanvas=e||new n,this.hitCtx=this.hitCanvas.ctx}createChild(t,e){const i=this.hitCanvas.createChild(t,e),s=document.createElement("canvas");return s.width=t,s.height=e,new v(s,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,s,r){const{width:o,height:h}=t.canvas,n=o/h;let a=s,l=a/n;l>r&&(l=r,a=l*n),this.copyScaled(t,e,i,a,l)}copyScaled(t,e,i,s,r){this.ctx.drawImage(t.canvas,e,i,s,r),t.hitCanvas.transferToParent(e,i,s,r)}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){this.ctx.fillStyle="color"in t?t.color.toString():t.gradient,void 0!==t.opacity&&(this.ctx.globalAlpha=t.opacity),t.rx||t.ry?(y(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),void 0!==t.opacity&&(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();const e=t.startAngle||0,i=void 0===t.endAngle?2*Math.PI:t.endAngle;this.ctx.ellipse(t.cx,t.cy,t.rx,t.ry,0,e,i,t.anticlockwise),this.ctx.fillStyle="color"in t?t.color.toString():t.gradient,void 0!==t.opacity&&(this.ctx.globalAlpha=t.opacity),this.ctx.fill(),void 0!==t.opacity&&(this.ctx.globalAlpha=1)}strokeEllipse(t){t.dash&&this.ctx.setLineDash(t.dash),this.ctx.lineWidth=t.lineWidth||1,this.ctx.beginPath();const e=t.startAngle||0,i=void 0===t.endAngle?2*Math.PI:t.endAngle;this.ctx.ellipse(t.cx,t.cy,t.rx,t.ry,0,e,i,t.anticlockwise),this.ctx.strokeStyle="color"in t?t.color.toString():t.gradient,this.ctx.stroke(),t.dash&&this.ctx.setLineDash([])}measureText(t,e){this.ctx.font=e.getFontString();return{width:this.ctx.measureText(t).width,height:e.height}}createLinearGradient(t,e,i,s){return this.ctx.createLinearGradient(t,e,i,s)}strokeRect(t){t.dash&&this.ctx.setLineDash(t.dash);const e=t.lineWidth||1;if(this.ctx.lineWidth=e,this.ctx.strokeStyle=t.color.toString(),t.crispen&&e){const i=d(t,e/2,e/2);t.rx||t.ry?(y(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?(y(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(const 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(),void 0!==t.opacity&&(this.ctx.globalAlpha=t.opacity),this.ctx.stroke(),void 0!==t.opacity&&(this.ctx.globalAlpha=1),t.dash&&this.ctx.setLineDash([])}fillPath(t){this.ctx.beginPath();for(const e of t.path.segments)e.line?this.ctx.lineTo(e.x,e.y):this.ctx.moveTo(e.x,e.y);this.ctx.fillStyle="color"in t?t.color.toString():t.gradient,void 0!==t.opacity&&(this.ctx.globalAlpha=t.opacity),this.ctx.fill("evenodd"),void 0!==t.opacity&&(this.ctx.globalAlpha=1)}addHitRegion(t){return this.hitCanvas.beginHitRegion(t),new T(this.hitCanvas.ctx)}}class b{constructor(t,e){this.segments=[],this.segments.push({x:t,y:e,line:!1})}static fromPoints(t){const e=new b(t[0].x,t[0].y);for(let i=1;i<t.length;i++)e.lineTo(t[i].x,t[i].y);return e}getBoundingBox(){const 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++){const s=this.segments[i];s.x<t.x&&(t.x=s.x),s.x>e.x&&(e.x=s.x),s.y<t.y&&(t.y=s.y),s.y>e.y&&(e.y=s.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(){const t=this.segments[0];return this.segments.push({x:t.x,y:t.y,line:!0}),this}translate(t,e){for(const i of this.segments)i.x+=t,i.y+=e;return this}}class T{constructor(t){this.ctx=t}addRect(t,e,i,s){return this.ctx.fillRect(t,e,i,s),this}addEllipse(t,e,i,s,r,o,h,n){this.ctx.beginPath(),this.ctx.ellipse(t,e,i,s,r,o,h,n),this.ctx.fill()}addPath(t){this.ctx.beginPath();for(const e of t.segments)e.line?this.ctx.lineTo(e.x,e.y):this.ctx.moveTo(e.x,e.y);this.ctx.fill()}}class S{constructor(t){this.display=t}resolve(t){return`${this.display.baseUrl}${t}`}}class V{constructor(t,e){this.pvName=t,this.formula=e,this.pvValues=new Map}updateDataSource(t,e){this.pvValues.set(t,e)}clearState(){this.pvValues.clear()}getPVNames(){const t=this.formula.expression,e=[];return this.getExpressionParameters(t,e),e}getExpressionParameters(t,e){switch(t.type){case"ParameterLiteral":-1===e.indexOf(t.value)&&e.push(t.value);break;case"ConditionalExpression":this.getExpressionParameters(t.consequent,e),t.alternate&&this.getExpressionParameters(t.alternate,e);break;case"BinaryExpression":case"LogicalExpression":this.getExpressionParameters(t.left,e),this.getExpressionParameters(t.right,e);break;case"UnaryExpression":this.getExpressionParameters(t.argument,e);break;case"CallExpression":for(const i of t.arguments)this.getExpressionParameters(i,e)}}execute(){const t=this.formula.expression;return this.executeExpression(t)}executeExpression(t){switch(t.type){case"BooleanLiteral":case"ConstantLiteral":case"NumericLiteral":case"StringLiteral":return t.value;case"ParameterLiteral":const e=this.pvValues.get(t.value);return e?e.value:void 0;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){const 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){const 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){const e=this.executeExpression(t.test),i=this.executeExpression(t.consequent);if(void 0===t.alternate)return e?i:null;{const s=this.executeExpression(t.alternate);return e?i:s}}executeUnaryExpression(t){const 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){const e=t.callee.name,i=[];for(const e of t.arguments)i.push(this.executeExpression(e));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 180*i[0]/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){const e=this.pvValues.get(t);if(e)return e.acquisitionStatus}}function A(t,e,i,s){var r=Error.call(this,t);return Object.setPrototypeOf&&Object.setPrototypeOf(r,A.prototype),r.expected=e,r.found=i,r.location=s,r.name="SyntaxError",r}function _(t,e,i){return i=i||" ",t.length>e?t:(e-=t.length,t+(i+=i.repeat(e)).slice(0,e))}function L(t,e){var i,s,r,o,h={},n=(e=void 0!==e?e:{}).grammarSource,a={Start:kt},l=kt,d=".",c='"',p="'",g="-",u="+",m=",",x="<=",f=">=",w="==",y="!=",v="&&",b="||",T=/^[a-zA-Z]/,S=/^[a-zA-Z0-9_]/,V=/^[0-9]/,_=/^[1-9]/,L=/^[^\n\r\f"]/,C=/^[^\n\r\f']/,P=At("=",!1),M=At(" ",!1),k=At("\t",!1),R=At("false",!0),E=At("true",!0),W=At("PI",!0),B=At("E",!0),I=Lt("identifier"),O=_t([["a","z"],["A","Z"]],!1,!1),H=At("_",!1),F=_t([["a","z"],["A","Z"],["0","9"],"_"],!1,!1),N=Lt("boolean"),D=Lt("constant"),j=Lt("number"),$=At(".",!1),G=At("0",!1),z=_t([["0","9"]],!1,!1),U=_t([["1","9"]],!1,!1),q=Lt("string"),Y=At('"',!1),X=_t(["\n","\r","\f",'"'],!0,!1),K=Lt("parameter"),Z=At("'",!1),J=_t(["\n","\r","\f","'"],!0,!1),Q=At("(",!1),tt=At(")",!1),et=At("-",!1),it=At("+",!1),st=At(",",!1),rt=At("*",!1),ot=At("/",!1),ht=At("^",!1),nt=At("%",!1),at=At("<=",!1),lt=At(">=",!1),dt=At("<",!1),ct=At(">",!1),pt=At("==",!1),gt=At("!=",!1),ut=At("&&",!1),mt=At("||",!1),xt=function(){return{type:"NumericLiteral",value:parseFloat(t.substring(vt,yt))}},ft=function(t,e){return function(t,e,i){return[t].concat(function(t,e){return t.map((function(t){return t[e]}))}(e,i))}(t,e,3)},wt=function(t,e){return function(t,e){return e.reduce((function(t,e){return{type:"BinaryExpression",operator:e[1],left:t,right:e[3]}}),t)}(t,e)},yt=0,vt=0,bt=[{line:1,column:1}],Tt=0,St=[],Vt=0;if("startRule"in e){if(!(e.startRule in a))throw new Error("Can't start parsing from rule \""+e.startRule+'".');l=a[e.startRule]}function At(t,e){return{type:"literal",text:t,ignoreCase:e}}function _t(t,e,i){return{type:"class",parts:t,inverted:e,ignoreCase:i}}function Lt(t){return{type:"other",description:t}}function Ct(e){var i,s=bt[e];if(s)return s;for(i=e-1;!bt[i];)i--;for(s={line:(s=bt[i]).line,column:s.column};i<e;)10===t.charCodeAt(i)?(s.line++,s.column=1):s.column++,i++;return bt[e]=s,s}function Pt(t,e){var i=Ct(t),s=Ct(e);return{source:n,start:{offset:t,line:i.line,column:i.column},end:{offset:e,line:s.line,column:s.column}}}function Mt(t){yt<Tt||(yt>Tt&&(Tt=yt,St=[]),St.push(t))}function kt(){var e,i,s;return e=yt,61===t.charCodeAt(yt)?(i="=",yt++):(i=h,0===Vt&&Mt(P)),i!==h?(Rt(),s=function(){var t,e;t=yt,(e=zt())!==h&&(vt=t,e={type:"Formula",expression:e});return t=e}(),s!==h?(Rt(),vt=e,e=s):(yt=e,e=h)):(yt=e,e=h),e}function Rt(){var t,e;for(t=[],e=Et();e!==h;)t.push(e),e=Et();return t}function Et(){var e;return 32===t.charCodeAt(yt)?(e=" ",yt++):(e=h,0===Vt&&Mt(M)),e===h&&(9===t.charCodeAt(yt)?(e="\t",yt++):(e=h,0===Vt&&Mt(k))),e}function Wt(){var e,i;return e=yt,i=function(){var e,i,s,r;if(Vt++,e=yt,i=function(){var e;T.test(t.charAt(yt))?(e=t.charAt(yt),yt++):(e=h,0===Vt&&Mt(O));e===h&&(95===t.charCodeAt(yt)?(e="_",yt++):(e=h,0===Vt&&Mt(H)));return e}(),i!==h){for(s=[],r=Bt();r!==h;)s.push(r),r=Bt();vt=e,e={type:"Symbol",name:i+s.join("")}}else yt=e,e=h;Vt--,e===h&&(i=h,0===Vt&&Mt(I));return e}(),i!==h&&(vt=e,i=i),e=i}function Bt(){var e;return S.test(t.charAt(yt))?(e=t.charAt(yt),yt++):(e=h,0===Vt&&Mt(F)),e}function It(){var e;return(e=function(){var e,i;Vt++,e=yt,i=function(){var e;return"true"===t.substr(yt,4).toLowerCase()?(e=t.substr(yt,4),yt+=4):(e=h,0===Vt&&Mt(E)),e}(),i!==h&&(vt=e,i={type:"BooleanLiteral",value:!0});(e=i)===h&&(e=yt,i=function(){var e;return"false"===t.substr(yt,5).toLowerCase()?(e=t.substr(yt,5),yt+=5):(e=h,0===Vt&&Mt(R)),e}(),i!==h&&(vt=e,i={type:"BooleanLiteral",value:!1}),e=i);Vt--,e===h&&(i=h,0===Vt&&Mt(N));return e}())===h&&(e=function(){var e,i;Vt++,e=yt,i=function(){var e;return"pi"===t.substr(yt,2).toLowerCase()?(e=t.substr(yt,2),yt+=2):(e=h,0===Vt&&Mt(W)),e}(),i!==h&&(vt=e,i={type:"ConstantLiteral",value:Math.PI});(e=i)===h&&(e=yt,i=function(){var e;return"e"===t.substr(yt,1).toLowerCase()?(e=t.charAt(yt),yt++):(e=h,0===Vt&&Mt(B)),e}(),i!==h&&(vt=e,i={type:"ConstantLiteral",value:Math.E}),e=i);Vt--,e===h&&(i=h,0===Vt&&Mt(D));return e}())===h&&(e=function(){var e,i,s,r,o;if(Vt++,e=yt,(i=Ot())!==h)if(46===t.charCodeAt(yt)?(s=d,yt++):(s=h,0===Vt&&Mt($)),s!==h){for(r=[],o=Ht();o!==h;)r.push(o),o=Ht();vt=e,e=xt()}else yt=e,e=h;else yt=e,e=h;if(e===h){if(e=yt,46===t.charCodeAt(yt)?(i=d,yt++):(i=h,0===Vt&&Mt($)),i!==h){if(s=[],(r=Ht())!==h)for(;r!==h;)s.push(r),r=Ht();else s=h;s!==h?(vt=e,e=xt()):(yt=e,e=h)}else yt=e,e=h;e===h&&(e=yt,(i=Ot())!==h&&(vt=e,i=xt()),e=i)}Vt--,e===h&&(i=h,0===Vt&&Mt(j));return e}())===h&&(e=function(){var e,i,s,r;Vt++,e=yt,34===t.charCodeAt(yt)?(i=c,yt++):(i=h,0===Vt&&Mt(Y));if(i!==h){for(s=[],L.test(t.charAt(yt))?(r=t.charAt(yt),yt++):(r=h,0===Vt&&Mt(X));r!==h;)s.push(r),L.test(t.charAt(yt))?(r=t.charAt(yt),yt++):(r=h,0===Vt&&Mt(X));34===t.charCodeAt(yt)?(r=c,yt++):(r=h,0===Vt&&Mt(Y)),r!==h?(vt=e,e={type:"StringLiteral",value:s.join("")}):(yt=e,e=h)}else yt=e,e=h;Vt--,e===h&&(i=h,0===Vt&&Mt(q));return e}())===h&&(e=function(){var e,i,s,r;Vt++,e=yt,39===t.charCodeAt(yt)?(i=p,yt++):(i=h,0===Vt&&Mt(Z));if(i!==h){for(s=[],C.test(t.charAt(yt))?(r=t.charAt(yt),yt++):(r=h,0===Vt&&Mt(J));r!==h;)s.push(r),C.test(t.charAt(yt))?(r=t.charAt(yt),yt++):(r=h,0===Vt&&Mt(J));39===t.charCodeAt(yt)?(r=p,yt++):(r=h,0===Vt&&Mt(Z)),r!==h?(vt=e,e={type:"ParameterLiteral",value:s.join("")}):(yt=e,e=h)}else yt=e,e=h;Vt--,e===h&&(i=h,0===Vt&&Mt(K));return e}()),e}function Ot(){var e,i,s,r;if(48===t.charCodeAt(yt)?(e="0",yt++):(e=h,0===Vt&&Mt(G)),e===h)if(e=yt,i=function(){var e;_.test(t.charAt(yt))?(e=t.charAt(yt),yt++):(e=h,0===Vt&&Mt(U));return e}(),i!==h){for(s=[],r=Ht();r!==h;)s.push(r),r=Ht();e=i=[i,s]}else yt=e,e=h;return e}function Ht(){var e;return V.test(t.charAt(yt))?(e=t.charAt(yt),yt++):(e=h,0===Vt&&Mt(z)),e}function Ft(){var e,i,s;return e=function(){var e,i,s,r;return(e=It())===h&&(e=yt,40===t.charCodeAt(yt)?(i="(",yt++):(i=h,0===Vt&&Mt(Q)),i!==h?(Rt(),(s=zt())!==h?(Rt(),41===t.charCodeAt(yt)?(r=")",yt++):(r=h,0===Vt&&Mt(tt)),r!==h?(vt=e,e=s):(yt=e,e=h)):(yt=e,e=h)):(yt=e,e=h)),e}(),e===h&&(e=yt,i=function(){var e;45===t.charCodeAt(yt)?(e=g,yt++):(e=h,0===Vt&&Mt(et));e===h&&(43===t.charCodeAt(yt)?(e=u,yt++):(e=h,0===Vt&&Mt(it)));return e}(),i!==h?(Rt(),(s=Ft())!==h?(Rt(),vt=e,e={type:"UnaryExpression",operator:i,argument:s}):(yt=e,e=h)):(yt=e,e=h)),e}function Nt(){var e,i,s;return e=yt,(i=Wt())!==h?(Rt(),s=function(){var e,i,s,r;e=yt,40===t.charCodeAt(yt)?(i="(",yt++):(i=h,0===Vt&&Mt(Q));i!==h?(Rt(),s=yt,r=function(){var e,i,s,r,o,n,a,l;if(e=yt,(i=zt())!==h){for(s=[],r=yt,o=Rt(),44===t.charCodeAt(yt)?(n=m,yt++):(n=h,0===Vt&&Mt(st)),n!==h?(a=Rt(),(l=zt())!==h?r=o=[o,n,a,l]:(yt=r,r=h)):(yt=r,r=h);r!==h;)s.push(r),r=yt,o=Rt(),44===t.charCodeAt(yt)?(n=m,yt++):(n=h,0===Vt&&Mt(st)),n!==h?(a=Rt(),(l=zt())!==h?r=o=[o,n,a,l]:(yt=r,r=h)):(yt=r,r=h);vt=e,e=ft(i,s)}else yt=e,e=h;return e}(),r!==h?s=r=[r,Rt()]:(yt=s,s=h),s===h&&(s=null),41===t.charCodeAt(yt)?(r=")",yt++):(r=h,0===Vt&&Mt(tt)),r!==h?(vt=e,a=0,e=null!==(o=(n=s)?n[a]:null)?o:[]):(yt=e,e=h)):(yt=e,e=h);var o,n,a;return e}(),s!==h?(vt=e,e={type:"CallExpression",callee:i,arguments:s}):(yt=e,e=h)):(yt=e,e=h),e===h&&(e=Ft()),e}function Dt(){var e,i,s,r,o,n,a,l;if(e=yt,(i=Nt())!==h){for(s=[],r=yt,o=Rt(),42===t.charCodeAt(yt)?(n="*",yt++):(n=h,0===Vt&&Mt(rt)),n===h&&(47===t.charCodeAt(yt)?(n="/",yt++):(n=h,0===Vt&&Mt(ot)),n===h&&(94===t.charCodeAt(yt)?(n="^",yt++):(n=h,0===Vt&&Mt(ht)),n===h&&(37===t.charCodeAt(yt)?(n="%",yt++):(n=h,0===Vt&&Mt(nt))))),n!==h?(a=Rt(),(l=Nt())!==h?r=o=[o,n,a,l]:(yt=r,r=h)):(yt=r,r=h);r!==h;)s.push(r),r=yt,o=Rt(),42===t.charCodeAt(yt)?(n="*",yt++):(n=h,0===Vt&&Mt(rt)),n===h&&(47===t.charCodeAt(yt)?(n="/",yt++):(n=h,0===Vt&&Mt(ot)),n===h&&(94===t.charCodeAt(yt)?(n="^",yt++):(n=h,0===Vt&&Mt(ht)),n===h&&(37===t.charCodeAt(yt)?(n="%",yt++):(n=h,0===Vt&&Mt(nt))))),n!==h?(a=Rt(),(l=Nt())!==h?r=o=[o,n,a,l]:(yt=r,r=h)):(yt=r,r=h);vt=e,e=wt(i,s)}else yt=e,e=h;return e}function jt(){var e,i,s,r,o,n,a,l;if(e=yt,(i=Dt())!==h){for(s=[],r=yt,o=Rt(),43===t.charCodeAt(yt)?(n=u,yt++):(n=h,0===Vt&&Mt(it)),n===h&&(45===t.charCodeAt(yt)?(n=g,yt++):(n=h,0===Vt&&Mt(et))),n!==h?(a=Rt(),(l=Dt())!==h?r=o=[o,n,a,l]:(yt=r,r=h)):(yt=r,r=h);r!==h;)s.push(r),r=yt,o=Rt(),43===t.charCodeAt(yt)?(n=u,yt++):(n=h,0===Vt&&Mt(it)),n===h&&(45===t.charCodeAt(yt)?(n=g,yt++):(n=h,0===Vt&&Mt(et))),n!==h?(a=Rt(),(l=Dt())!==h?r=o=[o,n,a,l]:(yt=r,r=h)):(yt=r,r=h);vt=e,e=wt(i,s)}else yt=e,e=h;return e}function $t(){var e,i,s,r,o,n,a,l;if(e=yt,(i=jt())!==h){for(s=[],r=yt,o=Rt(),t.substr(yt,2)===x?(n=x,yt+=2):(n=h,0===Vt&&Mt(at)),n===h&&(t.substr(yt,2)===f?(n=f,yt+=2):(n=h,0===Vt&&Mt(lt)),n===h&&(60===t.charCodeAt(yt)?(n="<",yt++):(n=h,0===Vt&&Mt(dt)),n===h&&(62===t.charCodeAt(yt)?(n=">",yt++):(n=h,0===Vt&&Mt(ct))))),n!==h?(a=Rt(),(l=jt())!==h?r=o=[o,n,a,l]:(yt=r,r=h)):(yt=r,r=h);r!==h;)s.push(r),r=yt,o=Rt(),t.substr(yt,2)===x?(n=x,yt+=2):(n=h,0===Vt&&Mt(at)),n===h&&(t.substr(yt,2)===f?(n=f,yt+=2):(n=h,0===Vt&&Mt(lt)),n===h&&(60===t.charCodeAt(yt)?(n="<",yt++):(n=h,0===Vt&&Mt(dt)),n===h&&(62===t.charCodeAt(yt)?(n=">",yt++):(n=h,0===Vt&&Mt(ct))))),n!==h?(a=Rt(),(l=jt())!==h?r=o=[o,n,a,l]:(yt=r,r=h)):(yt=r,r=h);vt=e,e=wt(i,s)}else yt=e,e=h;return e}function Gt(){var e,i,s,r,o,n,a,l;if(e=yt,(i=$t())!==h){for(s=[],r=yt,o=Rt(),t.substr(yt,2)===w?(n=w,yt+=2):(n=h,0===Vt&&Mt(pt)),n===h&&(t.substr(yt,2)===y?(n=y,yt+=2):(n=h,0===Vt&&Mt(gt))),n!==h?(a=Rt(),(l=$t())!==h?r=o=[o,n,a,l]:(yt=r,r=h)):(yt=r,r=h);r!==h;)s.push(r),r=yt,o=Rt(),t.substr(yt,2)===w?(n=w,yt+=2):(n=h,0===Vt&&Mt(pt)),n===h&&(t.substr(yt,2)===y?(n=y,yt+=2):(n=h,0===Vt&&Mt(gt))),n!==h?(a=Rt(),(l=$t())!==h?r=o=[o,n,a,l]:(yt=r,r=h)):(yt=r,r=h);vt=e,e=wt(i,s)}else yt=e,e=h;return e}function zt(){var e,i,s,r,o,n,a,l;if(e=yt,(i=Gt())!==h){for(s=[],r=yt,o=Rt(),t.substr(yt,2)===v?(n=v,yt+=2):(n=h,0===Vt&&Mt(ut)),n===h&&(t.substr(yt,2)===b?(n=b,yt+=2):(n=h,0===Vt&&Mt(mt))),n!==h?(a=Rt(),(l=Gt())!==h?r=o=[o,n,a,l]:(yt=r,r=h)):(yt=r,r=h);r!==h;)s.push(r),r=yt,o=Rt(),t.substr(yt,2)===v?(n=v,yt+=2):(n=h,0===Vt&&Mt(ut)),n===h&&(t.substr(yt,2)===b?(n=b,yt+=2):(n=h,0===Vt&&Mt(mt))),n!==h?(a=Rt(),(l=Gt())!==h?r=o=[o,n,a,l]:(yt=r,r=h)):(yt=r,r=h);vt=e,e=function(t,e){return e.reduce((function(t,e){return{type:"LogicalExpression",operator:e[1],left:t,right:e[3]}}),t)}(i,s)}else yt=e,e=h;return e}if((i=l())!==h&&yt===t.length)return i;throw i!==h&&yt<t.length&&Mt({type:"end"}),s=St,r=Tt<t.length?t.charAt(Tt):null,o=Tt<t.length?Pt(Tt,Tt+1):Pt(Tt,Tt),new A(A.buildMessage(s,r),s,r,o)}!function(t,e){function i(){this.constructor=t}i.prototype=e.prototype,t.prototype=new i}(A,Error),A.prototype.format=function(t){var e="Error: "+this.message;if(this.location){var i,s=null;for(i=0;i<t.length;i++)if(t[i].source===this.location.source){s=t[i].text.split(/\r\n|\n|\r/g);break}var r=this.location.start,o=this.location.source+":"+r.line+":"+r.column;if(s){var h=this.location.end,n=_("",r.line.toString().length),a=s[r.line-1],l=r.line===h.line?h.column:a.length+1;e+="\n --\x3e "+o+"\n"+n+" |\n"+r.line+" | "+a+"\n"+n+" | "+_("",r.column-1)+_("",l-r.column,"^")}else e+="\n at "+o}return e},A.buildMessage=function(t,e){var i={literal:function(t){return'"'+r(t.text)+'"'},class:function(t){var e=t.parts.map((function(t){return Array.isArray(t)?o(t[0])+"-"+o(t[1]):o(t)}));return"["+(t.inverted?"^":"")+e+"]"},any:function(){return"any character"},end:function(){return"end of input"},other:function(t){return t.description}};function s(t){return t.charCodeAt(0).toString(16).toUpperCase()}function r(t){return t.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,(function(t){return"\\x0"+s(t)})).replace(/[\x10-\x1F\x7F-\x9F]/g,(function(t){return"\\x"+s(t)}))}function o(t){return t.replace(/\\/g,"\\\\").replace(/\]/g,"\\]").replace(/\^/g,"\\^").replace(/-/g,"\\-").replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,(function(t){return"\\x0"+s(t)})).replace(/[\x10-\x1F\x7F-\x9F]/g,(function(t){return"\\x"+s(t)}))}function h(t){return i[t.type](t)}return"Expected "+function(t){var e,i,s=t.map(h);if(s.sort(),s.length>0){for(e=1,i=1;e<s.length;e++)s[e-1]!==s[e]&&(s[i]=s[e],i++);s.length=i}switch(s.length){case 1:return s[0];case 2:return s[0]+" or "+s[1];default:return s.slice(0,-1).join(", ")+", or "+s[s.length-1]}}(t)+" but "+function(t){return t?'"'+r(t)+'"':"end of input"}(e)+" found."};class C{compile(t){const e=L(t,{});return new V(t,e)}execute(t){return this.compile(t).execute()}}class P{constructor(){this.pvs=new Map}canProvide(t){return t.startsWith("=")}startProviding(t){for(const e of t)this.pvs.set(e.name,new M(e))}stopProviding(t){for(const e of t)this.pvs.delete(e.name)}isNavigable(){return!1}shutdown(){}}class M{constructor(t){this.pv=t;const e=new C;this.compiledFormula=e.compile(t.name);for(const e of this.compiledFormula.getPVNames()){const i=t.pvEngine.createPV(e);this.compiledFormula.updateDataSource(i.name,{value:i.value,acquisitionStatus:"good"}),t.pvEngine.addListener(e,(()=>{this.compiledFormula.updateDataSource(e,{value:t.pvEngine.getValue(e),acquisitionStatus:"good"}),this.trigger()}))}this.trigger()}trigger(){const t=this.compiledFormula.execute();this.pv.pvEngine.setValue(new Date,this.pv.name,t)}}var k={exports:{}};!function(t){!function(){function e(t,e){document.addEventListener?t.addEventListener("scroll",e,!1):t.attachEvent("scroll",e)}function i(t){this.a=document.createElement("div"),this.a.setAttribute("aria-hidden","true"),this.a.appendChild(document.createTextNode(t)),this.b=document.createElement("span"),this.c=document.createElement("span"),this.h=document.createElement("span"),this.f=document.createElement("span"),this.g=-1,this.b.style.cssText="max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;",this.c.style.cssText="max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;",this.f.style.cssText="max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;",this.h.style.cssText="display:inline-block;width:200%;height:200%;font-size:16px;max-width:none;",this.b.appendChild(this.h),this.c.appendChild(this.f),this.a.appendChild(this.b),this.a.appendChild(this.c)}function s(t,e){t.a.style.cssText="max-width:none;min-width:20px;min-height:20px;display:inline-block;overflow:hidden;position:absolute;width:auto;margin:0;padding:0;top:-999px;white-space:nowrap;font-synthesis:none;font:"+e+";"}function r(t){var e=t.a.offsetWidth,i=e+100;return t.f.style.width=i+"px",t.c.scrollLeft=i,t.b.scrollLeft=t.b.scrollWidth+100,t.g!==e&&(t.g=e,!0)}function o(t,i){function s(){var t=o;r(t)&&t.a.parentNode&&i(t.g)}var o=t;e(t.b,s),e(t.c,s),r(t)}function h(t,e){var i=e||{};this.family=t,this.style=i.style||"normal",this.weight=i.weight||"normal",this.stretch=i.stretch||"normal"}var n=null,a=null,l=null,d=null;function c(){return null===d&&(d=!!document.fonts),d}function p(){if(null===l){var t=document.createElement("div");try{t.style.font="condensed 100px sans-serif"}catch(t){}l=""!==t.style.font}return l}function g(t,e){return[t.style,t.weight,p()?t.stretch:"","100px",e].join(" ")}h.prototype.load=function(t,e){var r=this,h=t||"BESbswy",l=0,d=e||3e3,p=(new Date).getTime();return new Promise((function(t,e){if(c()&&!function(){if(null===a)if(c()&&/Apple/.test(window.navigator.vendor)){var t=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))(?:\.([0-9]+))/.exec(window.navigator.userAgent);a=!!t&&603>parseInt(t[1],10)}else a=!1;return a}()){var u=new Promise((function(t,e){!function i(){(new Date).getTime()-p>=d?e(Error(d+"ms timeout exceeded")):document.fonts.load(g(r,'"'+r.family+'"'),h).then((function(e){1<=e.length?t():setTimeout(i,25)}),e)}()})),m=new Promise((function(t,e){l=setTimeout((function(){e(Error(d+"ms timeout exceeded"))}),d)}));Promise.race([m,u]).then((function(){clearTimeout(l),t(r)}),e)}else!function(t){document.body?t():document.addEventListener?document.addEventListener("DOMContentLoaded",(function e(){document.removeEventListener("DOMContentLoaded",e),t()})):document.attachEvent("onreadystatechange",(function e(){"interactive"!=document.readyState&&"complete"!=document.readyState||(document.detachEvent("onreadystatechange",e),t())}))}((function(){function a(){var e;(e=-1!=x&&-1!=f||-1!=x&&-1!=w||-1!=f&&-1!=w)&&((e=x!=f&&x!=w&&f!=w)||(null===n&&(e=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))/.exec(window.navigator.userAgent),n=!!e&&(536>parseInt(e[1],10)||536===parseInt(e[1],10)&&11>=parseInt(e[2],10))),e=n&&(x==y&&f==y&&w==y||x==v&&f==v&&w==v||x==b&&f==b&&w==b)),e=!e),e&&(T.parentNode&&T.parentNode.removeChild(T),clearTimeout(l),t(r))}var c=new i(h),u=new i(h),m=new i(h),x=-1,f=-1,w=-1,y=-1,v=-1,b=-1,T=document.createElement("div");T.dir="ltr",s(c,g(r,"sans-serif")),s(u,g(r,"serif")),s(m,g(r,"monospace")),T.appendChild(c.a),T.appendChild(u.a),T.appendChild(m.a),document.body.appendChild(T),y=c.a.offsetWidth,v=u.a.offsetWidth,b=m.a.offsetWidth,function t(){if((new Date).getTime()-p>=d)T.parentNode&&T.parentNode.removeChild(T),e(Error(d+"ms timeout exceeded"));else{var i=document.hidden;!0!==i&&void 0!==i||(x=c.a.offsetWidth,f=u.a.offsetWidth,w=m.a.offsetWidth,a()),l=setTimeout(t,50)}}(),o(c,(function(t){x=t,a()})),s(c,g(r,'"'+r.family+'",sans-serif')),o(u,(function(t){f=t,a()})),s(u,g(r,'"'+r.family+'",serif')),o(m,(function(t){w=t,a()})),s(m,g(r,'"'+r.family+'",monospace'))}))}))},t.exports=h}()}(k);var R=k.exports;const E=["Arial","Arial Black","Courier New","Helvetica","Tahoma","Verdana"];class W{constructor(t,e,i,s){this.name=t,this.style=i,this.height=s?e:Math.round(16*e/15)}scale(t){return new W(this.name,t*this.height,this.style,!0)}getFontString(){return 1===this.style?`bold ${this.height}px ${this.name}`:2===this.style?`italic ${this.height}px ${this.name}`:(0!==this.style&&console.warn(`Unsupported font style ${this.style}`),`normal ${this.height}px ${this.name}`)}preload(){if(-1!==E.indexOf(this.name))return Promise.resolve();let t={weight:"normal",style:"normal"};return 1===this.style?t.weight="bold":2===this.style&&(t.style="italic"),new R(this.name,t).load()}}W.ARIAL_9=new W("Arial",9,0,!1),W.ARIAL_10=new W("Arial",10,0,!1),W.ARIAL_11=new W("Arial",11,0,!1),W.ARIAL_12_BOLD=new W("Arial",12,1,!1);class B{constructor(){this.BLACK=e.BLACK,this.BLUE=e.BLUE,this.CYAN=e.CYAN,this.DARK_GRAY=e.DARK_GRAY,this.GRAY=e.GRAY,this.GREEN=e.GREEN,this.LIGHT_BLUE=e.LIGHT_BLUE,this.ORANGE=e.ORANGE,this.PINK=e.PINK,this.PURPLE=e.PURPLE,this.RED=e.RED,this.WHITE=e.WHITE,this.YELLOW=e.YELLOW}getColorFromRGB(t,i,s){return new e(t,i,s)}getFont(t,e,i){return new W(t,e,i,!1)}}class I{writeInfo(t){console.log(t)}writeError(t){console.error(t)}writeWarning(t){console.warn(t)}}class O{createDoubleArray(t){return Array(t).fill(0)}createIntArray(t){return Array(t).fill(0)}toJavaDoubleArray(t){return[...t]}toJavaIntArray(t){return[...t]}}class H{constructor(t,e,i){this.code=t,this.interpolate=e,this.autoscale=i,this.values=[],this.colors=[],this.entries=[],this.dirty=!0,0===t||(1===t?(this.values=[0,1],this.colors=[[0,0,0],[255,255,255]]):2===t?(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]]):3===t?(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]]):4===t?(this.values=[0,.365,.746,1],this.colors=[[11,0,0],[255,0,0],[255,255,0],[255,255,255]]):5===t?(this.values=[0,1],this.colors=[[0,255,255],[255,0,255]]):6===t&&(this.values=[0,.5,1],this.colors=[[0,0,0],[255,0,0],[255,255,255]]))}addMapping(t,e,i,s){this.values.push(t),this.colors.push([e,i,s]),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,0===e)return this.entries[e][1];if(e===this.entries.length)return this.entries[e-1][1];if(this.interpolate){const[i,s]=this.entries[e-1],[r,o]=this.entries[e],h=(t-i)/(r-i);return[Math.floor((o[0]-s[0])*h+s[0]),Math.floor((o[1]-s[1])*h+s[1]),Math.floor((o[2]-s[2])*h+s[2])]}return this.entries[e-1][1]}getMinMax(){return[Math.min.apply(Math,this.values),Math.max.apply(Math,this.values)]}binarySearch(t){let e=0,i=this.entries.length-1;for(;e<=i;){const s=i+e>>1;if(t>this.entries[s][0])e=s+1;else{if(!(t<this.entries[s][0]))return s;i=s-1}}return-e-1}}class F{constructor(t,e=[]){this.widget=t,this.properties=new Map,this.generators=[];for(const t of e)this.properties.set(t.name,t)}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 K)e.value=t.getActions(e.name);else if(e instanceof it)e.value=t.getAutoScaleWidgets(e.name);else if(e instanceof z)e.value=t.getBoolean(e.name);else if(e instanceof Y)e.value=t.getColorMap(e.name);else if(e instanceof U)e.value=t.getColor(e.name);else if(e instanceof G)e.value=t.getFloat(e.name);else if(e instanceof q)e.value=t.getFont(e.name);else if(e instanceof $)e.value=t.getInt(e.name);else if(e instanceof Z)e.value=t.getMacros(e.name);else if(e instanceof X)e.value=t.getPoints(e.name);else if(e instanceof j);else if(e instanceof tt)e.value=t.getRules(e.name);else if(e instanceof et)e.value=t.getScaleOptions(e.name);else if(e instanceof J)e.value=t.getScripts(e.name);else if(e instanceof D)e.rawValue=t.getString(e.name);else{if(!(e instanceof Q))throw new Error(`Property ${e.name} has an unexpected type`);e.value=t.getStringList(e.name)}}loadXMLValues(t){this.properties.forEach((e=>{this.loadProperty(t,e)})),this.resolveStringProperties();for(const e of this.generators)for(const 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((t=>{if(t instanceof D){const e=t;void 0!==e.rawValue?t.value=this.widget.expandMacro(e.rawValue):t.value=e.rawValue}}))}getProperty(t){return this.properties.get(t)}getValue(t,e=!1){const i=this.properties.get(t);if(i&&void 0!==i.value)return i.value;if(!e)throw new Error(`Missing property ${t}`)}setValue(t,e){const i=this.properties.get(t);if(!i)throw new Error(`Cannot set value of unknown property ${t}`);i.value=e}}class N{constructor(t,e){this.name=t,this.defaultValue=e,this.value=e}get value(){return this._value}set value(t){if(this.value!==t){const e=this._value;if(this._value=t,this.listeners)for(const i of this.listeners)i(t,e)}}addListener(t){this.listeners=this.listeners||[],this.listeners.push(t)}removeListener(t){const e=this.listeners||[],i=e.indexOf(t);-1!==i&&e.splice(i,1)}printScriptValue(t){return String(t)}}class D extends N{printScriptValue(t){return`"${t.replace('"','\\"')}"`}}class j extends N{constructor(t,e){super(t),this.pvPropertyName=e}}class $ extends N{}class G extends N{}class z extends N{}class U extends N{printScriptValue(t){const{red:e,green:i,blue:s}=Object.assign({},t);return`ColorFontUtil.getColorFromRGB(${e}, ${i}, ${s})`}}class q extends N{printScriptValue(t){const{name:e,height:i,style:s}=Object.assign({},t);return`ColorFontUtil.getFont("${e}", ${i}, ${s})`}}class Y extends N{printScriptValue(t){return`${t.code}`}}class X extends N{}class K extends N{}class Z extends N{}class J extends N{}class Q extends N{}class tt extends N{}class et extends N{}class it extends N{}class st{constructor(t){this._pv=t}getName(){return this._pv.name}getValue(){return this._pv.value}setValue(t){this._pv.pvEngine.setValue(new Date,this._pv.name,t)}}class rt{constructor(t){this.widget=t}getPVByName(t){const e=this.widget.display.getPV(t);return e?new st(e):null}getPV(t="pv_name"){const e=this.getPropertyValue(t);return e?this.getPVByName(e):null}getPropertyValue(t){const e=this.widget.properties.getProperty(t);return e?e.value:null}setPropertyValue(t,e){const i=this.widget.properties.getProperty(t);if(!i)throw new Error(`Cannot set value of unknown property ${t}`);if(i instanceof D)e=void 0!==e?String(e):e,this.widget.properties.setValue(t,e);else if(i instanceof Y){let i=0;switch(e){case"GrayScale":i=1;break;case"JET":i=2;break;case"ColorSpectrum":i=3;break;case"Hot":i=4;break;case"Cool":i=5;break;case"Shaded":i=6}const s=new H(i,!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)}setVisible(t){this.setPropertyValue("visible",t)}getValue(){var t;return null!==(t=this.widget.value)&&void 0!==t?t:null}setValue(t){this.widget.value=t}setValueInUIThread(t){this.setValue(t)}}class ot extends rt{constructor(t){super(t),this.xyGraph=t}clearGraph(){this.xyGraph.clearGraph()}getXBuffer(t){return this.xyGraph.getTrace(t).snapshot().map((t=>t.x))}getYBuffer(t){return this.xyGraph.getTrace(t).snapshot().map((t=>t.y))}}function ht(t){return"XY Graph"===t.widgetType?new ot(t):new rt(t)}class nt{constructor(t){this.display=t}getWidget(t){const e=this.display.findWidgetByName(t);if(e)return ht(e)}}class at{fullScreen(){document.documentElement.requestFullscreen()}openConfirmDialog(t){return confirm(t)}openInformationDialog(t){alert(t)}openWarningDialog(t){alert(t)}openErrorDialog(t){alert(t)}openPasswordDialog(t,e){let i=prompt(t);if(i)return i===e}}class lt{openInformation(t,e,i){alert(i)}openConfirm(t,e,i){return confirm(i)}openError(t,e,i){alert(i)}}const dt=["yyyy","MM","dd","HH","mm","ss","nnnnnnnnn"];class ct{constructor(t){this.pvEngine=t}getDouble(t){return parseFloat(t.getValue())}getLong(t){return parseInt(t.getValue(),10)}getString(t){return String(t.getValue())}getTimeString(t,e="yyyy-MM-dd HH:mm:ss.nnnnnnnnn"){const i=t._pv.time;if(i){let t=e;for(const e of dt)t=t.replace(e,this.formatDate(i,e));return t}return null}formatDate(t,e){if("yyyy"===e)return String(t.getUTCFullYear());if("MM"===e){const e=t.getUTCMonth()+1;return e<10?"0"+e:""+e}if("dd"===e){const e=t.getUTCDate();return e<10?"0"+e:""+e}if("HH"===e){const e=t.getUTCHours();return e<10?"0"+e:""+e}if("mm"===e){const e=t.getUTCMinutes();return e<10?"0"+e:""+e}if("ss"===e){const e=t.getUTCSeconds();return e<10?"0"+e:""+e}if("nnnnnnnnn"===e){const e=t.getUTCMilliseconds();return e<10?"00"+e:e<100?"0"+e:""+e}throw new Error(`Unexpected format '${e}'`)}}class pt{constructor(t){this.display=t}openOPI(t,e,i,s){if(0!==i)throw new Error(`Unsupported target ${i}`);{const t={path:e,replace:0===i};this.display.fireEvent("opendisplay",t)}}closeCurrentOPI(){this.display.fireEvent("closedisplay",{})}}let gt,ut,mt;class xt{constructor(t,e,i=[]){this.scriptText=e,gt||(gt=document.createElement("iframe"),gt.id="script-e",gt.style.display="none",document.body.appendChild(gt),ut=gt.contentWindow,mt=ut.eval,!mt&&ut.execScript&&(ut.execScript.call(ut,"null"),mt=ut.eval)),this.scriptText=e.replace(/importClass\([^\)]*\)\s*\;?/gi,"").replace(/importPackage\([^\)]*\)\s*\;?/gi,"").trim(),this.context=Object.assign({display:new nt(t.display),pvs:i.map((t=>new st(t))),widget:ht(t),ConsoleUtil:new I,ColorFontUtil:new B,DataUtil:new O,GUIUtil:new at,MessageDialog:new lt,PVUtil:new ct(t.display.pvEngine),ScriptUtil:new pt(t.display)},t.display.pvEngine.scriptLibraries)}run(){const t=[];for(const e in gt.contentWindow)t.push(e);try{for(const t in this.context)this.context.hasOwnProperty(t)&&(ut[t]=this.context[t]);mt.call(ut,this.scriptText);const e={};for(const i in ut)-1===t.indexOf(i)&&(e[i]=ut[i]);this.context=e}finally{for(const e in ut)-1===t.indexOf(e)&&delete ut[e]}}}class ft{constructor(e,i){this.name=e,this.pvEngine=i,this._writable=!1,this._severity=t.AlarmSeverity.NONE,this._precision=3,this._disconnected=!1,this.navigable=!1}get units(){return this._units}set units(t){this._units=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}toNumber(){return null===this.value?null:"number"==typeof this.value?this.value:"boolean"==typeof this.value?this.value?1:0:void 0!==typeof this.indexValue?this.indexValue:void 0}formatValue(t,e){return null===this.value?"":"string"==typeof this.value?this.value:"number"==typeof this.value?this.formatNumber(t,this.value,e):this.value instanceof Date?this.value.toISOString().replace("T"," ").replace("Z",""):String(this.value)}formatNumber(t,e,i){if(null==e||null==e)return"";switch(t){case 0:case 1:return-1===i?String(e):e.toFixed(i);case 2:return e.toExponential().replace("e+","E").toUpperCase();case 3:return"0x"+e.toString(16).toUpperCase();default:return console.warn(`Unexpected format type ${t}`),String(e)}}setSample(t){this._time=t.time,this._value=t.value,this._indexValue=t.valueIndex,this._severity=t.severity,this.pvEngine.requestRepaint()}addListener(t){this.pvEngine.addListener(this.name,t)}removeListener(t){this.pvEngine.addListener(this.name,t)}toString(){if(void 0!==this.value)return String(this.value)}}var wt;t.AlarmSeverity=void 0,(wt=t.AlarmSeverity||(t.AlarmSeverity={}))[wt.NONE=0]="NONE",wt[wt.MINOR=1]="MINOR",wt[wt.MAJOR=2]="MAJOR",wt[wt.INVALID=3]="INVALID",wt[wt.UNDEFINED=4]="UNDEFINED";class yt extends ft{constructor(t,e,i){super(t,e),this.initializer=i,this.writable=!0}}const vt=/(loc\:\/\/[^\(]+)(\((.*)\))?/;function bt(t){if(!t.startsWith("loc://"))return t;const e=t.match(vt);return e?e[1]:t}class Tt{constructor(t){this.display=t,this.rules=[],this.scripts=[],this.pvs=new Map,this.providers=[],this.scriptLibraries={},this.listeners=new Map}clearState(){this.disconnectAll(),this.rules=[],this.scripts=[],this.listeners.clear()}getPVNames(){return[...this.pvs.keys()]}hasPV(t){const e=bt(t);return this.pvs.has(e)}getPV(t){const e=bt(t);return this.pvs.get(e)}disconnectAll(){for(const t of this.providers){const e=[];for(const i of this.pvs.values())t.canProvide(i.name)&&e.push(i);e.length&&t.stopProviding(e)}this.pvs.clear()}createPV(t){if(t.startsWith("loc://"))return this.createLocalPV(t);let e=this.pvs.get(t);if(e)return e;e=new ft(t,this),this.pvs.set(t,e);for(const i of this.providers)if(i.canProvide(t))return e.navigable=i.isNavigable(),i.startProviding([e]),e;return console.warn(`No provider for PV ${t}`),e.disconnected=!0,e}requestRepaint(){this.display.requestRepaint()}createLocalPV(t){const e=t.match(vt);let i;if(e&&(t=e[1],void 0!==e[3])){const t=e[3];i=t.startsWith('"')&&t.endsWith('"')?t.substring(1,t.length-1):-1!==t.indexOf(",")?t.split(",").map((t=>Number(t.trim()))):Number(t)}let s=this.pvs.get(t),r=!1;if(s){const e=s;void 0===e.initializer||void 0===i||this.initializerEquals(e.initializer,i)?void 0===e.initializer&&void 0!==i&&(r=!0):console.warn(`PV ${t} is defined with different initializers: ${e.initializer} !== ${i}`)}return s||(s=new yt(t,this,i),this.pvs.set(t,s),r=!0),r&&void 0!==i&&this.setValue(new Date,t,i),s}initializerEquals(t,e){if(Array.isArray(t)&&Array.isArray(e)){if(t.length!==e.length)return!1;for(let i=0;i<t.length;i++)if(t[i]!==e[i])return!1;return!0}return t===e}getValue(t){const e=bt(t),i=this.pvs.get(e);if(i)return i.value}setValue(e,i,s,r=t.AlarmSeverity.NONE){const o=bt(i),h=this.pvs.get(o);if(!h)throw new Error(`Cannot set value of unknown PV ${i}`);h.setSample({time:e,value:s,severity:r});for(const t of this.listeners.get(i)||[])t()}setValues(t){const e=[];for(const i of t.keys()){const s=this.pvs.get(i);if(s){s.setSample(t.get(i));for(const t of this.listeners.get(i)||[])e.push(t)}else console.warn(`Received an update for unknown pv ${i}`)}for(const t of e)t()}createScript(t,e,i){const s=[];for(const i of e.inputs){const e=t.expandMacro(i.pvName);s.push(this.createPV(e))}const r=new St(t,e,i,s);this.scripts.push(r);const o=()=>{if(e.checkConnect)for(const t of s)if(t.disconnected||null===t.value||void 0===t.value)return;r.scriptEngine.run()};for(const i of e.inputs)if(i.trigger){const e=t.expandMacro(i.pvName);this.addListener(e,o)}}createRule(t,e){const i=[];for(const s of e.inputs){const e=t.expandMacro(s.pvName);i.push(this.createPV(e))}const s=new Vt(t,e,i);this.rules.push(s);const r=()=>s.scriptEngine.run();for(const i of e.inputs)if(i.trigger){const e=t.expandMacro(i.pvName);this.addListener(e,r)}}addProvider(t){this.providers.push(t)}addScriptLibrary(t,e){this.scriptLibraries[t]=e}addListener(t,e){const i=bt(t),s=this.listeners.get(i);s?s.push(e):this.listeners.set(i,[e]);const r=this.pvs.get(i);r&&null!==r.value&&void 0!==r.value&&e()}removeListener(t,e){const i=bt(t),s=this.listeners.get(i);if(s){const t=s.indexOf(e);-1!==t&&s.splice(t,1)}}}class St{constructor(t,e,i,s){this.widget=t,this.script=e,this.text=i,this.scriptEngine=new xt(t,i,s)}}class Vt{constructor(t,e,i){this.widget=t,this.rule=e;let s="";const r=t.properties.getProperty(e.propertyName);if(!r)throw new Error(`Cannot create rule for unsupported property ${e.propertyName}`);if(e.expressions.length){let t=!1,o=!1,h=!1,n=!1;for(const i of e.expressions)i.expression.match(/pv[0-9]+/)&&(t=!0),e.outputExpression&&i.outputValue.toString().match(/pv[0-9]+/)&&(t=!0),-1!==i.expression.indexOf("pvInt")&&(o=!0),e.outputExpression&&-1!==i.outputValue.toString().indexOf("pvInt")&&(o=!0),-1!==i.expression.indexOf("pvStr")&&(h=!0),e.outputExpression&&-1!==i.outputValue.toString().indexOf("pvStr")&&(h=!0),-1!==i.expression.indexOf("pvSev")&&(n=!0),e.outputExpression&&-1!==i.outputValue.toString().indexOf("pvSev")&&(n=!0);for(let e=0;e<i.length;e++)t&&(s+=`var pv${e} = PVUtil.getDouble(pvs[${e}]);\n`),o&&(s+=`var pvInt${e} = PVUtil.getLong(pvs[${e}]);\n`),h&&(s+=`var pvStr${e} = PVUtil.getString(pvs[${e}]);\n`),n&&(s+=`var pvSev${e} = PVUtil.getSeverity(pvs[${e}]);\n`);for(let t=0;t<e.expressions.length;t++){const i=e.expressions[t].expression,o=e.expressions[t].outputValue;if(t>0&&(s+="else "),s+=`if (${i}) widget.setPropertyValue("${e.propertyName}", `,e.outputExpression)s+=`${o});\n`;else{s+=`${this.printScriptValue(r,o)});\n`}}const a=r.value,l=this.printScriptValue(r,a);s+=`else widget.setPropertyValue("${e.propertyName}", `,s+=`${l});\n`}this.scriptEngine=new xt(t,s,i)}printScriptValue(t,e){return null==e?"null":t.printScriptValue(e)}}class At{constructor(t,e,i){this.pv=t,this.interval=e,void 0!==i&&t.pvEngine.setValue(new Date,t.name,i),this.interval>0&&(this.timer=window.setInterval((()=>{this.generateSample(new Date)}),e))}emit(e,i){let s=t.AlarmSeverity.NONE;void 0!==this.pv.lowerAlarmLimit&&i<this.pv.lowerAlarmLimit||void 0!==this.pv.upperAlarmLimit&&i>this.pv.upperAlarmLimit?s=t.AlarmSeverity.MAJOR:(void 0!==this.pv.lowerWarningLimit&&i<this.pv.lowerWarningLimit||void 0!==this.pv.upperWarningLimit&&i>this.pv.upperWarningLimit)&&(s=t.AlarmSeverity.MINOR),this.pv.pvEngine.setValue(e,this.pv.name,i,s)}stop(){window.clearInterval(this.timer)}}class _t extends At{constructor(t,e){super(t,-1,e)}generateSample(){}}class Lt extends At{constructor(t,e,i,s){super(t,s),this.min=e,this.max=i;const r=this.max-this.min;t.units="x",t.lowerDisplayLimit=e,t.lowerAlarmLimit=e+.1*r,t.lowerWarningLimit=e+.2*r,t.upperWarningLimit=e+.8*r,t.upperAlarmLimit=e+.9*r,t.upperDisplayLimit=i}generateSample(t){const e=Math.random()*(this.max-this.min)+this.min;this.emit(t,e)}}class Ct extends At{constructor(t,e,i,s){super(t,s),this.avg=e,this.stddev=i,t.units="x",t.lowerDisplayLimit=e-4*i,t.lowerAlarmLimit=e-2*i,t.lowerWarningLimit=e-i,t.upperWarningLimit=e+i,t.upperAlarmLimit=e+2*i,t.upperDisplayLimit=e+4*i}generateSample(t){let e,i,s;do{e=2*Math.random()-1,i=2*Math.random()-1,s=e*e+i*i}while(s>=1||0===s);const r=e*Math.sqrt(-2*Math.log(s)/s);this.emit(t,this.avg+r*this.stddev)}}class Pt extends At{constructor(t,e,i,s,r){super(t,r),this.min=e,this.max=i,this.samplesPerCycle=s,this.currentValue=0;const o=this.max-this.min;t.units="x",t.lowerDisplayLimit=e,t.lowerAlarmLimit=e+.1*o,t.lowerWarningLimit=e+.2*o,t.upperWarningLimit=e+.8*o,t.upperAlarmLimit=e+.9*o,t.upperDisplayLimit=i}generateSample(t){const e=this.max-this.min,i=Math.sin(2*this.currentValue*Math.PI/this.samplesPerCycle)*e/2+this.min+e/2;this.currentValue++,this.emit(t,i)}}class Mt extends At{constructor(t,e,i,s,r){super(t,r),this.min=e,this.max=i,this.inc=s,this.currentValue=0,this.currentValue=s>=0?e-s:i-s;const o=this.max-this.min;t.units="x",t.lowerDisplayLimit=e,t.lowerAlarmLimit=e+.1*o,t.lowerWarningLimit=e+.2*o,t.upperWarningLimit=e+.8*o,t.upperAlarmLimit=e+.9*o,t.upperDisplayLimit=i}generateSample(t){this.currentValue=this.currentValue+this.inc,this.currentValue>this.max&&(this.currentValue=this.min),this.currentValue<this.min&&(this.currentValue=this.max),this.emit(t,this.currentValue)}}const kt=/sim\:\/\/([a-zA-Z]+)(\((.*)\))?/;class Rt{constructor(){this.pvs=new Map}canProvide(t){return t.startsWith("sim://")}startProviding(t){for(const e of t){const t=new Et(e);this.pvs.set(e.name,t)}}stopProviding(t){for(const e of t){const t=this.pvs.get(e.name);t&&(t.fn.stop(),this.pvs.delete(e.name))}}isNavigable(){return!1}shutdown(){for(const t of this.pvs.values())t.fn.stop()}}class Et{constructor(t){this.pv=t;const e=t.name.match(kt);if(e){const t=e[3]?e[3].split(","):[];for(let e=0;e<t.length;e++)t[e]=t[e].trim();this.fn=this.createGenerator(e[1],t)}else console.warn(`Unexpected pattern for PV ${t.name}`),this.fn=new _t(t,void 0)}createGenerator(t,e){switch(t){case"const":const i=this.saferEval(e[0]);return new _t(this.pv,i);case"gaussianNoise":return this.createGaussianNoise(e);case"noise":return this.createNoise(e);case"ramp":return this.createRamp(e);case"sine":return this.createSine(e);default:return console.warn(`Unexpected function ${t} for PV ${this.pv.name}`),new _t(this.pv,void 0)}}saferEval(t){return Function('"use strict";return ('+t+")")()}createNoise(t){if(0===t.length)return new Lt(this.pv,-5,5,1e3);{const e=parseFloat(t[0]),i=parseFloat(t[1]),s=1e3*parseFloat(t[2]);return new Lt(this.pv,e,i,s)}}createGaussianNoise(t){if(0===t.length)return new Ct(this.pv,0,1,100);{const e=parseFloat(t[0]),i=parseFloat(t[1]),s=1e3*parseFloat(t[2]);return new Ct(this.pv,e,i,s)}}createRamp(t){let e;if(0===t.length)e=new Mt(this.pv,-5,5,1,1e3);else if(3===t.length){const i=parseFloat(t[0]),s=parseFloat(t[1]),r=1e3*parseFloat(t[2]);e=new Mt(this.pv,i,s,1,r)}else{if(4!==t.length)return console.warn(`Unexpected ramp arguments for PV ${this.pv.name}`),new _t(this.pv,void 0);{const i=parseFloat(t[0]),s=parseFloat(t[1]),r=parseFloat(t[2]),o=1e3*parseFloat(t[3]);e=new Mt(this.pv,i,s,r,o)}}return e}createSine(t){let e;if(0===t.length)e=new Pt(this.pv,-5,5,10,1e3);else if(3===t.length){const i=parseFloat(t[0]),s=parseFloat(t[1]),r=1e3*parseFloat(t[2]);e=new Pt(this.pv,i,s,10,r)}else{if(4!==t.length)return console.warn(`Unexpected sine arguments for PV ${this.pv.name}`),new _t(this.pv,void 0);{const i=parseFloat(t[0]),s=parseFloat(t[1]),r=parseFloat(t[2]),o=1e3*parseFloat(t[3]);e=new Pt(this.pv,i,s,r,o)}}return e}}class Wt{constructor(){this.actions=[],this.hookFirstActionToClick=!1,this.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]}getClickActions(){const t=[];if(this.hookFirstActionToClick)t.push(0);else if(this.hookAllActionsToClick)for(let e=0;e<this.actions.length;e++)t.push(e);return t}toString(){return 1===this.actions.length?String(this.actions[0])||this.actions[0].type:`${this.actions.length} actions`}}class Bt{constructor(t){this.path=t,this.type="OPEN_DISPLAY"}toString(){return`Open ${this.path}`}}class It{constructor(){this.type="OPEN_FILE"}toString(){return`Open ${this.path}`}}class Ot{constructor(t){this.embedded=t,this.type="EXECUTE_JAVASCRIPT"}toString(){return"Execute JavaScript"}}class Ht{constructor(){this.type="EXECUTE_CMD"}toString(){return`Execute Command ${this.command}`}}class Ft{constructor(t,e){this.pvName=t,this.value=e,this.type="WRITE_PV"}toString(){return`Write ${this.value} to ${this.pvName}`}}class Nt{constructor(){this.type="PLAY_SOUND"}toString(){return`Play WAV File ${this.path}`}}class Dt{constructor(){this.type="OPEN_WEBPAGE"}toString(){return`Open Webpage ${this.hyperlink}`}}class jt{constructor(){this.rules=[]}}const $t="actions",Gt="background_color",zt="backcolor_alarm_sensitive",Ut="border_alarm_sensitive",qt="border_color",Yt="border_width",Xt="border_style",Kt="enabled",Zt="foreground_color",Jt="forecolor_alarm_sensitive",Qt="height",te="name",ee="pv_name",ie="pv_value",se="rules",re="scale_options",oe="scripts",he="text",ne="tooltip",ae="transparent",le="visible",de="widget_type",ce="width",pe="wuid";class ge{constructor(t,i){this.display=t,this.parent=i,this.x=0,this.y=0,this.width=0,this.height=0,this.fillRoundRectangleBackgroundBorder=!0,this.properties=new F(this,[new K($t,new Wt),new z(zt,!1),new U(Gt,e.TRANSPARENT),new z(Ut,!1),new U(qt),new $(Xt),new $(Yt),new z(Kt,!0),new z(Jt,!1),new U(Zt),new $(Qt),new D(te),new D(ee),new j(ie,ee),new tt(se,new jt),new J(oe),new D(he,""),new D(ne,""),new z(ae,!1),new z(le),new D(de),new $(ce),new D(pe),new $("x"),new $("y"),new et(re)])}parseNode(t){this.properties.loadXMLValues(t);for(const t of this.properties.all())if(t instanceof q){const e=t.value;e.preload().then((()=>this.requestRepaint())).catch((()=>console.warn(`Failed to load font '${e.getFontString()}'.`)))}this.pvName&&this.display.pvEngine.createPV(this.pvName);for(const t of this.scripts.scripts)t.embedded?this.display.pvEngine.createScript(this,t,t.text):fetch(`${this.display.baseUrl}${t.path}`,{credentials:"same-origin"}).then((e=>{e.ok&&e.text().then((e=>{this.display.pvEngine.createScript(this,t,e)}))}));for(const t of this.rules.rules)this.properties.getProperty(t.propertyName)?this.display.pvEngine.createRule(this,t):console.warn(`Cannot create rule for unsupported property ${t.propertyName}`);(this.tooltip||this.actions.isClickable())&&(this.holderRegion={id:`${this.wuid}-holder`},this.tooltip&&(this.holderRegion.tooltip=()=>this.tooltip),this.actions.isClickable()&&(this.holderRegion.click=()=>{for(const t of this.actions.getClickActions())this.executeAction(t)},this.holderRegion.cursor="pointer")),this.init()}drawHolder(e){var i,s;const{scale:r}=this;let o=[0,0,0,0];const h=this.borderAlarmSensitive&&((null===(i=this.pv)||void 0===i?void 0:i.severity)===t.AlarmSeverity.MINOR||(null===(s=this.pv)||void 0===s?void 0:s.severity)===t.AlarmSeverity.MAJOR);if(!h)switch(this.borderStyle){case 0:break;case 1:case 8:case 9:case 10:case 11:o=[this.borderWidth,this.borderWidth,this.borderWidth,this.borderWidth];break;case 2:case 3:o=[1*r,1*r,1*r,1*r];break;case 4:case 5:case 6:o=[2*r,2*r,2*r,2*r];break;case 7:o=[2*r,2*r,1*r,1*r];break;case 12:o=[17*r,1*r,1*r,1*r];break;case 13:o=[16*r,16*r,16*r,16*r];break;case 14:const t=2*this.borderWidth;o=[t,t,t,t]}this.x=this.holderX+o[1],this.y=this.holderY+o[0],this.width=this.holderWidth-o[1]-o[3],this.height=this.holderHeight-o[0]-o[2],h||this.drawBorderStyle(e),this.holderRegion&&e.addHitRegion(this.holderRegion).addRect(this.holderX,this.holderY,this.holderWidth,this.holderHeight)}drawBorderStyle(t){const{scale:i}=this;if(0===this.borderStyle);else if(1===this.borderStyle)t.strokeRect({x:this.holderX,y:this.holderY,width:this.holderWidth,height:this.holderHeight,color:this.borderColor,lineWidth:this.borderWidth,crispen:!0});else if(2===this.borderStyle){const s=1*i,r=this.holderY+s/2,o=this.holderX+s/2,h=this.holderY+this.holderHeight-s+s/2,n=this.holderX+this.holderWidth-s+s/2;t.strokePath({color:e.BLACK,path:new b(n,h).lineTo(n,r).moveTo(n,h).lineTo(o,h)}),t.strokePath({color:e.WHITE,path:new b(o,r).lineTo(n-s,r).moveTo(o,r).lineTo(o,h-s)})}else if(3===this.borderStyle){const s=1*i,r=this.holderY+s/2,o=this.holderX+s/2,h=this.holderY+this.holderHeight-s+s/2,n=this.holderX+this.holderWidth-s+s/2;t.strokePath({color:e.WHITE,path:new b(n,h).lineTo(n,r).moveTo(n,h).lineTo(o,h)}),t.strokePath({color:e.BLACK,path:new b(o,r).lineTo(n-s,r).moveTo(o,r).lineTo(o,h-s)})}else if(4===this.borderStyle)this.drawShadowBorder(t,e.BUTTON_LIGHTEST,e.BUTTON_DARKER,e.BUTTON_DARKER,e.BUTTON_LIGHTEST);else if(5===this.borderStyle)this.drawShadowBorder(t,e.BUTTON_DARKER,e.BUTTON_LIGHTEST,e.BUTTON_LIGHTEST,e.BUTTON_DARKER);else if(6===this.borderStyle)this.drawShadowBorder(t,e.BUTTON_DARKEST,e.BUTTON_DARKER,e.BUTTON,e.BUTTON_LIGHTEST);else if(7===this.borderStyle)this.drawShadowBorder(t,e.BUTTON_LIGHTEST,e.BUTTON_LIGHTEST,e.BUTTON_DARKEST,e.BUTTON_DARKER);else if(8===this.borderStyle)this.drawDashedBorder(t,[2*i,2*i]);else if(9===this.borderStyle)this.drawDashedBorder(t,[6*i,2*i]);else if(10===this.borderStyle)this.drawDashedBorder(t,[6*i,2*i,2*i,2*i]);else if(11===this.borderStyle)this.drawDashedBorder(t,[6*i,2*i,2*i,2*i,2*i,2*i]);else if(12===this.borderStyle)t.fillRect({x:this.holderX,y:this.holderY+1*i,width:this.holderWidth,height:16*i,color:this.borderColor}),t.fillText({x:this.holderX+1*i+3*i,y:this.holderY+1*i+8*i,baseline:"middle",align:"left",font:W.ARIAL_11.scale(i),color:e.BLACK,text:this.name}),t.strokeRect({x:this.holderX,y:this.holderY,width:this.holderWidth,height:this.holderHeight,color:e.BLACK,crispen:!0});else if(13===this.borderStyle){this.transparent||t.fillRect({x:this.holderX,y:this.holderY,width:this.holderWidth,height:this.holderHeight,color:this.backgroundColor}),t.fillText({x:this.holderX+16*i,y:this.holderY+8*i,baseline:"middle",align:"left",font:W.ARIAL_11.scale(i),color:this.borderColor,text:this.name});const e=t.measureText(this.name,W.ARIAL_11.scale(i)),s=1;let r=a(this.holderX+8*i,this.holderY+8*i,this.holderWidth-16*i-s,this.holderHeight-16*i-s,s);t.strokePath({color:this.backgroundColor.darker(),path:new b(r.x,r.y).lineTo(r.x+8*i,r.y).moveTo(r.x+8*i+e.width,r.y).lineTo(r.x+r.width,r.y).lineTo(r.x+r.width,r.y+r.height).lineTo(r.x,r.y+r.height).lineTo(r.x,r.y)}),r=a(this.holderX+8*i+s,this.holderY+8*i+s,this.holderWidth-16*i-s,this.holderHeight-16*i-s,s),t.strokePath({color:this.backgroundColor.brighter(),path:new b(r.x,r.y).lineTo(r.x+8*i-s,r.y).moveTo(r.x+8*i-s+e.width,r.y).lineTo(r.x+r.width,r.y).lineTo(r.x+r.width,r.y+r.height).lineTo(r.x,r.y+r.height).lineTo(r.x,r.y)})}else if(14===this.borderStyle){const e=a(this.holderX,this.holderY,this.holderWidth,this.holderHeight,this.borderWidth);this.fillRoundRectangleBackgroundBorder&&t.fillRect(Object.assign(Object.assign({},e),{rx:4*i,ry:4*i,color:this.backgroundColor})),this.borderWidth&&t.strokeRect(Object.assign(Object.assign({},e),{rx:4*i,ry:4*i,color:this.borderColor,lineWidth:this.borderWidth}))}else 15===this.borderStyle||console.warn(`Unsupported border style: ${this.borderStyle}`)}drawDecoration(i){var s,r,o;if(this.display.editMode)return;const{scale:h}=this;if(!this.pvName||this.pv&&!this.pv.disconnected)this.pv&&void 0===this.pv.value&&i.strokeRect(Object.assign(Object.assign({},this.bounds),{dash:[2*h,2*h],lineWidth:2*h,color:e.PINK,crispen:!0}));else{const t=1*h;i.fillRect({x:this.holderX-t/2,y:this.holderY-t/2,width:this.holderWidth+t,height:this.holderHeight+t,color:e.PURPLE,opacity:.4}),i.strokeRect({x:this.holderX-t/2,y:this.holderY-t/2,width:this.holderWidth+t,height:this.holderHeight+t,color:e.PURPLE})}if(this.borderAlarmSensitive){let n;8===this.borderStyle?n=[2*h,2*h]:9===this.borderStyle?n=[6*h,2*h]:10===this.borderStyle?n=[6*h,2*h,2*h,2*h]:11===this.borderStyle&&(n=[6*h,2*h,2*h,2*h,2*h,2*h]),(null===(s=this.pv)||void 0===s?void 0:s.severity)===t.AlarmSeverity.MAJOR?i.strokeRect(Object.assign(Object.assign({},this.bounds),{lineWidth:2*h,color:e.RED,crispen:!0,dash:n})):(null===(r=this.pv)||void 0===r?void 0:r.severity)===t.AlarmSeverity.MINOR?i.strokeRect(Object.assign(Object.assign({},this.bounds),{lineWidth:2*h,color:e.ORANGE,crispen:!0,dash:n})):(null===(o=this.pv)||void 0===o?void 0:o.severity)===t.AlarmSeverity.INVALID&&i.strokeRect(Object.assign(Object.assign({},this.bounds),{lineWidth:2*h,color:e.PINK,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()}closeMenu(){}get bounds(){return{x:this.holderX,y:this.holderY,width:this.holderWidth,height:this.holderHeight}}get unscaledBounds(){return{x:this.properties.getValue("x"),y:this.properties.getValue("y"),width:this.properties.getValue(ce),height:this.properties.getValue(Qt)}}get area(){return{x:this.x,y:this.y,width:this.width,height:this.height}}drawShadowBorder(t,e,i,s,r){const o=1*this.scale,h=this.holderY+o/2,n=this.holderX+o/2,a=this.holderY+this.holderHeight-o+o/2,l=this.holderX+this.holderWidth-o+o/2;t.strokePath({color:e,path:new b(l,a).lineTo(l,h).moveTo(l,a).lineTo(n,a)}),t.strokePath({color:i,path:new b(l-o,a-o).lineTo(l-o,h+o).moveTo(l-o,a-o).lineTo(n+o,a-o)}),t.strokePath({color:s,path:new b(n,h).lineTo(l-o,h).moveTo(n,h).lineTo(n,a-o)}),t.strokePath({color:r,path:new b(n+o,h+o).lineTo(l-o-o,h+o).moveTo(n+o,h+o).lineTo(n+o,a-o-o)})}drawDashedBorder(t,e){const i=a(this.holderX,this.holderY,this.holderWidth,this.holderHeight,this.borderWidth);t.strokePath({color:this.borderColor,lineWidth:this.borderWidth,dash:e,path:new b(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()})}executeAction(t){const e=this.actions.getAction(t);if(e)switch(e.type){case"OPEN_DISPLAY":const t={path:e.path,replace:0===e.mode};this.display.fireEvent("opendisplay",t);break;case"EXECUTE_JAVASCRIPT":if(e.embedded){new xt(this.display.instance,e.text).run()}else fetch(`${this.display.baseUrl}${e.path}`,{credentials:"same-origin"}).then((t=>{t.ok&&t.text().then((t=>{new xt(this.display.instance,t).run()}))}));break;case"WRITE_PV":if(e.pvName){const t=this.expandMacro(e.pvName);this.display.pvEngine.setValue(new Date,t,e.value)}break;case"PLAY_SOUND":if(e.path){new Audio(`${this.display.baseUrl}${e.path}`).play()}break;case"OPEN_WEBPAGE":e.hyperlink&&(window.location.href=e.hyperlink);break;default:throw new Error(`Unsupported command ${e.type}`)}}expandMacro(t){var e;if(-1===t.indexOf("$"))return t;for(const i of this.properties.all())if(i instanceof j){const s=this.properties.getProperty(i.pvPropertyName);let r="";const o=null==s?void 0:s.value;if(o){const t=this.display.getPV(o);r=null!==(e=null==t?void 0:t.value)&&void 0!==e?e:""}t=(t=t.replace(`$(${i.name})`,r)).replace(`\${${i.name}}`,r)}else t=(t=t.replace(`$(${i.name})`,i.value||"")).replace(`\${${i.name}}`,i.value||"");return this.parent?this.parent.expandContainerMacros(t):t}get pv(){if(this.pvName)return this.display.getPV(this.pvName)}isMinorSeverity(){var e;return(null===(e=this.pv)||void 0===e?void 0:e.severity)===t.AlarmSeverity.MINOR}isMajorSeverity(){var e;return(null===(e=this.pv)||void 0===e?void 0:e.severity)===t.AlarmSeverity.MAJOR}get alarm(){var e,i;return(null===(e=this.pv)||void 0===e?void 0:e.severity)===t.AlarmSeverity.MINOR||(null===(i=this.pv)||void 0===i?void 0:i.severity)===t.AlarmSeverity.MAJOR}get alarmSensitiveBackgroundColor(){if(this.backgroundAlarmSensitive){if(this.isMajorSeverity())return e.RED;if(this.isMinorSeverity())return e.ORANGE}return this.backgroundColor}get alarmSensitiveForegroundColor(){if(this.foregroundAlarmSensitive){if(this.isMajorSeverity())return e.RED;if(this.isMinorSeverity())return e.ORANGE}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){const i=this.display.measureAbsoluteArea(this);return this.display.copyCanvas(i).toDataURL(t,e)}get wuid(){return this.properties.getValue(pe)}get name(){return this.properties.getValue(te)}get holderX(){return this.scale*this.properties.getValue("x")}get holderY(){return this.scale*this.properties.getValue("y")}get holderWidth(){return this.scale*this.properties.getValue(ce)}get holderHeight(){return this.scale*this.properties.getValue(Qt)}get borderAlarmSensitive(){return this.properties.getValue(Ut)}get backgroundAlarmSensitive(){return this.properties.getValue(zt)}get foregroundAlarmSensitive(){return this.properties.getValue(Jt)}get pvName(){return this.properties.getValue(ee,!0)}get pvValue(){return this.properties.getValue(ie,!0)}get borderColor(){return this.properties.getValue(qt)}get borderStyle(){return this.properties.getValue(Xt)}get borderWidth(){return this.scale*this.properties.getValue(Yt)}get backgroundColor(){return this.properties.getValue(Gt)}get enabled(){return this.properties.getValue(Kt)}get foregroundColor(){return this.properties.getValue(Zt)}get tooltip(){const t=this.properties.getProperty(ne);if(t.rawValue)return this.expandMacro(t.rawValue)}get transparent(){return this.properties.getValue(ae)}get visible(){return this.properties.getValue(le)}get actions(){return this.properties.getValue($t)}get scripts(){return this.properties.getValue(oe)}get rules(){return this.properties.getValue(se)}get scaleOptions(){return this.properties.getValue(re)}get widgetType(){return this.properties.getValue(de,!0)}get text(){if(this.display.editMode){return(this.properties.getProperty(he).rawValue||"").split(" ").join(" ")}return this.properties.getValue(he).split(" ").join(" ")}init(){}hide(){}destroy(){}}const ue="font",me="push_action_index",xe="release_action_index",fe="toggle_button",we="image";class ye extends ge{constructor(t,e){super(t,e),this.pushed=!1,this.imageLoaded=!1,this.properties.add(new q(ue)),this.properties.add(new z(fe)),this.properties.add(new $(me)),this.properties.add(new $(xe)),this.properties.add(new D(we))}init(){if(this.image){this.imageElement=new Image,this.imageElement.onload=()=>{this.imageLoaded=!0,this.requestRepaint()};const t=this.display.getImageResolver();this.imageElement.src=t.resolve(this.image)}this.areaRegion={id:`${this.wuid}-area`,mouseDown:()=>{this.toggleButton||(this.pushed=!0,this.requestRepaint())},mouseOut:()=>{this.pushed=!1,this.requestRepaint()},mouseUp:()=>{this.toggleButton||(this.pushed=!1,this.requestRepaint())},click:()=>{this.executeAction(this.pushed?this.releaseActionIndex:this.pushActionIndex),this.toggleButton&&(this.pushed=!this.pushed)},tooltip:()=>this.tooltip,cursor:"pointer"}}draw(t){const i=t.ctx,{scale:s}=this;t.fillRect(Object.assign(Object.assign({},this.area),{color:this.backgroundColor}));t.addHitRegion(this.areaRegion).addRect(this.x,this.y,this.width,this.height);const r=1*s,o=this.holderY+r/2,h=this.holderX+r/2,n=this.holderY+this.holderHeight-r+r/2,a=this.holderX+this.holderWidth-r+r/2;t.strokePath({lineWidth:r,color:this.pushed?e.BUTTON_LIGHTEST:e.BLACK,path:new b(a,n).lineTo(a,o).moveTo(a,n).lineTo(h,n)}),t.strokePath({lineWidth:r,color:this.pushed?this.backgroundColor:e.BUTTON_DARKER,path:new b(a-r,n-r).lineTo(a-r,o+r).moveTo(a-r,n-r).lineTo(h+r,n-r)}),t.strokePath({lineWidth:r,color:this.pushed?e.BLACK:e.BUTTON_LIGHTEST,path:new b(h,o).lineTo(a-r,o).moveTo(h,o).lineTo(h,n-r)}),t.strokePath({lineWidth:r,color:this.pushed?e.BUTTON_DARKER:this.backgroundColor,path:new b(h+r,o+r).lineTo(a-r-r,o+r).moveTo(h+r,o+r).lineTo(h+r,n-r-r)});const l=this.text.split("\n");let d,c;if(i.fillStyle=this.foregroundColor.toString(),i.font=this.font.getFontString(),this.imageElement&&this.imageLoaded){const t=i.measureText(l[0]).width,e=this.font.height,r=this.imageElement.naturalHeight*s,o=this.imageElement.naturalWidth*s,h=(this.height-r)/e,n=5*s;if((this.width-o)/t>h){i.textBaseline="middle",i.textAlign="left",d=this.x+(this.width-t)/2+n,c=this.y+this.height/2;const e=this.x+(this.width-t)/2-o,s=this.y+(this.height-r)/2;i.drawImage(this.imageElement,e,s,o,r)}else{i.textAlign="center",i.textBaseline="top";const t=e+r;d=this.x+this.width/2,c=this.y+(this.height-t)/2+r;const s=this.x+(this.width-o)/2,h=this.y+(this.height-t)/2;i.drawImage(this.imageElement,s,h,o,r)}}else i.textBaseline="middle",i.textAlign="center",d=this.x+this.width/2,c=this.y+this.height/2;this.pushed&&(d+=1*s,c+=1*s),i.fillText(l[0],d,c)}get font(){return this.properties.getValue(ue).scale(this.scale)}get image(){return this.properties.getValue(we)}get toggleButton(){return this.properties.getValue(fe)}get pushActionIndex(){return this.properties.getValue(me)}get releaseActionIndex(){return this.properties.getValue(xe)}get backgroundColor(){const t=this.properties.getProperty("background_color");return t&&t.value!==e.TRANSPARENT?t.value:e.BUTTON}}const ve="data_type",be="effect_3d",Te="font",Se="off_color",Ve="off_label",Ae="off_state",_e="on_color",Le="on_label",Ce="on_state",Pe="push_action_index",Me="released_action_index",ke="show_led",Re="show_boolean_label",Ee="square_button",We="toggle_button";class Be extends ge{constructor(t,e){super(t,e),this.hovered=!1,this.manualToggleState=!1,this.properties.add(new $("bit")),this.properties.add(new $(ve)),this.properties.add(new z(Ee)),this.properties.add(new z(ke)),this.properties.add(new z(be)),this.properties.add(new U(_e)),this.properties.add(new D(Le)),this.properties.add(new D(Ce)),this.properties.add(new U(Se)),this.properties.add(new D(Ve)),this.properties.add(new D(Ae)),this.properties.add(new q(Te)),this.properties.add(new z(We)),this.properties.add(new $(Pe)),this.properties.add(new $(Me)),this.properties.add(new z(Re))}init(){this.areaRegion={id:`${this.wuid}-area`,mouseDown:()=>{this.toggleButton&&this.booleanValue?this.toggleOff():this.toggleOn(),this.requestRepaint()},mouseEnter:()=>{this.hovered=!0,this.requestRepaint()},mouseUp:()=>{this.booleanValue&&!this.toggleButton&&(this.toggleOff(),this.requestRepaint())},mouseOut:()=>{this.booleanValue&&!this.toggleButton&&this.toggleOff(),this.hovered=!1,this.requestRepaint()},tooltip:()=>this.tooltip,cursor:"pointer"}}toggleOn(){if(this.manualToggleState=!0,this.pv&&this.pv.writable)if(0===this.dataType)if(this.bit<0)this.display.pvEngine.setValue(new Date,this.pv.name,1);else{const t=this.pv.value|1<<this.bit;this.display.pvEngine.setValue(new Date,this.pv.name,t)}else this.display.pvEngine.setValue(new Date,this.pv.name,this.onState);this.executeAction(this.pushActionIndex)}toggleOff(){if(this.manualToggleState=!1,this.pv&&this.pv.writable)if(0===this.dataType)if(this.bit<0)this.display.pvEngine.setValue(new Date,this.pv.name,0);else{const t=this.pv.value&~(1<<this.bit);this.display.pvEngine.setValue(new Date,this.pv.name,t)}else this.display.pvEngine.setValue(new Date,this.pv.name,this.offState);void 0!==this.releaseActionIndex&&this.executeAction(this.releaseActionIndex)}get booleanValue(){var t,e;return this.pv&&void 0!==this.pv.value?0===this.dataType?this.bit<0?Boolean(null===(t=this.pv)||void 0===t?void 0:t.toNumber()):((null===(e=this.pv)||void 0===e?void 0:e.value)>>this.bit&1)>0:1===this.dataType&&this.pv.toString()===this.onState:this.manualToggleState}draw(t){const e=this.booleanValue;this.squareButton?this.drawSquare(t,e):this.drawEllipse(t,e),this.width>this.height?this.drawHorizontal(t,e):this.drawVertical(t,e),this.showBooleanLabel&&t.fillText({x:this.x+this.width/2,y:this.y+this.height/2,font:this.font,color:this.foregroundColor,align:"center",baseline:"middle",text:e?this.onLabel:this.offLabel})}drawSquare(t,i){t.fillRect({x:this.x,y:this.y,width:this.width,height:this.height,color:e.DARK_GRAY});t.addHitRegion(this.areaRegion).addRect(this.x,this.y,this.width,this.height);const s=2*this.scale,r=i?e.DARK_GRAY:e.WHITE,o=i?e.WHITE:e.DARK_GRAY;this.effect3d&&(t.fillPath({color:r,path:new b(this.x,this.y).lineTo(this.x,this.y+this.height).lineTo(this.x+s,this.y+this.height-s).lineTo(this.x+s,this.y+s).lineTo(this.x+this.width-s,this.y+s).lineTo(this.x+this.width,this.y).closePath()}),t.fillPath({color:o,path:new b(this.x,this.y+this.height).lineTo(this.x+this.width,this.y+this.height).lineTo(this.x+this.width,this.y).lineTo(this.x+this.width-s,this.y+s).lineTo(this.x+this.width-s,this.y+this.height-s).lineTo(this.x+s,this.y+this.height-s).closePath()}));let h=this.backgroundColor;this.hovered&&(h=this.backgroundColor.mixWith(e.WHITE,.5)),t.fillRect({x:this.x+s,y:this.y+s,width:this.width-s-s,height:this.height-s-s,color:h})}drawEllipse(t,i){const{scale:s}=this;if(this.effect3d){const r=this.width/2,o=this.height/2,h=Math.sqrt(r*r+o*o),n=this.x+r+(o-r-h)/2-1*s,a=this.y+o-(o-r+h)/2-1*s,l=this.x+r+(o-r+h)/2+5*s,d=this.y+o-(o-r-h)/2+5*s,c=t.createLinearGradient(n,a,l,d);i?(c.addColorStop(0,e.DARK_GRAY.toString()),c.addColorStop(1,e.WHITE.toString())):(c.addColorStop(0,e.WHITE.toString()),c.addColorStop(1,e.DARK_GRAY.toString())),t.ctx.fillStyle=c}else t.ctx.fillStyle=i?e.WHITE.toString():e.DARK_GRAY.toString();const r=this.x+this.width/2,o=this.y+this.height/2,h=this.width/2,n=this.height/2;t.ctx.beginPath(),t.ctx.ellipse(r,o,h,n,0,0,2*Math.PI),t.ctx.fill();t.addHitRegion(this.areaRegion).addEllipse(r,o,h,n,0,0,2*Math.PI),this.hovered?t.ctx.fillStyle=this.backgroundColor.mixWith(e.WHITE,.5).toString():t.ctx.fillStyle=this.backgroundColor.toString(),t.ctx.beginPath(),t.ctx.ellipse(r,o,h-2*s,n-2*s,0,0,2*Math.PI),t.ctx.fill()}drawHorizontal(t,e){const{scale:i}=this;if(this.showLed){let s;this.squareButton?(s=Math.floor(.3*(this.width+this.height)/2),s>Math.min(this.width,this.height)&&(s=Math.min(this.width,this.height)-2*i)):(s=Math.floor(.25*(this.width+this.height)/2),s>Math.min(this.width,this.height)&&(s=Math.min(this.width,this.height)-8*i));const r={x:Math.floor(this.x+.79999*this.width-s/2),y:Math.floor(this.y+this.height/2-s/2),width:s,height:s},o=r.x+r.width/2,h=r.y+r.height/2,n=r.width/2,a=r.height/2,l=e?this.onColor:this.offColor;if(t.fillEllipse({cx:o,cy:h,rx:n,ry:a,color:l}),this.effect3d){const e=t.createLinearGradient(r.x,r.y,r.x+r.width,r.y+r.height);e.addColorStop(0,"white"),e.addColorStop(1,l.withAlpha(0).toString()),t.ctx.beginPath(),t.ctx.ellipse(o,h,n,a,0,0,2*Math.PI),t.ctx.fillStyle=e,t.ctx.fill()}}}drawVertical(t,i){const{scale:s}=this;if(this.showLed){let r;this.squareButton?(r=Math.floor(.3*(this.width+this.height)/2),r>Math.min(this.width,this.height)&&(r=Math.min(this.width,this.height)-2*s)):(r=Math.floor(.25*(this.width+this.height)/2),r>Math.min(this.width,this.height)&&(r=Math.min(this.width,this.height)-8*s));const o={x:Math.floor(this.x+this.width/2-r/2),y:Math.floor(this.y+(1-.79999)*this.height-r/2),width:r,height:r},h=i?this.onColor:this.offColor,n=o.x+o.width/2,a=o.y+o.height/2,l=o.width/2,d=o.height/2;if(t.fillEllipse({cx:n,cy:a,rx:l,ry:d,color:h}),this.effect3d){const i=t.createLinearGradient(o.x,o.y,o.x+o.width,o.y+o.height);i.addColorStop(0,e.WHITE.toString()),i.addColorStop(1,h.withAlpha(0).toString()),t.ctx.beginPath(),t.ctx.ellipse(n,a,l,d,0,0,2*Math.PI),t.ctx.fillStyle=i,t.ctx.fill()}}}get bit(){return this.properties.getValue("bit")}get dataType(){return this.properties.getValue(ve)}get toggleButton(){return this.properties.getValue(We)}get pushActionIndex(){return this.properties.getValue(Pe)}get releaseActionIndex(){return this.properties.getValue(Me)}get squareButton(){return this.properties.getValue(Ee)}get showLed(){return this.properties.getValue(ke)}get showBooleanLabel(){return this.properties.getValue(Re)}get effect3d(){return this.properties.getValue(be)}get onColor(){return this.properties.getValue(_e)}get onLabel(){return this.properties.getValue(Le)}get onState(){return this.properties.getValue(Ce)}get offColor(){return this.properties.getValue(Se)}get offLabel(){return this.properties.getValue(Ve)}get offState(){return this.properties.getValue(Ae)}get font(){return this.properties.getValue(Te).scale(this.scale)}}const Ie="data_type",Oe="effect_3d",He="off_color",Fe="off_label",Ne="off_state",De="on_color",je="on_label",$e="on_state",Ge="push_action_index",ze="released_action_index",Ue="toggle_button";class qe extends ge{constructor(t,e){super(t,e),this.manualToggleState=!1,this.properties.add(new $("bit")),this.properties.add(new $(Ie)),this.properties.add(new z(Oe)),this.properties.add(new U(De)),this.properties.add(new D(je)),this.properties.add(new D($e)),this.properties.add(new U(He)),this.properties.add(new D(Fe)),this.properties.add(new D(Ne)),this.properties.add(new $(Ge)),this.properties.add(new $(ze)),this.properties.add(new z(Ue))}init(){this.shaftRegion={id:`${this.wuid}-shaft`,mouseDown:()=>{this.toggleButton&&this.booleanValue?this.toggleOff():this.toggleOn(),this.requestRepaint()},mouseUp:()=>{this.booleanValue&&!this.toggleButton&&(this.toggleOff(),this.requestRepaint())},mouseOut:()=>{this.booleanValue&&!this.toggleButton&&(this.toggleOff(),this.requestRepaint())},tooltip:()=>this.tooltip,cursor:"pointer"}}toggleOn(){if(this.manualToggleState=!0,this.pv&&this.pv.writable)if(0===this.dataType)if(this.bit<0)this.display.pvEngine.setValue(new Date,this.pv.name,1);else{const t=this.pv.value|1<<this.bit;this.display.pvEngine.setValue(new Date,this.pv.name,t)}else this.display.pvEngine.setValue(new Date,this.pv.name,this.onState);this.executeAction(this.pushActionIndex)}toggleOff(){if(this.manualToggleState=!1,this.pv&&this.pv.writable)if(0===this.dataType)if(this.bit<0)this.display.pvEngine.setValue(new Date,this.pv.name,0);else{const t=this.pv.value&~(1<<this.bit);this.display.pvEngine.setValue(new Date,this.pv.name,t)}else this.display.pvEngine.setValue(new Date,this.pv.name,this.offState);void 0!==this.releaseActionIndex&&this.executeAction(this.releaseActionIndex)}get booleanValue(){var t,e;return this.pv&&void 0!==this.pv.value?0===this.dataType?this.bit<0?Boolean(null===(t=this.pv)||void 0===t?void 0:t.toNumber()):((null===(e=this.pv)||void 0===e?void 0:e.value)>>this.bit&1)>0:1===this.dataType&&this.pv.toString()===this.onState:this.manualToggleState}draw(t){const e=this.booleanValue;this.width>this.height?this.drawHorizontal(t,e):this.drawVertical(t,e)}drawHorizontal(t,e){let i=this.width,s=this.height;s>i/2?s=Math.floor(this.width/2):i=Math.floor(2*this.height);const r={x:Math.floor(63/218*i),y:0,width:s/2,height:s/2};this.drawPedestal(t,r,e);const o=Math.floor(35/218*i),h=Math.floor(45/105*s),n=Math.floor(43/218*i),a=Math.floor(35/105*s),l=Math.floor(1/7*r.width);if(e){const e={x:2*r.x+r.width-o,y:r.height/2-h/2,width:o,height:h},i={x:r.x+r.width/2-n/2+l,y:r.y+r.height/2-a/2,width:n,height:a};this.drawHorizontalBar(t,i,e,!0)}else{const e={x:0,y:r.height/2-h/2,width:o,height:h},i={x:r.x+r.width/2-n/2-l,y:r.y+r.height/2-a/2,width:n,height:a};this.drawHorizontalBar(t,i,e,!1)}}drawVertical(t,e){let i=this.width,s=this.height;i>s/2?i=Math.floor(this.height/2):s=Math.floor(2*this.width);const r={x:0,y:Math.floor(63/218*s),width:i/2,height:i/2};this.drawPedestal(t,r,e);const o=Math.floor(45/105*i),h=Math.floor(35/218*s),n=Math.floor(35/105*i),a=Math.floor(43/218*s);if(e){const e={x:r.width/2-o/2,y:0,width:o,height:h},i={x:r.x+r.width/2-n/2,y:r.y+r.height/2-a/2,width:n,height:a};i.y-=Math.floor(1/7*r.height),this.drawVerticalBar(t,i,e,!0)}else{const e=r.y+r.height/2+a/2+2*this.scale,i={x:r.width/2-o/2,y:r.y+r.height/2-a/2+e-h,width:o,height:h},s={x:r.x+r.width/2-n/2,y:r.y+r.height/2-a/2,width:n,height:a};s.y+=Math.floor(1/7*r.height),this.drawVerticalBar(t,s,i,!1)}}drawPedestal(t,i,s){let r=this.x+i.x+i.width/2,o=this.y+i.y+i.height/2,h=i.width/2,n=i.height/2;if(t.ctx.fillStyle=this.effect3d?e.WHITE.toString():e.GRAY.toString(),t.ctx.beginPath(),t.ctx.ellipse(r,o,h,n,0,0,2*Math.PI),t.ctx.fill(),this.effect3d){const e=t.createLinearGradient(this.x+i.x,this.y+i.y,this.x+i.x+i.width,this.y+i.y+i.height);s?(e.addColorStop(0,`rgba(255,255,255,${10/255})`),e.addColorStop(1,`rgba(0,0,0,${100/255})`)):(e.addColorStop(0,"rgba(0,0,0,0)"),e.addColorStop(1,`rgba(0,0,0,${150/255})`)),t.ctx.fillStyle=e,t.ctx.fill()}}drawHorizontalBar(t,e,i,s){let r=(s?0:10)/255,o=(s?150:220)/255;const h=t.createLinearGradient(this.x+i.x,this.y+i.y,this.x+i.x,this.y+i.y+i.height);h.addColorStop(0,`rgba(0,0,0,${r})`),h.addColorStop(1,`rgba(0,0,0,${o})`);const n=t.addHitRegion(this.shaftRegion);let a=this.x+e.x+e.width/2,l=this.y+e.y+e.height/2,d=e.width/2,c=e.height/2;t.ctx.beginPath(),t.ctx.ellipse(a,l,d,c,0,0,2*Math.PI),n.addEllipse(a,l,d,c,0,0,2*Math.PI),t.ctx.fillStyle=s?this.onColor.toString():this.offColor.toString(),t.ctx.fill(),this.effect3d&&(t.ctx.fillStyle=h,t.ctx.fill());const p=[Math.round(this.x+i.x+i.width/2),Math.round(this.y+i.y),Math.round(this.x+i.x+i.width/2),Math.round(this.y+i.y+i.height),Math.round(this.x+e.x+e.width/2),Math.round(this.y+e.y+e.height),Math.round(this.x+e.x+e.width/2),Math.round(this.y+e.y)];if(t.ctx.beginPath(),t.ctx.moveTo(p[0],p[1]),t.ctx.lineTo(p[2],p[3]),t.ctx.lineTo(p[4],p[5]),t.ctx.lineTo(p[6],p[7]),t.ctx.closePath(),n.addPath(new b(p[0],p[1]).lineTo(p[2],p[3]).lineTo(p[4],p[5]).lineTo(p[6],p[7]).closePath()),t.ctx.fillStyle=s?this.onColor.toString():this.offColor.toString(),t.ctx.fill(),this.effect3d&&(t.ctx.fillStyle=h,t.ctx.fill()),a=this.x+i.x+i.width/2,l=this.y+i.y+i.height/2,d=i.width/2,c=i.height/2,t.ctx.beginPath(),t.ctx.ellipse(a,l,d,c,0,0,2*Math.PI),n.addEllipse(a,l,d,c,0,0,2*Math.PI),t.ctx.fillStyle=s?this.onColor.toString():this.offColor.toString(),t.ctx.fill(),this.effect3d){const{scale:e}=this,s=Math.sqrt(d*d+c*c),h=c-d,n=this.x+i.x+d+(h-s)/2-1*e,a=this.x+i.y+c-(h+s)/2-1*e,l=this.x+i.x+d+(h+s)/2+5*e,p=this.x+i.y+c-(h-s)/2+5*e,g=t.createLinearGradient(n,a,l,p);g.addColorStop(0,`rgba(0,0,0,${r})`),g.addColorStop(1,`rgba(0,0,0,${o})`),t.ctx.fillStyle=g,t.ctx.fill()}}drawVerticalBar(t,e,i,s){const r=t.createLinearGradient(this.x+i.x,this.y+i.y,this.x+i.x+i.width,this.y+i.y);r.addColorStop(0,`rgba(0,0,0,${10/255})`),r.addColorStop(1,`rgba(0,0,0,${s?210/255:160/255})`);const o=t.addHitRegion(this.shaftRegion);let h=this.x+e.x+e.width/2,n=this.y+e.y+e.height/2;t.ctx.beginPath(),t.ctx.ellipse(h,n,e.width/2,e.height/2,0,0,2*Math.PI),o.addEllipse(h,n,e.width/2,e.height/2,0,0,2*Math.PI),t.ctx.fillStyle=s?this.onColor.toString():this.offColor.toString(),t.ctx.fill(),this.effect3d&&(t.ctx.fillStyle=r,t.ctx.fill());const a=[Math.round(this.x+i.x),Math.round(this.y+i.y+i.height/2),Math.round(this.x+i.x+i.width),Math.round(this.y+i.y+i.height/2),Math.round(this.x+e.x+e.width),Math.round(this.y+e.y+e.height/2),Math.round(this.x+e.x),Math.round(this.y+e.y+e.height/2)];t.ctx.beginPath(),t.ctx.moveTo(a[0],a[1]),t.ctx.lineTo(a[2],a[3]),t.ctx.lineTo(a[4],a[5]),t.ctx.lineTo(a[6],a[7]),t.ctx.closePath(),o.addPath(new b(a[0],a[1]).lineTo(a[2],a[3]).lineTo(a[4],a[5]).lineTo(a[6],a[7]).closePath()),t.ctx.fillStyle=s?this.onColor.toString():this.offColor.toString(),t.ctx.fill(),this.effect3d&&(t.ctx.fillStyle=r,t.ctx.fill()),h=this.x+i.x+i.width/2,n=this.y+i.y+i.height/2;const l=i.width/2,d=i.height/2;if(t.ctx.beginPath(),t.ctx.ellipse(h,n,l,d,0,0,2*Math.PI),o.addEllipse(h,n,l,d,0,0,2*Math.PI),t.ctx.fillStyle=s?this.onColor.toString():this.offColor.toString(),t.ctx.fill(),this.effect3d){const e=t.createLinearGradient(this.x+i.x,this.y+i.y,this.x+i.width,this.y+i.height);e.addColorStop(0,`rgba(0,0,0,${(s?5:10)/255})`),e.addColorStop(1,`rgba(0,0,0,${(s?180:160)/255})`),t.ctx.fillStyle=e,t.ctx.fill()}}get bit(){return this.properties.getValue("bit")}get dataType(){return this.properties.getValue(Ie)}get toggleButton(){return this.properties.getValue(Ue)}get pushActionIndex(){return this.properties.getValue(Ge)}get releaseActionIndex(){return this.properties.getValue(ze)}get effect3d(){return this.properties.getValue(Oe)}get onColor(){return this.properties.getValue(De)}get onLabel(){return this.properties.getValue(je)}get onState(){return this.properties.getValue($e)}get offColor(){return this.properties.getValue(He)}get offLabel(){return this.properties.getValue(Fe)}get offState(){return this.properties.getValue(Ne)}}const Ye="enabled",Xe="font",Ke="label",Ze="selected_color",Je=new e(130,130,130),Qe=new e(94,151,230);class ti extends ge{constructor(t,i){super(t,i),this.hovered=!1,this.manualToggleState=!1,this.properties.add(new $("bit")),this.properties.add(new z(Ye)),this.properties.add(new q(Xe)),this.properties.add(new D(Ke)),this.properties.add(new U(Ze,new e(64,64,64)))}init(){this.areaRegion={id:`${this.wuid}-area`,mouseDown:()=>{this.booleanValue?this.toggleOff():this.toggleOn(),this.requestRepaint()},mouseEnter:()=>{this.hovered=!0,this.requestRepaint()},mouseOut:()=>{this.hovered=!1,this.requestRepaint()},tooltip:()=>this.tooltip,cursor:"pointer"}}toggleOn(){if(this.manualToggleState=!0,this.pv&&this.pv.writable)if(this.bit<0)this.display.pvEngine.setValue(new Date,this.pv.name,1);else{const t=this.pv.value|1<<this.bit;this.display.pvEngine.setValue(new Date,this.pv.name,t)}}toggleOff(){if(this.manualToggleState=!1,this.pv&&this.pv.writable)if(this.bit<0)this.display.pvEngine.setValue(new Date,this.pv.name,0);else{const t=this.pv.value&~(1<<this.bit);this.display.pvEngine.setValue(new Date,this.pv.name,t)}}get booleanValue(){var t,e;return this.pv&&void 0!==this.pv.value?this.bit<0?Boolean(null===(t=this.pv)||void 0===t?void 0:t.toNumber()):((null===(e=this.pv)||void 0===e?void 0:e.value)>>this.bit&1)>0:this.manualToggleState}draw(t){t.addHitRegion(this.areaRegion).addRect(this.x,this.y,this.width,this.height);const i=this.booleanValue,{boxSize:s,gap:r,scale:o}=this;let h=this.backgroundColor;this.hovered&&(h=h.mixWith(Qe,.7));const n={x:this.x,y:this.y+this.height/2-s/2,width:s,height:s},a=t.createLinearGradient(n.x,n.y+1*o,n.x,n.y+n.height);a.addColorStop(0,e.WHITE.toString()),a.addColorStop(1,h.toString()),t.fillRect(Object.assign(Object.assign({},n),{rx:2*o,ry:2*o,gradient:a})),t.strokeRect({x:n.x+.5*o,y:n.y+.5*o,width:n.width-1*o,height:n.height-1*o,rx:2*o,ry:2*o,color:Je}),i&&t.strokePath({lineWidth:3*o,color:this.selectedColor,path:new b(n.x+3*o,n.y+Math.floor(.45*s)).lineTo(n.x+Math.floor(.45*s),n.y+3*s/4-1*o).lineTo(n.x+s-2*o,n.y+3*o)}),this.enabled?t.fillText({x:n.x+n.width+r,y:n.y+n.height/2,align:"left",baseline:"middle",color:this.foregroundColor,font:this.font,text:this.label}):(t.fillText({x:n.x+n.width+r+1*o,y:n.y+n.height/2+1*o,align:"left",baseline:"middle",color:e.BUTTON_LIGHTEST,font:this.font,text:this.label}),t.fillText({x:n.x+n.width+r,y:n.y+n.height/2,align:"left",baseline:"middle",color:e.BUTTON_DARKER,font:this.font,text:this.label}))}get boxSize(){return 16*this.scale}get gap(){return 4*this.scale}get bit(){return this.properties.getValue("bit")}get enabled(){return this.properties.getValue(Ye)}get selectedColor(){return this.properties.getValue(Ze)}get font(){return this.properties.getValue(Xe).scale(this.scale)}get label(){return this.properties.getValue(Ke)}}const ei="enabled",ii="font",si="horizontal",ri="items",oi="items_from_pv",hi="selected_color";class ni extends ge{constructor(t,e){super(t,e),this.itemRegions=[],this.properties.add(new z(ei)),this.properties.add(new q(ii)),this.properties.add(new z(si)),this.properties.add(new Q(ri,[])),this.properties.add(new z(oi)),this.properties.add(new U(hi))}init(){for(let t=0;t<this.items.length;t++)this.itemRegions.push({id:`${this.wuid}-item-${t}`,cursor:"pointer",mouseDown:()=>{this.pushedItem=t,this.requestRepaint()},mouseOut:()=>{this.pushedItem=void 0,this.requestRepaint()},mouseUp:()=>{this.pushedItem=void 0,this.requestRepaint()},click:()=>{this.writeValue(this.items[t]),this.requestRepaint()},tooltip:()=>this.tooltip})}draw(t){this.horizontal?this.drawHorizontal(t):this.drawVertical(t)}drawHorizontal(t){const e=this.area.width/this.items.length;let i=this.area.x;for(let s=0;s<this.items.length;s++){const r={x:i,y:this.area.y,width:e,height:this.area.height};i+=e,this.drawButton(t,r,s)}}drawVertical(t){const e=this.area.height/this.items.length;let i=this.area.y;for(let s=0;s<this.items.length;s++){const r={x:Math.round(this.area.x),y:Math.round(i),width:Math.round(this.area.width),height:Math.round(e)};i+=e,this.drawButton(t,r,s)}}drawButton(t,i,s){var r;const o=(null===(r=this.pv)||void 0===r?void 0:r.value)===this.items[s],h=o||s===this.pushedItem;t.fillRect(Object.assign(Object.assign({},i),{color:o?this.selectedColor:this.backgroundColor}));t.addHitRegion(this.itemRegions[s]).addRect(i.x,i.y,i.width,i.height);const n=1*this.scale,a=i.y+n/2,l=i.x+n/2,d=i.y+i.height-n+n/2,c=i.x+i.width-n+n/2;t.strokePath({lineWidth:n,color:h?e.BUTTON_LIGHTEST:e.BLACK,path:new b(c,d).lineTo(c,a).moveTo(c,d).lineTo(l,d)}),t.strokePath({lineWidth:n,color:h?this.backgroundColor:e.BUTTON_DARKER,path:new b(c-n,d-n).lineTo(c-n,a+n).moveTo(c-n,d-n).lineTo(l+n,d-n)}),t.strokePath({lineWidth:n,color:h?e.BLACK:e.BUTTON_LIGHTEST,path:new b(l,a).lineTo(c-n,a).moveTo(l,a).lineTo(l,d-n)}),t.strokePath({lineWidth:n,color:h?e.BUTTON_DARKER:this.backgroundColor,path:new b(l+n,a+n).lineTo(c-n-n,a+n).moveTo(l+n,a+n).lineTo(l+n,d-n-n)}),t.fillText({x:i.x+i.width/2,y:i.y+i.height/2,text:this.items[s],align:"center",baseline:"middle",color:this.foregroundColor,font:this.font})}writeValue(t){this.pv&&this.pv.writable&&this.display.pvEngine.setValue(new Date,this.pv.name,t)}get enabled(){return this.properties.getValue(ei)}get font(){return this.properties.getValue(ii).scale(this.scale)}get horizontal(){return this.properties.getValue(si)}get items(){return this.properties.getValue(ri)}get itemsFromPV(){return this.properties.getValue(oi)}get selectedColor(){return this.properties.getValue(hi)}}const ai="enabled",li="font",di="items",ci="items_from_pv",pi=new e(240,240,240);class gi extends ge{constructor(t,e){super(t,e),this.listVisible=!1,this.itemRegions=[],this.properties.add(new z(ai)),this.properties.add(new q(li)),this.properties.add(new Q(di,[])),this.properties.add(new z(ci))}init(){this.areaRegion={id:`${this.wuid}-area`,click:()=>{const t=this.listVisible;this.display.closeMenu(),this.items.length&&!t&&(this.listVisible=!0,this.hoveredItem=0,this.requestRepaint())},tooltip:()=>this.tooltip};for(let t=0;t<this.items.length;t++)this.itemRegions.push({id:`${this.wuid}-item-${t}`,click:()=>{this.writeValue(this.items[t]),this.listVisible=!1,this.hoveredItem=void 0,this.requestRepaint()},mouseEnter:()=>{this.hoveredItem=t,this.requestRepaint()},mouseOut:()=>{this.hoveredItem=void 0,this.requestRepaint()},tooltip:()=>this.tooltip})}draw(t){var e,i;let s=d(this.bounds,2*this.scale);t.fillRect(Object.assign(Object.assign({},s),{color:this.backgroundColor})),t.strokeRect(Object.assign(Object.assign({},s),{color:pi,crispen:!0}));t.addHitRegion(this.areaRegion).addRect(s.x,s.y,s.width,s.height),(null===(e=this.pv)||void 0===e?void 0:e.value)&&-1!==this.items.indexOf(this.pv.value)&&t.fillText({x:5*this.scale+s.x,y:s.y+s.height/2,align:"left",baseline:"middle",color:this.foregroundColor,font:this.font,text:null===(i=this.pv)||void 0===i?void 0:i.value});const{selectorWidth:r}=this,o=Math.min(s.height,r/2),h={x:s.x+s.width-r-5*this.scale+r/2,y:s.y+(s.height-o)/2+o};t.fillPath({color:this.foregroundColor,path:new b(h.x,h.y).lineTo(h.x-o,h.y-o).lineTo(h.x+o,h.y-o).closePath()})}closeMenu(){this.listVisible=!1,this.requestRepaint()}drawOverlay(t){if(!this.listVisible||!this.items.length)return;let i=0,s=0;for(const e of this.items){const r=t.measureText(e,this.font);i=Math.max(i,r.width),s=Math.max(s,r.height)}const{scale:r}=this,o=5*r,h=o+s+o,n={x:this.bounds.x+5*r,y:this.bounds.y+this.bounds.height-5*r,width:o+i+o,height:h*this.items.length+2*r+2*r};t.fillRect(Object.assign(Object.assign({},n),{color:this.backgroundColor}));for(let i=0;i<this.items.length;i++){const s={x:n.x,y:n.y+2*r+i*h,width:n.width,height:h};t.addHitRegion(this.itemRegions[i]).addRect(s.x,s.y,s.width,s.height),i===this.hoveredItem&&t.fillRect(Object.assign(Object.assign({},s),{color:e.LIGHT_BLUE}))}t.strokeRect(Object.assign(Object.assign({},n),{color:pi,lineWidth:1*r,crispen:!0}));for(let e=0;e<this.items.length;e++)t.fillText({x:n.x+o,y:n.y+2*r+e*h+h/2,font:this.font,color:this.foregroundColor,align:"left",baseline:"middle",text:this.items[e]})}writeValue(t){this.pv&&this.pv.writable&&this.display.pvEngine.setValue(new Date,this.pv.name,t)}get selectorWidth(){return 8*this.scale}get enabled(){return this.properties.getValue(ai)}get font(){return this.properties.getValue(li).scale(this.scale)}get items(){return this.properties.getValue(di)}get itemsFromPV(){return this.properties.getValue(ci)}}const ui="data_type",mi="effect_3d",xi="font",fi="off_image",wi="off_label",yi="off_state",vi="on_image",bi="on_label",Ti="on_state",Si="push_action_index",Vi="released_action_index",Ai="show_boolean_label",_i="toggle_button";class Li extends ge{constructor(t,e){super(t,e),this.onImageLoaded=!1,this.offImageLoaded=!1,this.manualToggleState=!1,this.properties.add(new $("bit")),this.properties.add(new $(ui)),this.properties.add(new z(mi)),this.properties.add(new D(vi)),this.properties.add(new D(bi)),this.properties.add(new D(Ti)),this.properties.add(new D(fi)),this.properties.add(new D(wi)),this.properties.add(new D(yi)),this.properties.add(new q(xi)),this.properties.add(new z(_i)),this.properties.add(new $(Si)),this.properties.add(new $(Vi)),this.properties.add(new z(Ai))}init(){if(this.onImageElement=new Image,this.onImageElement.onload=()=>{this.onImageLoaded=!0,this.requestRepaint()},this.offImageElement=new Image,this.offImageElement.onload=()=>{this.offImageLoaded=!0,this.requestRepaint()},this.onImage){const t=this.display.getImageResolver();this.onImageElement.src=t.resolve(this.onImage)}if(this.offImage){const t=this.display.getImageResolver();this.offImageElement.src=t.resolve(this.offImage)}this.areaRegion={id:`${this.wuid}-area`,mouseDown:()=>{this.toggleButton&&this.booleanValue?this.toggleOff():this.toggleOn(),this.requestRepaint()},mouseUp:()=>{this.booleanValue&&!this.toggleButton&&(this.toggleOff(),this.requestRepaint())},mouseOut:()=>{this.booleanValue&&!this.toggleButton&&(this.toggleOff(),this.requestRepaint())},tooltip:()=>this.tooltip,cursor:"pointer"}}toggleOn(){if(this.manualToggleState=!0,this.pv&&this.pv.writable)if(0===this.dataType)if(this.bit<0)this.display.pvEngine.setValue(new Date,this.pv.name,1);else{const t=this.pv.value|1<<this.bit;this.display.pvEngine.setValue(new Date,this.pv.name,t)}else this.display.pvEngine.setValue(new Date,this.pv.name,this.onState);this.executeAction(this.pushActionIndex)}toggleOff(){if(this.manualToggleState=!1,this.pv&&this.pv.writable)if(0===this.dataType)if(this.bit<0)this.display.pvEngine.setValue(new Date,this.pv.name,0);else{const t=this.pv.value&~(1<<this.bit);this.display.pvEngine.setValue(new Date,this.pv.name,t)}else this.display.pvEngine.setValue(new Date,this.pv.name,this.offState);void 0!==this.releaseActionIndex&&this.executeAction(this.releaseActionIndex)}get booleanValue(){var t,e;return this.pv&&void 0!==this.pv.value?0===this.dataType?this.bit<0?Boolean(null===(t=this.pv)||void 0===t?void 0:t.toNumber()):((null===(e=this.pv)||void 0===e?void 0:e.value)>>this.bit&1)>0:1===this.dataType&&this.pv.toString()===this.onState:this.manualToggleState}draw(t){let e=this.bounds;this.borderAlarmSensitive&&(e=d(e,2*this.scale,2*this.scale));const i=this.booleanValue;i?this.onImageLoaded&&t.ctx.drawImage(this.onImageElement,e.x,e.y,e.width,e.height):this.offImageLoaded&&t.ctx.drawImage(this.offImageElement,e.x,e.y,e.width,e.height);t.addHitRegion(this.areaRegion).addRect(e.x,e.y,e.width,e.height),this.showBooleanLabel&&t.fillText({x:this.x+this.width/2,y:this.y+this.height/2,font:this.font,color:this.foregroundColor,align:"center",baseline:"middle",text:i?this.onLabel:this.offLabel})}get bit(){return this.properties.getValue("bit")}get dataType(){return this.properties.getValue(ui)}get toggleButton(){return this.properties.getValue(_i)}get pushActionIndex(){return this.properties.getValue(Si)}get releaseActionIndex(){return this.properties.getValue(Vi)}get showBooleanLabel(){return this.properties.getValue(Ai)}get effect3d(){return this.properties.getValue(mi)}get onImage(){return this.properties.getValue(vi)}get onLabel(){return this.properties.getValue(bi)}get onState(){return this.properties.getValue(Ti)}get offImage(){return this.properties.getValue(fi)}get offLabel(){return this.properties.getValue(wi)}get offState(){return this.properties.getValue(yi)}get font(){return this.properties.getValue(xi).scale(this.scale)}}class Ci extends ye{}const Pi="enabled",Mi="font",ki="horizontal",Ri="items",Ei="items_from_pv",Wi="selected_color",Bi=new e(120,120,120),Ii=new e(94,151,230);class Oi extends ge{constructor(t,e){super(t,e),this.itemRegions=[],this.properties.add(new z(Pi)),this.properties.add(new q(Mi)),this.properties.add(new z(ki)),this.properties.add(new Q(Ri,[])),this.properties.add(new z(Ei)),this.properties.add(new U(Wi))}init(){for(let t=0;t<this.items.length;t++)this.itemRegions.push({id:`${this.wuid}-item-${t}`,cursor:"pointer",click:()=>{this.writeValue(this.items[t]),this.requestRepaint()},mouseEnter:()=>{this.hoveredItem=t,this.requestRepaint()},mouseOut:()=>{this.hoveredItem=void 0,this.requestRepaint()},tooltip:()=>this.tooltip})}draw(t){this.horizontal?this.drawHorizontal(t):this.drawVertical(t)}drawHorizontal(t){const e=this.area.width/this.items.length;let i=this.area.x;for(let s=0;s<this.items.length;s++){const r={x:i,y:this.area.y,width:e,height:this.area.height};i+=e,this.drawRadio(t,r,s)}}drawVertical(t){const e=this.area.height/this.items.length;let i=this.area.y;for(let s=0;s<this.items.length;s++){const r={x:this.area.x,y:i,width:this.area.width,height:e};i+=e,this.drawRadio(t,r,s)}}drawRadio(t,i,s){var r;const{radioRadius:o,dotRadius:h,gap:n}=this;let a=this.backgroundColor;s===this.hoveredItem&&(a=a.mixWith(Ii,.7));const l=t.createLinearGradient(i.x,i.y,i.x+i.width,i.y+i.height);l.addColorStop(0,e.WHITE.toString()),l.addColorStop(1,a.toString()),t.fillEllipse({cx:i.x+o,cy:i.y+i.height/2,rx:o,ry:o,gradient:l});const d=1*this.scale;t.strokeEllipse({cx:i.x+o,cy:i.y+i.height/2,rx:o,ry:o,color:Bi,lineWidth:d}),(null===(r=this.pv)||void 0===r?void 0:r.value)===this.items[s]&&t.fillEllipse({cx:i.x+o,cy:i.y+i.height/2,rx:h+d/2,ry:h+d/2,color:this.selectedColor});t.addHitRegion(this.itemRegions[s]).addRect(i.x,i.y,i.width,i.height),t.fillText({x:i.x+o+o+n,y:i.y+i.height/2,text:this.items[s],align:"left",baseline:"middle",color:this.foregroundColor,font:this.font})}writeValue(t){this.pv&&this.pv.writable&&this.display.pvEngine.setValue(new Date,this.pv.name,t)}get radioRadius(){return 7*this.scale}get dotRadius(){return 2*this.scale}get gap(){return 4*this.scale}get enabled(){return this.properties.getValue(Pi)}get font(){return this.properties.getValue(Mi).scale(this.scale)}get horizontal(){return this.properties.getValue(ki)}get items(){return this.properties.getValue(Ri)}get itemsFromPV(){return this.properties.getValue(Ei)}get selectedColor(){return this.properties.getValue(Wi)}}const Hi="enabled",Fi="font",Ni="maximum",Di="minimum",ji="horizontal",$i="step_increment",Gi="page_increment",zi="bar_length",Ui="show_value_tip",qi=new e(243,243,243),Yi=new e(232,232,231),Xi=150;class Ki extends ge{constructor(t,e){super(t,e),this.decreasePressed=!1,this.increasePressed=!1,this.pageDecreasePressed=!1,this.pageIncreasePressed=!1,this.properties.add(new z(Hi)),this.properties.add(new z(ji)),this.properties.add(new z(Ui)),this.properties.add(new q(Fi)),this.properties.add(new G(Ni)),this.properties.add(new G(Di)),this.properties.add(new G($i)),this.properties.add(new G(Gi)),this.properties.add(new G(zi))}init(){this.decreaseRegion={id:`${this.wuid}-decrease`,mouseDown:()=>{this.decreasePressed=!0,this.stepDecreaseRepeatedly()},mouseUp:()=>{window.clearTimeout(this.actionTimeout),this.decreasePressed=!1,this.requestRepaint()},mouseOut:()=>{window.clearTimeout(this.actionTimeout),this.decreasePressed=!1,this.requestRepaint()},tooltip:()=>this.tooltip},this.increaseRegion={id:`${this.wuid}-increase`,mouseDown:()=>{this.increasePressed=!0,this.stepIncreaseRepeatedly()},mouseUp:()=>{window.clearTimeout(this.actionTimeout),this.increasePressed=!1,this.requestRepaint()},mouseOut:()=>{window.clearTimeout(this.actionTimeout),this.increasePressed=!1,this.requestRepaint()},tooltip:()=>this.tooltip},this.thumbRegion={id:`${this.wuid}-thumb`,mouseDown:()=>{this.grabStartValue=this.getCoercedValue()},grab:t=>{const e=this.horizontal?t.dx:t.dy,i=(this.maximum-this.minimum)*e/this.dragRange;this.setCoercedValue(this.grabStartValue+i),this.requestRepaint()},tooltip:()=>this.tooltip},this.pageDecreaseRegion={id:`${this.wuid}-page-decrease`,mouseDown:()=>{this.pageDecreasePressed=!0,this.pageDecreaseRepeatedly()},mouseUp:()=>{window.clearTimeout(this.actionTimeout),this.pageDecreasePressed=!1,this.requestRepaint()},mouseOut:()=>{window.clearTimeout(this.actionTimeout),this.pageDecreasePressed=!1,this.requestRepaint()},tooltip:()=>this.tooltip},this.pageIncreaseRegion={id:`${this.wuid}-page-increase`,mouseDown:()=>{this.pageIncreasePressed=!0,this.pageIncreaseRepeatedly()},mouseUp:()=>{window.clearTimeout(this.actionTimeout),this.pageIncreasePressed=!1,this.requestRepaint()},mouseOut:()=>{window.clearTimeout(this.actionTimeout),this.pageIncreasePressed=!1,this.requestRepaint()},tooltip:()=>this.tooltip}}draw(t){this.horizontal?this.drawHorizontal(t):this.drawVertical(t)}drawHorizontal(t){const{scale:i}=this,s=d(this.bounds,2*i);t.fillRect(Object.assign(Object.assign({},s),{color:qi}));const r=Math.min(s.height,s.width/2);this.drawLeftButton(t,{x:s.x,y:s.y,width:r,height:s.height}),this.drawRightButton(t,{x:s.x+s.width-r,y:s.y,width:r,height:s.height});const o=this.barLength,h=this.maximum+o,n=this.minimum,a=h-n,l=a-o,c=s.width-r-r,p=Math.floor(Math.max(6*i,c*o/a));this.dragRange=c-p;const g=this.getCoercedValue(),u=Math.floor((c-p)*(g-n)/l),m=c-u-p,x={x:s.x+r+u,y:s.y,width:p,height:s.height};t.fillRect(Object.assign(Object.assign({},x),{color:Yi})),this.drawRaisedButtonBorder(t,x);t.addHitRegion(this.thumbRegion).addRect(x.x,x.y,x.width,x.height);const f={x:s.x+r,y:s.y,width:u,height:s.height};t.addHitRegion(this.pageDecreaseRegion).addRect(f.x,f.y,f.width,f.height),this.pageDecreasePressed&&t.fillRect(Object.assign(Object.assign({},f),{color:e.BLACK}));const w={x:s.x+r+u+p,y:s.y,width:m,height:s.height};t.addHitRegion(this.pageIncreaseRegion).addRect(w.x,w.y,w.width,w.height),this.pageIncreasePressed&&t.fillRect(Object.assign(Object.assign({},w),{color:e.BLACK}))}drawVertical(t){const{scale:i}=this,s=d(this.bounds,i);t.fillRect(Object.assign(Object.assign({},s),{color:qi}));const r=Math.min(s.width,s.height/2);this.drawUpButton(t,{x:s.x,y:s.y,width:s.width,height:r}),this.drawDownButton(t,{x:s.x,y:s.y+s.height-r,width:s.width,height:r});const o=this.barLength,h=this.maximum+o,n=this.minimum,a=h-n,l=a-o,c=s.height-r-r,p=Math.floor(Math.max(6*i,c*o/a));this.dragRange=c-p;const g=this.getCoercedValue(),u=Math.floor((c-p)*(g-n)/l),m=c-u-p,x={x:s.x,y:s.y+r+u,width:s.width,height:p};t.fillRect(Object.assign(Object.assign({},x),{color:Yi})),this.drawRaisedButtonBorder(t,x);t.addHitRegion(this.thumbRegion).addRect(x.x,x.y,x.width,x.height);const f={x:s.x,y:s.y+r,width:s.width,height:u};t.addHitRegion(this.pageDecreaseRegion).addRect(f.x,f.y,f.width,f.height),this.pageDecreasePressed&&t.fillRect(Object.assign(Object.assign({},f),{color:e.BLACK}));const w={x:s.x,y:s.y+r+u+p,width:s.width,height:m};t.addHitRegion(this.pageIncreaseRegion).addRect(w.x,w.y,w.width,w.height),this.pageIncreasePressed&&t.fillRect(Object.assign(Object.assign({},w),{color:e.BLACK}))}drawLeftButton(t,i){t.fillRect(Object.assign(Object.assign({},i),{color:Yi})),this.decreasePressed?this.drawPressedButtonBorder(t,i):this.drawRaisedButtonBorder(t,i);t.addHitRegion(this.decreaseRegion).addRect(i.x,i.y,i.width,i.height);const s=d(i,3*this.scale);let r=Math.min(s.height/2,s.width);s.x+=(s.width-r)/2,r=Math.max(r,1);const o={x:s.x,y:s.y+s.height/2};t.fillPath({color:e.BLACK,path:new b(o.x,o.y).lineTo(o.x+r,o.y-r).lineTo(o.x+r,o.y+r).closePath()})}drawRightButton(t,i){t.fillRect(Object.assign(Object.assign({},i),{color:Yi})),this.increasePressed?this.drawPressedButtonBorder(t,i):this.drawRaisedButtonBorder(t,i);t.addHitRegion(this.increaseRegion).addRect(i.x,i.y,i.width,i.height);const s=d(i,3*this.scale);let r=Math.min(s.height/2,s.width);s.x+=(s.width-r)/2,r=Math.max(r,1);const o={x:s.x+r,y:s.y+s.height/2};t.fillPath({color:e.BLACK,path:new b(o.x,o.y).lineTo(o.x-r,o.y-r).lineTo(o.x-r,o.y+r).closePath()})}drawUpButton(t,i){t.fillRect(Object.assign(Object.assign({},i),{color:Yi})),this.decreasePressed?this.drawPressedButtonBorder(t,i):this.drawRaisedButtonBorder(t,i);t.addHitRegion(this.decreaseRegion).addRect(i.x,i.y,i.width,i.height);const s=d(i,3*this.scale);let r=Math.min(s.height,s.width/2);s.y+=(s.height-r)/2,r=Math.max(r,1);const o={x:s.x+s.width/2,y:s.y};t.fillPath({color:e.BLACK,path:new b(o.x,o.y).lineTo(o.x-r,o.y+r).lineTo(o.x+r,o.y+r).closePath()})}drawDownButton(t,i){t.fillRect(Object.assign(Object.assign({},i),{color:Yi})),this.increasePressed?this.drawPressedButtonBorder(t,i):this.drawRaisedButtonBorder(t,i);t.addHitRegion(this.increaseRegion).addRect(i.x,i.y,i.width,i.height);const s=d(i,3*this.scale);let r=Math.min(s.height,s.width/2);s.y+=(s.height-r)/2,r=Math.max(r,1);const o={x:s.x+s.width/2,y:s.y+r};t.fillPath({color:e.BLACK,path:new b(o.x,o.y).lineTo(o.x-r,o.y-r).lineTo(o.x+r,o.y-r).closePath()})}drawRaisedButtonBorder(t,i){this.drawButtonBorder(t,i,e.BUTTON_DARKEST,e.BUTTON_DARKER,e.BUTTON,e.BUTTON_LIGHTEST)}drawPressedButtonBorder(t,i){this.drawButtonBorder(t,i,e.BUTTON_LIGHTEST,e.BUTTON_LIGHTEST,e.BUTTON_DARKEST,e.BUTTON_DARKER)}drawButtonBorder(t,e,i,s,r,o){const h=1*this.scale,n=e.y+h/2,a=e.x+h/2,l=e.y+e.height-h+h/2,d=e.x+e.width-h+h/2;t.strokePath({color:i,path:new b(d,l).lineTo(d,n).moveTo(d,l).lineTo(a,l)}),t.strokePath({color:s,path:new b(d-h,l-h).lineTo(d-h,n+h).moveTo(d-h,l-h).lineTo(a+h,l-h)}),t.strokePath({color:r,path:new b(a,n).lineTo(d-h,n).moveTo(a,n).lineTo(a,l-h)}),t.strokePath({color:o,path:new b(a+h,n+h).lineTo(d-h-h,n+h).moveTo(a+h,n+h).lineTo(a+h,l-h-h)})}stepIncreaseRepeatedly(){window.clearTimeout(this.actionTimeout),this.stepIncrease(),this.requestRepaint(),this.actionTimeout=window.setTimeout((()=>this.stepIncreaseRepeatedly()),Xi)}stepDecreaseRepeatedly(){window.clearTimeout(this.actionTimeout),this.stepDecrease(),this.requestRepaint(),this.actionTimeout=window.setTimeout((()=>this.stepDecreaseRepeatedly()),Xi)}stepIncrease(){var t,e;const i=null!==(e=null===(t=this.pv)||void 0===t?void 0:t.value)&&void 0!==e?e:(this.maximum-this.minimum)/2;this.setCoercedValue(i+this.stepIncrement)}stepDecrease(){var t,e;const i=null!==(e=null===(t=this.pv)||void 0===t?void 0:t.value)&&void 0!==e?e:(this.maximum-this.minimum)/2;this.setCoercedValue(i-this.stepIncrement)}pageIncreaseRepeatedly(){window.clearTimeout(this.actionTimeout),this.pageIncrease(),this.requestRepaint(),this.actionTimeout=window.setTimeout((()=>this.pageIncreaseRepeatedly()),Xi)}pageDecreaseRepeatedly(){window.clearTimeout(this.actionTimeout),this.pageDecrease(),this.requestRepaint(),this.actionTimeout=window.setTimeout((()=>this.pageDecreaseRepeatedly()),Xi)}pageIncrease(){var t,e;const i=null!==(e=null===(t=this.pv)||void 0===t?void 0:t.value)&&void 0!==e?e:(this.maximum-this.minimum)/2;this.setCoercedValue(i+this.pageIncrement)}pageDecrease(){var t,e;const i=null!==(e=null===(t=this.pv)||void 0===t?void 0:t.value)&&void 0!==e?e:(this.maximum-this.minimum)/2;this.setCoercedValue(i-this.pageIncrement)}setCoercedValue(t){this.pv&&this.pv.writable&&(t=t<this.minimum?this.minimum:t>this.maximum?this.maximum:t,this.display.pvEngine.setValue(new Date,this.pv.name,t))}getCoercedValue(){var t,e;const i=null!==(e=null===(t=this.pv)||void 0===t?void 0:t.value)&&void 0!==e?e:(this.maximum-this.minimum)/2;return i<this.minimum?this.minimum:i>this.maximum?this.maximum:i}destroy(){window.clearTimeout(this.actionTimeout)}get enabled(){return this.properties.getValue(Hi)}get horizontal(){return this.properties.getValue(ji)}get showValueTip(){return this.properties.getValue(Ui)}get font(){return this.properties.getValue(Fi).scale(this.scale)}get minimum(){return this.properties.getValue(Di)}get maximum(){return this.properties.getValue(Ni)}get stepIncrement(){return this.properties.getValue($i)}get pageIncrement(){return this.properties.getValue(Gi)}get barLength(){return this.properties.getValue(zi)}}const Zi="font",Ji="format_type",Qi="horizontal_alignment",ts="precision",es="precision_from_pv",is="vertical_alignment";class ss extends ge{constructor(t,e){super(t,e),this.properties.add(new q(Zi)),this.properties.add(new $(Ji)),this.properties.add(new $(Qi)),this.properties.add(new $(ts)),this.properties.add(new z(es)),this.properties.add(new $(is,1))}draw(t){const e=t.ctx;this.transparent?this.backgroundAlarmSensitive&&this.alarm&&t.fillRect(Object.assign(Object.assign({},this.area),{color:this.alarmSensitiveBackgroundColor})):t.fillRect(Object.assign(Object.assign({},this.area),{color:this.backgroundColor}));const i=document.createElement("canvas");i.width=this.area.width,i.height=this.area.height;const s=i.getContext("2d");s.fillStyle=this.alarmSensitiveForegroundColor.toString(),s.font=this.font.getFontString();let r=this.x;0===this.horizAlignment?s.textAlign="start":1===this.horizAlignment?(r+=this.width/2,s.textAlign="center"):2===this.horizAlignment&&(r+=this.width,s.textAlign="end");let o=this.y;0===this.vertAlignment?s.textBaseline="top":1===this.vertAlignment?(o+=this.height/2,s.textBaseline="middle"):2===this.vertAlignment&&(o+=this.height,s.textBaseline="bottom");let h=this.text;if(this.pv&&void 0!==this.pv.value){const t=this.precisionFromPV?this.pv.precision:this.precision;h=this.pv.formatValue(this.formatType,t)}s.fillText(h,r-this.area.x,o-this.area.y),e.drawImage(i,this.area.x,this.area.y)}get font(){return this.properties.getValue(Zi).scale(this.scale)}get formatType(){return this.properties.getValue(Ji)}get horizAlignment(){return this.properties.getValue(Qi)}get precision(){return this.properties.getValue(ts)}get precisionFromPV(){return this.properties.getValue(es)}get vertAlignment(){return this.properties.getValue(is)}}const rs="alpha",os="fill",hs="line_width",ns="line_style",as="start_angle",ls="total_angle";class ds extends ge{constructor(t,e){super(t,e),this.properties.add(new $(rs,255)),this.properties.add(new $(hs)),this.properties.add(new $(as)),this.properties.add(new $(ls)),this.properties.add(new z(os)),this.properties.add(new $(ns))}draw(t){t.ctx.globalAlpha=this.alpha/255,this.drawShape(t),t.ctx.globalAlpha=1}drawShape(t){const e=this.x+this.width/2,i=this.y+this.height/2,s=this.width/2,r=this.height/2,o=-u(this.startAngle),h=-u(this.totalAngle+this.startAngle);if(this.fill&&(t.ctx.fillStyle=this.alarmSensitiveBackgroundColor.toString(),t.ctx.beginPath(),t.ctx.moveTo(e,i),t.ctx.ellipse(e,i,s,r,0,o,h,!0),t.ctx.closePath(),t.ctx.fill()),this.lineWidth&&0!==this.totalAngle){let n;const{scale:a}=this;0===this.lineStyle?n=[]:1===this.lineStyle?n=[6*a,2*a]:2===this.lineStyle?n=[2*a,2*a]:console.warn(`Unsupported arc line style ${this.lineStyle}`),t.strokeEllipse({cx:e,cy:i,rx:s,ry:r,startAngle:o,endAngle:h,lineWidth:this.lineWidth,anticlockwise:!0,color:this.alarmSensitiveForegroundColor,dash:n})}}get alpha(){return this.properties.getValue(rs)}get lineWidth(){return this.scale*this.properties.getValue(hs)}get lineStyle(){return this.properties.getValue(ns)}get startAngle(){return this.properties.getValue(as)}get totalAngle(){return this.properties.getValue(ls)}get fill(){return this.properties.getValue(os)}}const cs="alpha",ps="bg_gradient_color",gs="fg_gradient_color",us="fill_level",ms="gradient",xs="horizontal_fill",fs="line_color",ws="line_width",ys="line_style";class vs extends ge{constructor(t,e){super(t,e),this.properties.add(new $(cs,255)),this.properties.add(new U(ps)),this.properties.add(new U(gs)),this.properties.add(new z(ms)),this.properties.add(new $(ws)),this.properties.add(new G(us)),this.properties.add(new z(xs)),this.properties.add(new U(fs)),this.properties.add(new $(ys))}draw(t){t.ctx.globalAlpha=this.alpha/255,this.drawBackground(t),this.fillLevel&&this.drawFill(t),t.ctx.globalAlpha=1}drawBackground(t){const e=this.x+this.width/2,i=this.y+this.height/2,s=this.width/2,r=this.height/2;if(!this.transparent){const o=this.alarmSensitiveBackgroundColor;if(this.gradient){const h=this.horizontalFill?this.x:this.x+this.width,n=this.horizontalFill?this.y+this.height:this.y,a=t.createLinearGradient(this.x,this.y,h,n);a.addColorStop(0,this.backgroundGradientStartColor.toString()),a.addColorStop(1,o.toString()),t.fillEllipse({cx:e,cy:i,rx:s,ry:r,gradient:a})}else t.fillEllipse({cx:e,cy:i,rx:s,ry:r,color:o})}this.lineWidth&&(0===this.lineStyle?t.strokeEllipse({cx:e,cy:i,rx:s,ry:r,color:this.lineColor,lineWidth:this.lineWidth}):1===this.lineStyle?t.strokeEllipse({cx:e,cy:i,rx:s,ry:r,color:this.lineColor,lineWidth:this.lineWidth,dash:[6*this.scale,2*this.scale]}):console.warn(`Unsupported ellipse line style ${this.lineStyle}`))}drawFill(t){const e=d(this,this.lineWidth);if(t.ctx.save(),this.horizontalFill){const i=e.width*(this.fillLevel/100);t.ctx.beginPath(),t.ctx.rect(e.x,e.y,i,e.height)}else{const i=e.height*(this.fillLevel/100),s=e.y+e.height-i;t.ctx.beginPath(),t.ctx.rect(e.x,s,e.width,e.height)}t.ctx.clip();const i=this.x+this.width/2,s=this.y+this.height/2,r=(this.width-this.lineWidth)/2,o=(this.height-this.lineWidth)/2,h=this.alarmSensitiveForegroundColor;if(this.gradient){const e=this.horizontalFill?this.x:this.x+this.width,n=this.horizontalFill?this.y+this.height:this.y,a=t.createLinearGradient(this.x,this.y,e,n);a.addColorStop(0,this.foregroundGradientStartColor.toString()),a.addColorStop(1,h.toString()),t.fillEllipse({cx:i,cy:s,rx:r,ry:o,gradient:a})}else t.fillEllipse({cx:i,cy:s,rx:r,ry:o,color:h});t.ctx.restore()}get alpha(){return this.properties.getValue(cs)}get lineWidth(){return this.scale*this.properties.getValue(ws)}get fillLevel(){return this.properties.getValue(us)}get horizontalFill(){return this.properties.getValue(xs)}get lineColor(){return this.properties.getValue(fs)}get lineStyle(){return this.properties.getValue(ys)}get gradient(){return this.properties.getValue(ms)}get backgroundGradientStartColor(){return this.properties.getValue(ps)}get foregroundGradientStartColor(){return this.properties.getValue(gs)}}const bs="image_file",Ts="no_animation",Ss="transparency";class Vs extends ge{constructor(t,e){super(t,e),this.imageLoading=!1,this.imageLoaded=!1,this.properties.add(new D(bs)),this.properties.add(new D(Ts)),this.properties.add(new z(Ss,!0))}init(){this.imageElement=new Image(this.width,this.height),this.imageElement.onload=()=>{this.snapshotImage(this.imageElement),this.imageLoading=!1,this.imageLoaded=!0,this.requestRepaint()},this.triggerImageLoad()}draw(t){this.imageFile&&this.currentImageFile!==this.imageFile&&this.triggerImageLoad(),this.transparency||(t.ctx.fillStyle=this.backgroundColor.toString(),t.ctx.fillRect(this.x,this.y,this.width,this.height)),this.imageLoading&&this.imageSnapshot?t.ctx.drawImage(this.imageSnapshot,this.x,this.y,this.width,this.height):this.imageLoaded&&(this.noAnimation?t.ctx.drawImage(this.imageSnapshot,this.x,this.y,this.width,this.height):t.ctx.drawImage(this.imageElement,this.x,this.y,this.width,this.height))}triggerImageLoad(){if(this.imageLoading=!0,this.imageLoaded=!1,this.imageElement&&this.imageFile){this.currentImageFile=this.imageFile;const t=this.display.getImageResolver();this.imageElement.src=t.resolve(this.imageFile)}}snapshotImage(t){const e=document.createElement("canvas"),i=e.getContext("2d");e.width=t.naturalWidth,e.height=t.naturalHeight,i.drawImage(t,0,0),this.imageSnapshot=e}get transparency(){return this.properties.getValue(Ss)}get imageFile(){return this.properties.getValue(bs)}get noAnimation(){return this.properties.getValue(Ts)}}const As="font",_s="horizontal_alignment",Ls="vertical_alignment",Cs="wrap_words";class Ps extends ge{constructor(t,e){super(t,e),this.properties.add(new q(As)),this.properties.add(new $(_s)),this.properties.add(new $(Ls)),this.properties.add(new z(Cs))}draw(t){const e=t.ctx;this.transparent||t.fillRect({x:this.x,y:this.y,width:this.width,height:this.height,color:this.backgroundColor});const i=this.wrapText(t,this.text,this.width);e.fillStyle=this.foregroundColor.toString(),e.font=this.font.getFontString(),e.textAlign="start",e.textBaseline="top";let s=0;for(const t of i){const i=e.measureText(t).width;s=Math.max(s,i)}let r=this.x;1===this.horizAlignment?r=this.x+(this.width-s)/2:2===this.horizAlignment&&(r=this.x+(this.width-s));const o=i.length*this.font.height+(i.length-1)*this.font.height*.2;let h=this.y;1===this.vertAlignment?h+=(this.height-o)/2:2===this.vertAlignment&&(h+=this.height-o);for(const t of i)e.fillText(t,r,h),h+=1.2*this.font.height}wrapText(t,e,i){let s=[];for(const r of e.split("\n"))s=s.concat(this.wrapLine(t,r,i));return s}wrapLine(t,e,i){if(!e)return[""];const s=[];let r,o,h,n=0;for(;e.length;){for(o=e.length;t.measureText(e.substr(0,o),this.font).width>i;o--);if(r=e.substr(0,o),o!==e.length)for(h=0;-1!==r.indexOf(" ",h);h=r.indexOf(" ",h)+1);s.push(r.substr(0,h||r.length)),n=Math.max(n,t.measureText(s[s.length-1],this.font).width),e=e.substr(s[s.length-1].length,e.length)}return s}get font(){return this.properties.getValue(As).scale(this.scale)}get horizAlignment(){return this.properties.getValue(_s)}get vertAlignment(){return this.properties.getValue(Ls)}get wrapWords(){return this.properties.getValue(Cs)}}const Ms="alpha",ks="fill_level",Rs="horizontal_fill",Es="line_color",Ws="line_style",Bs="line_width",Is="points";class Os extends ge{constructor(t,e){super(t,e),this.properties.add(new $(Ms,255)),this.properties.add(new $(Bs)),this.properties.add(new G(ks)),this.properties.add(new z(Rs)),this.properties.add(new U(Es)),this.properties.add(new $(Ws)),this.properties.add(new X(Is,[]))}init(){this.addPropertyListener("x",((t,e)=>{const i=g(this.properties.getValue(Is),t-e,0);this.properties.setValue(Is,i),this.requestRepaint()})),this.addPropertyListener("y",((t,e)=>{const i=g(this.properties.getValue(Is),0,t-e);this.properties.setValue(Is,i),this.requestRepaint()}))}draw(t){const{scale:e}=this;t.ctx.globalAlpha=this.alpha/255;const i=b.fromPoints(this.points).closePath();if(!this.transparent){const e=this.alarmSensitiveBackgroundColor;t.fillPath({path:i,color:e})}this.lineWidth&&(0===this.lineStyle?t.strokePath({path:i,lineWidth:this.lineWidth,color:this.lineColor}):2===this.lineStyle?t.strokePath({path:i,lineWidth:this.lineWidth,color:this.lineColor,dash:[6*e,2*e]}):console.warn(`Unsupported polygon line style ${this.lineStyle}`)),this.fillLevel&&this.drawFill(t,i),t.ctx.globalAlpha=1}drawFill(t,e){let i=this.y,s=this.width,r=this.height;this.horizontalFill?s*=this.fillLevel/100:(r*=this.fillLevel/100,i+=r),t.ctx.save();let o=this.x-this.lineWidth/2,h=i-this.lineWidth/2,n=s+this.lineWidth,a=r+this.lineWidth;t.ctx.beginPath(),t.ctx.rect(o,h,n,a),t.ctx.clip();const l=this.alarmSensitiveForegroundColor;t.fillPath({path:e,color:l}),t.ctx.restore()}get alpha(){return this.properties.getValue(Ms)}get lineWidth(){return this.scale*this.properties.getValue(Bs)}get fillLevel(){return this.properties.getValue(ks)}get horizontalFill(){return this.properties.getValue(Rs)}get lineColor(){return this.properties.getValue(Es)}get lineStyle(){return this.properties.getValue(Ws)}get points(){return w(this.properties.getValue(Is),this.scale)}}const Hs="alpha",Fs="arrows",Ns="arrow_length",Ds="fill_arrow",js="fill_level",$s="horizontal_fill",Gs="line_width",zs="points";class Us extends ge{constructor(t,e){super(t,e),this.properties.add(new $(Hs,255)),this.properties.add(new $(Gs)),this.properties.add(new G(js)),this.properties.add(new z($s)),this.properties.add(new X(zs,[])),this.properties.add(new $(Ns)),this.properties.add(new z(Ds)),this.properties.add(new $(Fs))}draw(t){const e=t.ctx;e.globalAlpha=this.alpha/255,this.transparent&&(e.globalAlpha=0),this.drawShape(e,this.backgroundColor),this.fillLevel&&this.drawFill(e),e.globalAlpha=1}drawFill(t){let e=this.y,i=this.width,s=this.height;this.horizontalFill?i*=this.fillLevel/100:(s*=this.fillLevel/100,e+=s),t.save();let r=this.x-this.lineWidth/2,o=e-this.lineWidth/2,h=i+this.lineWidth,n=s+this.lineWidth;t.beginPath(),t.rect(r,o,h,n),t.clip(),this.drawShape(t,this.foregroundColor),t.restore()}drawShape(t,e){t.strokeStyle=e.toString(),t.lineWidth=this.lineWidth,t.beginPath();for(let e=0;e<this.points.length;e++)0===e?t.moveTo(this.points[e].x,this.points[e].y):t.lineTo(this.points[e].x,this.points[e].y);if(t.stroke(),this.points.length>=2){const i=this.points[0],s=this.points[this.points.length-1];if(2===this.arrows||3===this.arrows){const i=this.calculateArrowPoints(this.points[this.points.length-2],s);if(i[2]=s,this.fillArrow){t.fillStyle=e.toString(),t.beginPath();for(let e=0;e<i.length;e++)0===e?t.moveTo(i[e].x,i[e].y):t.lineTo(i[e].x,i[e].y);t.fill()}else t.strokeStyle=e.toString(),t.lineWidth=this.lineWidth,t.beginPath(),t.moveTo(s.x,s.y),t.lineTo(i[0].x,i[0].y),t.moveTo(s.x,s.y),t.lineTo(i[1].x,i[1].y),t.stroke()}if(1===this.arrows||3===this.arrows){const s=this.calculateArrowPoints(this.points[1],i);if(s[2]=i,this.fillArrow){t.fillStyle=e.toString(),t.beginPath();for(let e=0;e<s.length;e++)0===e?t.moveTo(s[e].x,s[e].y):t.lineTo(s[e].x,s[e].y);t.fill()}else t.strokeStyle=e.toString(),t.lineWidth=this.lineWidth,t.beginPath(),t.moveTo(i.x,i.y),t.lineTo(s[0].x,s[0].y),t.moveTo(i.x,i.y),t.lineTo(s[1].x,s[1].y),t.stroke()}}}calculateArrowPoints(t,e){const i=x(e,t),s=Math.PI/10,r=new f(this.arrowLength,i.theta-s),o=new f(this.arrowLength,i.theta+s),h=new f(Math.floor(this.arrowLength*Math.cos(s)),i.theta);return[p(r.toPoint(),e.x,e.y),p(o.toPoint(),e.x,e.y),p(h.toPoint(),e.x,e.y)]}get alpha(){return this.properties.getValue(Hs)}get lineWidth(){return this.scale*this.properties.getValue(Gs)}get fillLevel(){return this.properties.getValue(js)}get horizontalFill(){return this.properties.getValue($s)}get points(){return w(this.properties.getValue(zs),this.scale)}get arrows(){return this.properties.getValue(Fs)}get fillArrow(){return this.properties.getValue(Ds)}get arrowLength(){return this.properties.getValue(Ns)}}const qs="alpha",Ys="bg_gradient_color",Xs="fg_gradient_color",Ks="fill_level",Zs="gradient",Js="horizontal_fill",Qs="line_color",tr="line_width",er="line_style";class ir extends ge{constructor(t,e){super(t,e),this.fillRoundRectangleBackgroundBorder=!1,this.properties.add(new $(qs,255)),this.properties.add(new U(Ys)),this.properties.add(new U(Xs)),this.properties.add(new z(Zs)),this.properties.add(new $(tr)),this.properties.add(new G(Ks)),this.properties.add(new z(Js)),this.properties.add(new U(Qs)),this.properties.add(new $(er))}draw(t){t.ctx.globalAlpha=this.alpha/255,this.drawBackground(t),this.fillLevel&&this.drawFill(t),t.ctx.globalAlpha=1}drawBackground(t){if(!this.transparent){const e=this.alarmSensitiveBackgroundColor;if(this.gradient){const i=this.horizontalFill?this.x:this.x+this.width,s=this.horizontalFill?this.y+this.height:this.y,r=t.createLinearGradient(this.x,this.y,i,s);r.addColorStop(0,this.backgroundGradientStartColor.toString()),r.addColorStop(1,e.toString()),t.fillRect(Object.assign(Object.assign({},this.area),{gradient:r}))}else t.fillRect(Object.assign(Object.assign({},this.area),{color:e}))}this.lineWidth&&(0===this.lineStyle?t.strokeRect(Object.assign(Object.assign({},this.area),{color:this.lineColor,lineWidth:this.lineWidth,crispen:!0})):1===this.lineStyle?t.strokeRect(Object.assign(Object.assign({},this.area),{color:this.lineColor,lineWidth:this.lineWidth,crispen:!0,dash:[6*this.scale,2*this.scale]})):console.warn(`Unsupported rectangle line style ${this.lineStyle}`))}drawFill(t){const e=d(this,this.lineWidth);if(t.ctx.save(),this.horizontalFill){const i=e.width*(this.fillLevel/100);t.ctx.beginPath(),t.ctx.rect(e.x,e.y,i,e.height)}else{const i=e.height*(this.fillLevel/100),s=e.y+e.height-i;t.ctx.beginPath(),t.ctx.rect(e.x,s,e.width,e.height)}t.ctx.clip();const i=this.alarmSensitiveForegroundColor;if(this.gradient){const s=this.horizontalFill?e.x:e.x+e.width,r=this.horizontalFill?e.y+e.height:e.y,o=t.createLinearGradient(e.x,e.y,s,r);o.addColorStop(0,this.foregroundGradientStartColor.toString()),o.addColorStop(1,i.toString()),t.fillRect(Object.assign(Object.assign({},e),{gradient:o}))}else t.fillRect(Object.assign(Object.assign({},e),{color:i}));t.ctx.restore()}get alpha(){return this.properties.getValue(qs)}get lineWidth(){return this.scale*this.properties.getValue(tr)}get fillLevel(){return this.properties.getValue(Ks)}get horizontalFill(){return this.properties.getValue(Js)}get lineColor(){return this.properties.getValue(Qs)}get lineStyle(){return this.properties.getValue(er)}get gradient(){return this.properties.getValue(Zs)}get backgroundGradientStartColor(){return this.properties.getValue(Ys)}get foregroundGradientStartColor(){return this.properties.getValue(Xs)}}const sr="alpha",rr="bg_gradient_color",or="corner_width",hr="corner_height",nr="fg_gradient_color",ar="fill_level",lr="gradient",dr="horizontal_fill",cr="line_color",pr="line_width",gr="line_style";class ur extends ge{constructor(t,e){super(t,e),this.fillRoundRectangleBackgroundBorder=!1,this.properties.add(new $(sr,255)),this.properties.add(new U(rr)),this.properties.add(new U(nr)),this.properties.add(new z(lr)),this.properties.add(new $(pr)),this.properties.add(new G(ar)),this.properties.add(new z(dr)),this.properties.add(new U(cr)),this.properties.add(new $(or)),this.properties.add(new $(hr)),this.properties.add(new $(gr))}draw(t){t.ctx.globalAlpha=this.alpha/255,this.drawBackground(t),this.fillLevel&&this.drawFill(t),t.ctx.globalAlpha=1}drawBackground(t){if(!this.transparent){const e=this.alarmSensitiveBackgroundColor;if(this.gradient){const i=this.horizontalFill?this.x:this.x+this.width,s=this.horizontalFill?this.y+this.height:this.y,r=t.createLinearGradient(this.x,this.y,i,s);r.addColorStop(0,this.backgroundGradientStartColor.toString()),r.addColorStop(1,e.toString()),t.fillRect(Object.assign(Object.assign({},this.area),{rx:this.cornerWidth/2,ry:this.cornerHeight/2,gradient:r}))}else t.fillRect(Object.assign(Object.assign({},this.area),{rx:this.cornerWidth/2,ry:this.cornerHeight/2,color:e}))}this.lineWidth&&(0===this.lineStyle?t.strokeRect(Object.assign(Object.assign({},this.area),{rx:this.cornerWidth/2,ry:this.cornerHeight/2,color:this.lineColor,lineWidth:this.lineWidth,crispen:!0})):1===this.lineStyle?t.strokeRect(Object.assign(Object.assign({},this.area),{rx:this.cornerWidth/2,ry:this.cornerHeight/2,color:this.lineColor,lineWidth:this.lineWidth,crispen:!0,dash:[6*this.scale,2*this.scale]})):console.warn(`Unsupported RoundedRectangle line style ${this.lineStyle}`))}drawFill(t){const e=this.cornerWidth/2,i=this.cornerHeight/2,s=d(this,this.lineWidth);if(t.ctx.save(),this.horizontalFill){const e=s.width*(this.fillLevel/100);t.ctx.beginPath(),t.ctx.rect(s.x,s.y,e,s.height)}else{const e=s.height*(this.fillLevel/100),i=s.y+s.height-e;t.ctx.beginPath(),t.ctx.rect(s.x,i,s.width,s.height)}t.ctx.clip();const r=this.alarmSensitiveForegroundColor;if(this.gradient){const o=this.horizontalFill?s.x:s.x+s.width,h=this.horizontalFill?s.y+s.height:s.y,n=t.createLinearGradient(s.x,s.y,o,h);n.addColorStop(0,this.foregroundGradientStartColor.toString()),n.addColorStop(1,r.toString()),t.fillRect(Object.assign(Object.assign({},s),{rx:e,ry:i,gradient:n}))}else t.fillRect(Object.assign(Object.assign({},s),{rx:e,ry:i,color:r}));t.ctx.restore()}get alpha(){return this.properties.getValue(sr)}get lineWidth(){return this.scale*this.properties.getValue(pr)}get fillLevel(){return this.properties.getValue(ar)}get horizontalFill(){return this.properties.getValue(dr)}get lineColor(){return this.properties.getValue(cr)}get lineStyle(){return this.properties.getValue(gr)}get gradient(){return this.properties.getValue(lr)}get cornerWidth(){return this.scale*this.properties.getValue(or)}get cornerHeight(){return this.scale*this.properties.getValue(hr)}get backgroundGradientStartColor(){return this.properties.getValue(rr)}get foregroundGradientStartColor(){return this.properties.getValue(nr)}}const mr="bitReverse",xr="effect_3d",fr="horizontal",wr="led_border",yr="led_border_color",vr="led_packed",br="numBits",Tr="off_color",Sr="on_color",Vr="startBit",Ar="square_led";class _r extends ge{constructor(t,i){super(t,i),this.properties.add(new z(mr)),this.properties.add(new z(xr)),this.properties.add(new z(fr)),this.properties.add(new $(br)),this.properties.add(new U(Tr)),this.properties.add(new U(Sr)),this.properties.add(new $(Vr)),this.properties.add(new z(Ar)),this.properties.add(new $(wr,3)),this.properties.add(new U(yr,e.DARK_GRAY)),this.properties.add(new z(vr,!1))}getLedColor(t){var e,i;let s=!1;if(void 0!==(null===(e=this.pv)||void 0===e?void 0:e.value))for(let e=this.startBit;e<this.startBit+this.numBits;e++){let r=0;if(r=this.bitReverse?e-this.startBit:this.numBits-1-(e-this.startBit),r===t){s=((null===(i=this.pv)||void 0===i?void 0:i.value)>>e&1)>0;break}}return s?this.onColor:this.offColor}draw(t){if(this.numBits<1)return;let e=this.bounds;this.borderAlarmSensitive&&(e=d(e,2*this.scale)),this.horizontal?this.drawHorizontal(t,e):this.drawVertical(t,e)}drawHorizontal(t,e){let i,s;this.ledPacked?(i=Math.floor((e.width-this.ledBorder)/this.numBits+this.ledBorder),s=i-this.ledBorder):(i=Math.floor(e.width/this.numBits),s=i);let r=0;r=i>e.height||this.squareLed?e.height:i;for(let o=0;o<this.numBits;o++)if(this.squareLed){const h={x:e.x+o*s,y:e.y,width:i,height:r};this.effect3d?this.drawSquare3d(t,h,o):this.drawSquare2d(t,h,o)}else{const h=Math.min(i,r),n={x:e.x+o*s,y:e.y,width:h,height:h};this.effect3d?this.drawCircle3d(t,n,o):this.drawCircle2d(t,n,o)}}drawVertical(t,e){let i,s;this.ledPacked?(i=Math.floor((e.height-this.ledBorder)/this.numBits+this.ledBorder),s=i-this.ledBorder):(i=Math.floor(e.height/this.numBits),s=i);let r=0;r=i>e.width||this.squareLed?e.width:i;for(let o=0;o<this.numBits;o++)if(this.squareLed){const h={x:e.x,y:e.y+o*s,width:r,height:i};this.effect3d?this.drawSquare3d(t,h,o):this.drawSquare2d(t,h,o)}else{const h=Math.min(r,i),n={x:e.x,y:e.y+o*s,width:h,height:h};this.effect3d?this.drawCircle3d(t,n,o):this.drawCircle2d(t,n,o)}}drawCircle2d(t,e,i){const s=e.x+e.width/2,r=e.y+e.height/2;let o=e.width/2,h=e.height/2;this.ledBorder>0&&(o-=this.ledBorder/2,h-=this.ledBorder/2),t.fillEllipse({cx:s,cy:r,rx:o,ry:h,color:this.getLedColor(i)}),t.strokeEllipse({cx:s,cy:r,rx:o,ry:h,color:this.ledBorderColor,lineWidth:this.ledBorder})}drawCircle3d(t,i,s){const r=i.x+i.width/2,o=i.y+i.height/2;let h=i.width/2,n=i.height/2;t.fillEllipse({cx:r,cy:o,rx:h,ry:n,color:e.WHITE});let a=t.createLinearGradient(i.x,i.y,i.x+i.width,i.y+i.height);a.addColorStop(0,this.ledBorderColor.toString()),a.addColorStop(1,this.ledBorderColor.withAlpha(0).toString()),t.fillEllipse({cx:r,cy:o,rx:h,ry:n,gradient:a});h=(i.width-2*this.ledBorder)/2,n=(i.height-2*this.ledBorder)/2,t.fillEllipse({cx:r,cy:o,rx:h,ry:n,color:this.getLedColor(s)}),a=t.createLinearGradient(i.x,i.y,i.x+i.width,i.y+i.height),a.addColorStop(0,e.WHITE.toString()),a.addColorStop(1,this.ledBorderColor.withAlpha(0).toString()),t.fillEllipse({cx:r,cy:o,rx:h,ry:n,gradient:a})}drawSquare2d(t,e,i){const s=a(e.x,e.y,e.width,e.height,this.ledBorder);t.fillRect(Object.assign(Object.assign({},s),{color:this.getLedColor(i)})),t.strokeRect(Object.assign(Object.assign({},s),{color:this.ledBorderColor,lineWidth:this.ledBorder}))}drawSquare3d(t,e,i){t.fillRect(Object.assign(Object.assign({},e),{color:this.ledBorderColor}));let s=t.createLinearGradient(e.x,e.y,e.x+e.width,e.y);s.addColorStop(0,"rgba(0,0,0,0.078)"),s.addColorStop(1,"rgba(0,0,0,0.39)"),t.fillPath({gradient:s,path:new b(e.x,e.y).lineTo(e.x+this.ledBorder,e.y+this.ledBorder).lineTo(e.x+this.ledBorder,e.y+e.height-this.ledBorder).lineTo(e.x,e.y+e.height)}),s=t.createLinearGradient(e.x,e.y,e.x,e.y+e.height),s.addColorStop(0,"rgba(0,0,0,0.078)"),s.addColorStop(1,"rgba(0,0,0,0.39)"),t.fillPath({gradient:s,path:new b(e.x,e.y).lineTo(e.x+this.ledBorder,e.y+this.ledBorder).lineTo(e.x+e.width-this.ledBorder,e.y+this.ledBorder).lineTo(e.x+e.width,e.y)}),s=t.createLinearGradient(e.x,e.y,e.x+e.width,e.y),s.addColorStop(0,"rgba(255,255,255,0.078)"),s.addColorStop(1,"rgba(255,255,255,0.39)"),t.fillPath({gradient:s,path:new b(e.x+e.width,e.y).lineTo(e.x+e.width-this.ledBorder,e.y+this.ledBorder).lineTo(e.x+e.width-this.ledBorder,e.y+e.height-this.ledBorder).lineTo(e.x+e.width,e.y+e.height)}),s=t.createLinearGradient(e.x,e.y,e.x,e.y+e.height),s.addColorStop(0,"rgba(255,255,255,0.078)"),s.addColorStop(1,"rgba(255,255,255,0.39)"),t.fillPath({gradient:s,path:new b(e.x,e.y+e.height).lineTo(e.x+this.ledBorder,e.y+e.height-this.ledBorder).lineTo(e.x+e.width-this.ledBorder,e.y+e.height-this.ledBorder).lineTo(e.x+e.width,e.y+e.height)});const r=e.x+this.ledBorder,o=e.y+this.ledBorder,h=e.width-2*this.ledBorder,n=e.height-2*this.ledBorder,a=this.getLedColor(i);t.fillRect({x:r,y:o,width:h,height:n,color:a}),s=t.createLinearGradient(e.x,e.y,e.x+e.width,e.y+e.height),s.addColorStop(0,"rgba(255,255,255,0.784)"),s.addColorStop(1,a.withAlpha(0).toString()),t.fillRect({x:r,y:o,width:h,height:n,gradient:s})}get bitReverse(){return this.properties.getValue(mr)}get horizontal(){return this.properties.getValue(fr)}get numBits(){return this.properties.getValue(br)}get startBit(){return this.properties.getValue(Vr)}get ledPacked(){return this.properties.getValue(vr)}get ledBorder(){return this.scale*this.properties.getValue(wr)}get ledBorderColor(){return this.properties.getValue(yr)}get offColor(){return this.properties.getValue(Tr)}get onColor(){return this.properties.getValue(Sr)}get effect3d(){return this.properties.getValue(xr)}get squareLed(){return this.properties.getValue(Ar)}}class Lr{constructor(t){this.prefix="",this.suffix="",this.comma=0,this.minInt=1,this.minFrac=0,this.maxFrac=0;for(let e=0;e<t.length;e++)if("#"==t.charAt(e)||"0"==t.charAt(e)){this.prefix=t.substring(0,e),t=t.substring(e);break}this.suffix=t.replace(/[#]|[0]|[,]|[.]/g,"");const e=t.replace(/[^0#,.]/g,"");let i="",s="";const r=e.indexOf(".");-1!==r?(i=e.substring(0,r),s=e.substring(r+1)):i=e;const o=i.lastIndexOf(",");-1!==o&&(this.comma=i.length-1-o),i=i.replace(/[,]/g,""),s=s.replace(/[,]|[.]+/g,""),this.maxFrac=s.length;let h=i.replace(/[^0]/g,"");h.length>this.minInt&&(this.minInt=h.length),h=s.replace(/[^0]/g,""),this.minFrac=h.length}format(t){let e=this.formatBack(t).toLowerCase();if(isNaN(e)||0==e.length)return t;if(-1!=e.indexOf("e")){const t=Number(e);if(t===1/0||t===-1/0)return e;if(e=t+"",-1!==e.indexOf("e"))return e}let i=!1;"-"===e.charAt(0)?(i=!0,e=e.substring(1)):"+"===e.charAt(0)&&(e=e.substring(1));const s=e.indexOf(".");let r="",o="";-1!=s?(r=e.substring(0,s),o=e.substring(s+1)):r=e,o=o.replace(/[.]/,"");const h=this.suffix&&"%"===this.suffix.charAt(0);let n=this.minInt,a=this.minFrac,l=this.maxFrac;if(h&&(n-=2,a+=2,l+=2),o.length>l){let t=Number("0."+o);t=0==l?Math.round(t):t.toFixed(l),o=t.toString(10).substr(2);let e,i=t>=1?1:0,s=r.length-1;for(;i;){if(-1==s){r="1"+r;break}e=Number(r.charAt(s)),9===e?(e="0",i=1):(e=++e+"",i=0),r=r.substring(0,s)+e+r.substring(s+1,r.length),s--}}for(let t=o.length;t<a;t++)o+="0";for(;o.length>a&&"0"==o.charAt(o.length-1);)o=o.substring(0,o.length-1);for(let t=r.length;t<n;t++)r="0"+r;for(;r.length>n&&"0"==r.charAt(0);)r=r.substring(1);h&&(r+=o.substring(0,2),o=o.substring(2));let d,c=0;for(let t=r.length;t>0;t--)0!=c&&c%this.comma==0&&(r=r.substring(0,t)+","+r.substring(t),c=0),c++;return d=o.length>0?this.prefix+r+"."+o+this.suffix:this.prefix+r+this.suffix,i&&(d="-"+d),d}formatBack(t){if(!(t+=""))return"";if(!isNaN(t))return this.getNumericString(t);let e=t,i=!1;"-"===t.charAt(0)&&(e=e.substr(1),i=!0);const s=e.indexOf(this.prefix),r=""==this.suffix?e.length:e.indexOf(this.suffix,this.prefix.length+1);return 0==s&&r>0&&(e=e.substr(0,r),e=e.substr(this.prefix.length),e=e.replace(/,/g,""),i&&(e="-"+e),!isNaN(e))?this.getNumericString(e):t}getNumericString(t){const e=Number(t)+"";if(t.indexOf(".")>-1&&e.indexOf(".")<0){for(var i=t.indexOf(".")+1;i<t.length;i++)if("0"!==t.charAt(i))return t;return e}return t}}class Cr{constructor(t,i,s){this.rampWidth=t,this.startAngle=i,this.endAngle=s,this.lolo=10,this.loloColor=e.RED,this.showLoLo=!0,this.lo=25,this.loColor=e.ORANGE,this.showLo=!0,this.hi=75,this.hiColor=e.ORANGE,this.showHi=!0,this.hihi=90,this.hihiColor=e.RED,this.showHiHi=!0,this.minimum=0,this.maximum=100,this.gradient=!0,this.logScale=!1,this.effect3d=!0,this.labelsOutside=!0,this.range={min:this.minimum,max:this.maximum},this.lengthInDegrees=0,this.radius=0}draw(t,e,i){if(this.labelsOutside){const t=9;this.radius=e.width/2-t}else this.radius=e.width/2-1;this.range=this.getRenderedRange(),this.endAngle-this.startAngle>0?this.lengthInDegrees=360-(this.endAngle-this.startAngle):this.lengthInDegrees=this.startAngle-this.endAngle,this.drawRamp(t,i)}drawRamp(t,i){const s=i.x+i.width/2,r=i.y+i.height/2,o=i.width/2,h=i.height/2;let n,a=360-this.endAngle;if(n=this.endAngle-this.startAngle>0?this.startAngle-90:this.startAngle+90,this.showLoLo){let e=n,i=360-this.getValuePosition(this.lolo,!0);t.strokeEllipse({cx:s,cy:r,rx:o-this.rampWidth/2,ry:h-this.rampWidth/2,lineWidth:this.rampWidth,startAngle:u(e),endAngle:u(i),color:this.loloColor})}if(this.showLo){let e;e=this.showLoLo?this.lolo:this.minimum;const n=360-this.getValuePosition(e,!0),a=360-this.getValuePosition(this.lo,!0);if(this.effect3d&&this.gradient&&this.showLoLo){const l=u(this.getValuePosition(e,!0)-2),d=m(i.width/2,l,i),c=u(this.getValuePosition(this.lo,!0)+2),p=m(i.width/2,c,i),g=t.createLinearGradient(d.x,d.y,p.x,p.y);g.addColorStop(0,this.loloColor.toString()),g.addColorStop(1,this.loColor.toString()),t.strokeEllipse({cx:s,cy:r,rx:o-this.rampWidth/2,ry:h-this.rampWidth/2,lineWidth:this.rampWidth,startAngle:u(n-1),endAngle:u(a+1),gradient:g})}else t.strokeEllipse({cx:s,cy:r,rx:o-this.rampWidth/2,ry:h-this.rampWidth/2,lineWidth:this.rampWidth,startAngle:u(n),endAngle:u(a),color:this.loColor})}let l=this.minimum;this.showLo?l=this.lo:this.showLoLo&&(l=this.lolo);let d=this.maximum;this.showHi?d=this.hi:this.showHiHi&&(d=this.hihi);const c=(l+d)/2;let p=360-this.getValuePosition(l,!0),g=360-this.getValuePosition(c,!0);if(this.effect3d&&this.gradient&&(this.showLoLo||this.showLo)){const n=u(this.getValuePosition(l,!0)-2),a=m(i.width/2,n,i),d=u(this.getValuePosition(c,!0)+2),x=m(i.width/2,d,i),f=t.createLinearGradient(a.x,a.y,x.x,x.y);f.addColorStop(0,(this.showLo?this.loColor:this.loloColor).toString()),f.addColorStop(1,e.GREEN.toString()),t.strokeEllipse({cx:s,cy:r,rx:o-this.rampWidth/2,ry:h-this.rampWidth/2,lineWidth:this.rampWidth,startAngle:u(p-1),endAngle:u(g+1),gradient:f})}else t.strokeEllipse({cx:s,cy:r,rx:o-this.rampWidth/2,ry:h-this.rampWidth/2,lineWidth:this.rampWidth,startAngle:u(p),endAngle:u(g),color:e.GREEN});if(p=360-this.getValuePosition(c,!0),g=360-this.getValuePosition(d,!0),this.effect3d&&this.gradient&&(this.showHi||this.showHiHi)){const n=u(this.getValuePosition(c,!0)-2),l=m(i.width/2,n,i),x=u(this.getValuePosition(d,!0)+2),f=m(i.width/2,x,i),w=t.createLinearGradient(l.x,l.y,f.x,f.y);w.addColorStop(0,e.GREEN.toString()),w.addColorStop(1,(this.showHi?this.hiColor:this.hihiColor).toString());const y=g!==a?1:0;t.strokeEllipse({cx:s,cy:r,rx:o-this.rampWidth/2,ry:h-this.rampWidth/2,lineWidth:this.rampWidth,startAngle:u(p-1),endAngle:u(g+y),gradient:w})}else t.strokeEllipse({cx:s,cy:r,rx:o-this.rampWidth/2,ry:h-this.rampWidth/2,lineWidth:this.rampWidth,startAngle:u(p),endAngle:u(g),color:e.GREEN});if(this.showHi){let e;e=this.showHiHi?this.hihi:this.maximum;const n=360-this.getValuePosition(this.hi,!0),l=360-this.getValuePosition(e,!0);if(this.effect3d&&this.gradient&&this.showHiHi){const d=u(this.getValuePosition(this.hi,!0)-2),c=m(i.width/2,d,i),p=u(this.getValuePosition(e,!0)+2),g=m(i.width/2,p,i),x=t.createLinearGradient(c.x,c.y,g.x,g.y);x.addColorStop(0,this.hiColor.toString()),x.addColorStop(1,this.hihiColor.toString());const f=l!==a?1:0;t.strokeEllipse({cx:s,cy:r,rx:o-this.rampWidth/2,ry:h-this.rampWidth/2,lineWidth:this.rampWidth,startAngle:u(n-1),endAngle:u(l+f),gradient:x})}else t.strokeEllipse({cx:s,cy:r,rx:o-this.rampWidth/2,ry:h-this.rampWidth/2,lineWidth:this.rampWidth,startAngle:u(n),endAngle:u(l),color:this.hiColor})}if(this.showHiHi){p=360-this.getValuePosition(this.hihi,!0),g=a;const e=this.gradient?1:0;t.strokeEllipse({cx:s,cy:r,rx:o-this.rampWidth/2,ry:h-this.rampWidth/2,lineWidth:this.rampWidth,startAngle:u(p-e),endAngle:u(g),color:this.hihiColor})}}getRadius(){return this.radius}getValuePosition(t,e=!1){let i;return e&&(t=this.getValueInRange(t)),i=this.logScale?this.startAngle-(Math.log10(t)-Math.log10(this.range.min))/(Math.log10(this.range.max)-Math.log10(this.range.min))*this.lengthInDegrees:this.startAngle-(t-this.range.min)/(this.range.max-this.range.min)*this.lengthInDegrees,i<0&&(i+=360),i}getValueInRange(t){return this.range.min<=t&&t<=this.range.max?t:t>this.range.max?this.range.max:this.range.min}getRenderedRange(){const t={min:this.minimum,max:this.maximum};return this.logScale&&(this.minimum<=0&&(t.min=.1),t.max<=this.minimum&&(t.max=t.min+100)),t}}const Pr=new e(100,100,100),Mr="color_hi",kr="color_hihi",Rr="color_lo",Er="color_lolo",Wr="effect_3d",Br="font",Ir="value_label_format",Or="level_hi",Hr="level_hihi",Fr="level_lo",Nr="level_lolo",Dr="limits_from_pv",jr="log_scale",$r="minimum",Gr="maximum",zr="needle_color",Ur="ramp_gradient",qr="show_ramp";class Yr extends ge{constructor(t,e){super(t,e),this.properties.add(new U(Mr)),this.properties.add(new U(kr)),this.properties.add(new U(Rr)),this.properties.add(new U(Er)),this.properties.add(new z(Wr)),this.properties.add(new q(Br)),this.properties.add(new G(Or)),this.properties.add(new G(Hr)),this.properties.add(new G(Fr)),this.properties.add(new G(Nr)),this.properties.add(new z(jr)),this.properties.add(new z(Dr)),this.properties.add(new G(Gr)),this.properties.add(new G($r)),this.properties.add(new U(zr)),this.properties.add(new z(Ur)),this.properties.add(new z(qr,!0)),this.properties.add(new D(Ir))}draw(t){var e,i;let s;s=this.limitsFromPv&&this.pv&&!this.pv.disconnected?{min:null!==(e=this.pv.lowerDisplayLimit)&&void 0!==e?e:this.minimum,lolo:this.pv.lowerAlarmLimit,lo:this.pv.lowerWarningLimit,hi:this.pv.upperWarningLimit,hihi:this.pv.upperAlarmLimit,max:null!==(i=this.pv.upperDisplayLimit)&&void 0!==i?i:this.maximum}:{min:this.minimum,lolo:this.levelLoLo,lo:this.levelLo,hi:this.levelHi,hihi:this.levelHiHi,max:this.maximum},this.logScale&&(s.min=Math.max(.1,s.min),s.max<=s.min&&(s.max=s.min+100));const r=Math.min(this.width,this.height),o=r;this.drawBackground(t,r,o),this.showRamp&&this.drawRamp(t,r,o,s),this.drawLabel(t,r,o),this.drawNeedle(t,r,o,s),this.drawNeedleCenter(t,r,o)}drawBackground(t,i,s){if(t.fillEllipse({cx:this.x+i/2,cy:this.y+s/2,rx:i/2,ry:s/2,color:e.GRAY}),this.effect3d){const r=t.createLinearGradient(this.x,this.y,this.x+this.width,this.y+this.height);r.addColorStop(0,Pr.toString()),r.addColorStop(1,e.WHITE.toString()),t.fillEllipse({cx:this.x+i/2,cy:this.y+s/2,rx:i/2,ry:s/2,gradient:r})}const r=(this.effect3d?2:1)*this.scale;if(t.fillEllipse({cx:this.x+i/2,cy:this.y+s/2,rx:i/2-r,ry:s/2-r,color:this.backgroundColor}),this.effect3d){const r=i/2,o=.95,h=.5,n=.85,a=u(0),l=u(35);let d={x:Math.floor(this.x+i/2-r*n*Math.cos(a)),y:Math.floor(this.y+s/2-r*o),width:Math.floor(2*r*n*Math.cos(a)),height:Math.floor(r*o+r*h)},c=t.createLinearGradient(d.x,d.y,d.x,d.y+d.height);c.addColorStop(0,e.WHITE.withAlpha(90/255).toString()),c.addColorStop(1,e.WHITE.withAlpha(0).toString()),t.fillEllipse({cx:d.x+d.width/2,cy:d.y+d.height/2,rx:d.width/2,ry:d.height/2,gradient:c}),d={x:Math.floor(this.x+i/2-r*n*Math.sin(l)),y:Math.floor(Math.ceil(this.y+s/2+r*h)),width:Math.floor(2*r*n*Math.sin(l)),height:Math.floor(Math.ceil(r*o-r*h))},c=t.createLinearGradient(d.x,d.y,d.x,d.y+d.height),c.addColorStop(0,e.WHITE.withAlpha(0).toString()),c.addColorStop(1,e.WHITE.withAlpha(40/255).toString()),t.fillEllipse({cx:d.x+d.width/2,cy:d.y+d.height/2,rx:d.width/2,ry:d.height/2,gradient:c})}}drawRamp(t,e,i,s){const r=d({x:this.x,y:this.y,width:e,height:i},e/4,i/4),o=Object.assign({},r);o.width=Math.min(r.width,r.height),o.height=r.width;const h=new Cr(10*this.scale,225,315);h.lolo=s.lolo,h.loloColor=this.colorLoLo,h.lo=s.lo,h.loColor=this.colorLo,h.hi=s.hi,h.hiColor=this.colorHi,h.hihi=s.hihi,h.hihiColor=this.colorHiHi,h.minimum=s.min,h.maximum=s.max,h.effect3d=this.effect3d,h.gradient=this.rampGradient,h.logScale=this.logScale,h.draw(t,r,o)}drawLabel(t,e,i){var s;const r=W.ARIAL_12_BOLD.scale(this.scale);if(void 0!==(null===(s=this.pv)||void 0===s?void 0:s.value)){const s=this.formatLabelValue(this.pv.value),o=t.measureText(s,r);t.fillText({x:this.x+e/2-o.width/2,y:this.y+7*i/8-o.height/2,color:this.foregroundColor,align:"left",baseline:"top",font:r,text:s})}}drawNeedle(t,e,i,s){var r;const o=this.x+e/2,h=this.y+i/2;let n;if(void 0!==(null===(r=this.pv)||void 0===r?void 0:r.value)){const t=this.getValueInRange(this.pv.value,s);n=360-this.getValuePosition(t,s),s.max>s.min?t>s.max?n+=10:t<s.min&&(n-=10):t>s.min?n-=10:t<s.max&&(n+=10)}else n=360-this.getValuePosition((s.min+s.max)/2,s);const a=u(n),{scale:d}=this,{needleDiameter:c,majorTickLength:p,gapBetweenNeedleScale:g}=this,m=l(o,h-c/2+3*d,o,h,a),x=l(o+e/2-p-g,h,o,h,a),f=l(o,h+c/2-3*d,o,h,a);t.fillPath({color:this.needleColor,path:new b(m.x,m.y).lineTo(x.x,x.y).lineTo(f.x,f.y).closePath()})}drawNeedleCenter(t,i,s){const{needleDiameter:r}=this,o=this.x+i/2,h=this.y+s/2,n=r/2,a=r/2;if(this.effect3d){const i=t.createLinearGradient(o-n,h-a,o+n,h+a);i.addColorStop(0,e.WHITE.toString()),i.addColorStop(1,Pr.toString()),t.fillEllipse({cx:o,cy:h,rx:n,ry:a,gradient:i})}else t.fillEllipse({cx:o,cy:h,rx:n,ry:a,color:e.GRAY})}getValueInRange(t,e){return e.min<=t&&t<=e.max?t:t>e.max?e.max:e.min}getValuePosition(t,e){let i;return i=this.logScale?225-(Math.log10(t)-Math.log10(e.min))/(Math.log10(e.max)-Math.log10(e.min))*270:225-(t-e.min)/(e.max-e.min)*270,i<0&&(i+=360),i}formatLabelValue(t){return this.valueLabelFormat?new Lr(this.valueLabelFormat).format(t):String(Number(t.toFixed(3)))}get needleDiameter(){return 16*this.scale}get majorTickLength(){return 8*this.scale}get minorTickLength(){return 5*this.scale}get gapBetweenNeedleScale(){return-1*this.scale}get colorLo(){return this.properties.getValue(Rr)}get colorLoLo(){return this.properties.getValue(Er)}get colorHi(){return this.properties.getValue(Mr)}get colorHiHi(){return this.properties.getValue(kr)}get effect3d(){return this.properties.getValue(Wr)}get font(){return this.properties.getValue(Br).scale(this.scale)}get levelLo(){return this.properties.getValue(Fr)}get levelLoLo(){return this.properties.getValue(Nr)}get levelHi(){return this.properties.getValue(Or)}get levelHiHi(){return this.properties.getValue(Hr)}get limitsFromPv(){return this.properties.getValue(Dr)}get logScale(){return this.properties.getValue(jr)}get minimum(){return this.properties.getValue($r)}get maximum(){return this.properties.getValue(Gr)}get needleColor(){return this.properties.getValue(zr)}get rampGradient(){return this.properties.getValue(Ur)}get showRamp(){return this.properties.getValue(qr)}get valueLabelFormat(){return this.properties.getValue(Ir)}}const Xr="data_type",Kr="off_image",Zr="off_label",Jr="font",Qr="on_image",to="on_label",eo="show_boolean_label";class io extends ge{constructor(t,e){super(t,e),this.onImageLoaded=!1,this.offImageLoaded=!1,this.properties.add(new $("bit")),this.properties.add(new $(Xr)),this.properties.add(new D(Kr)),this.properties.add(new D(Zr)),this.properties.add(new D(Qr)),this.properties.add(new D(to)),this.properties.add(new q(Jr)),this.properties.add(new z(eo))}init(){if(this.onImageElement=new Image,this.onImageElement.onload=()=>{this.onImageLoaded=!0,this.requestRepaint()},this.offImageElement=new Image,this.offImageElement.onload=()=>{this.offImageLoaded=!0,this.requestRepaint()},this.onImage){const t=this.display.getImageResolver();this.onImageElement.src=t.resolve(this.onImage)}if(this.offImage){const t=this.display.getImageResolver();this.offImageElement.src=t.resolve(this.offImage)}}get booleanValue(){var t,e,i;return this.bit<0?Boolean(null===(t=this.pv)||void 0===t?void 0:t.toNumber()):void 0!==(null===(e=this.pv)||void 0===e?void 0:e.value)&&((null===(i=this.pv)||void 0===i?void 0:i.value)>>this.bit&1)>0}get image(){return this.booleanValue?this.onImage:this.offImage}get label(){return this.booleanValue?this.onLabel:this.offLabel}draw(t){this.transparent||t.fillRect({x:this.x,y:this.y,width:this.width,height:this.height,color:this.backgroundColor}),this.booleanValue?this.onImageLoaded&&t.ctx.drawImage(this.onImageElement,this.x,this.y,this.width,this.height):this.offImageLoaded&&t.ctx.drawImage(this.offImageElement,this.x,this.y,this.width,this.height),this.showBooleanLabel&&t.fillText({x:this.x+this.width/2,y:this.y+this.height/2,font:this.font,baseline:"middle",align:"center",color:this.foregroundColor,text:this.label})}get bit(){return this.properties.getValue("bit")}get dataType(){return this.properties.getValue(Xr)}get showBooleanLabel(){return this.properties.getValue(eo)}get font(){return this.properties.getValue(Jr).scale(this.scale)}get offLabel(){return this.properties.getValue(Zr)}get offImage(){return this.properties.getValue(Kr)}get onLabel(){return this.properties.getValue(to)}get onImage(){return this.properties.getValue(Qr)}}const so=["January","February","March","April","May","June","July","August","September","October","November","December"];class ro{constructor(t,e,i,s,r,o,h,n,a){this.scale=t,this.scaleFont=e,this.minimum=i,this.maximum=s,this.logScale=r,this.majorTickStepHint=o,this.foregroundColor=h,this.showMinorTicks=n,this.showScale=a,this.labels=[],this.labelValues=[],this.labelPositions=[],this.labelVisibilities=[],this.gridStepInPixel=0,this.horizontal=!1,this.x=0,this.y=0,this.scaleFormat="",this.timeFormat=0,this.length=0,this.margin=0}get scaleLength(){return this.length-2*this.margin}getX(){return this.x}getY(){return this.y}getGridPositions(){let t=[...this.labelPositions];return this.horizontal||(t=t.map((t=>this.length-t))),t.pop(),t.shift(),t}setDimensions(t,e,i,s){this.x=t,this.y=e,this.length=i,this.horizontal=s}getValuePosition(t){let{start:e,stop:i}=this.getMinMax(),s=0;const r=this.length-2*this.margin;if(this.logScale)s=t<=0?this.margin:(Math.log10(t)-Math.log10(e))/(Math.log10(i)-Math.log10(e))*r+this.margin;else{const o=Math.max(Math.abs(e),Math.abs(i));i/=o,e/=o;s=(t/o-e)/(i-e)*r+this.margin}return this.horizontal?s+this.x:this.length-s+this.y}getMinMax(){let t=this.minimum,e=this.maximum;return this.logScale&&(t<=0&&(t=.1),e<=t&&(e=t+100)),{start:t,stop:e}}getPositionValue(t){const e=this.getMinMax();let{start:i,stop:s}=e;const r=this.horizontal?t-this.x:this.length+this.y-t,o=this.length-2*this.margin;let h;if(this.logScale)h=Math.pow(10,(r-this.margin)*(Math.log10(s)-Math.log10(i))/o+Math.log10(i));else{const t=Math.max(Math.abs(i),Math.abs(s));s/=t,i/=t;const e=s-i;h=((r-this.margin)/o*e+i)*t}return h}calculateMargin(t,e){if(this.showScale){const i=t.measureText(this.format(this.minimum),this.scaleFont),s=t.measureText(this.format(this.maximum),this.scaleFont);return e?Math.ceil(Math.max(i.width,s.width)/2):Math.ceil(Math.max(i.height,s.height)/2)}return 0}measureHorizontalHeight(t){const e=t.measureText("dummy",this.scaleFont);return this.showScale?e.height+this.spaceBetweenMarkAndLabel+this.majorTickLength:0}drawHorizontal(t,e,i,s){const{scale:r}=this;this.length=s,this.horizontal=!0,this.margin=this.calculateMargin(t,this.horizontal);const o=s-2*this.margin;o>0&&this.updateLabels(t,o);let h=0;for(let e=0;e<this.labels.length;e++){const i=t.measureText(this.labels[e],this.scaleFont);i.height>h&&(h=i.height)}const n=this.showScale?h+this.spaceBetweenMarkAndLabel+this.majorTickLength:0;if(i-=n,this.x=e,this.y=i,this.logScale)for(let e=0;e<this.labelPositions.length;e++){const i=this.x+this.labelPositions[e],s=this.y;let o=0;if(o=this.labelVisibilities[e]?this.majorTickLength:this.minorTickLength,this.labelVisibilities[e]||this.showMinorTicks){const e=Math.round(i)-.5*r;t.strokePath({path:new b(e,s).lineTo(e,s+o),color:this.foregroundColor,lineWidth:1*r,opacity:100/255})}this.labelVisibilities[e]&&t.fillText({x:i,y:this.y+this.spaceBetweenMarkAndLabel+this.majorTickLength,align:"center",baseline:"top",font:this.scaleFont,color:this.foregroundColor,text:this.labels[e]})}else for(let s=0;s<this.labels.length;s++){const o=e+this.labelPositions[s];this.labelVisibilities[s]&&t.fillText({x:o,y:i+this.majorTickLength+this.spaceBetweenMarkAndLabel,align:"center",baseline:"top",font:this.scaleFont,color:this.foregroundColor,text:this.labels[s]});const h=Math.round(o)-.5*r;t.strokePath({path:new b(h,i).lineTo(h,i+this.majorTickLength),color:this.foregroundColor,lineWidth:1*r,opacity:100/255}),this.showMinorTicks&&this.drawMinorXTicks(t,s,e,i)}return n}drawVertical(t,e,i,s,r,o=!1){const{scale:h}=this;this.length=s,this.horizontal=!1,this.margin=this.calculateMargin(t,this.horizontal);const n=s-2*this.margin;n>0&&this.updateLabels(t,n);let a=0;for(let e=0;e<this.labels.length;e++){const i=t.measureText(this.labels[e],this.scaleFont);i.width>a&&(a=i.width)}const l=this.showScale?a+this.spaceBetweenMarkAndLabel+this.majorTickLength:0;if(r||(e-=l),this.x=e,this.y=i,this.logScale)for(let r=0;r<this.labelPositions.length;r++){let o;o=this.labelVisibilities[r]?this.majorTickLength:this.minorTickLength;const n=e+a+this.spaceBetweenMarkAndLabel-1*h+this.majorTickLength-o,l=Math.round(i+s-this.labelPositions[r])-.5*h;if((this.labelVisibilities[r]||this.showMinorTicks)&&t.strokePath({path:new b(n,l).lineTo(n+o,l),color:this.foregroundColor,lineWidth:1*h,opacity:100/255}),this.labelVisibilities[r]){const o=i+s-this.labelPositions[r];t.fillText({x:e,y:o,align:"left",baseline:"middle",font:this.scaleFont,color:this.foregroundColor,text:this.labels[r]})}}else for(let r=0;r<this.labels.length;r++){const n=i+s-this.labelPositions[r],l=Math.round(n)-.5*h;if(o){if(t.strokePath({path:new b(e,l).lineTo(e+this.majorTickLength,l),color:this.foregroundColor,lineWidth:1*h,opacity:100/255}),this.labelVisibilities[r]){const i=e+this.majorTickLength+this.spaceBetweenMarkAndLabel;t.fillText({x:i,y:n,align:"left",baseline:"middle",font:this.scaleFont,color:this.foregroundColor,text:this.labels[r]})}}else{this.labelVisibilities[r]&&t.fillText({x:e,y:n,align:"left",baseline:"middle",font:this.scaleFont,color:this.foregroundColor,text:this.labels[r]});const o=e+a+this.spaceBetweenMarkAndLabel-1*h;t.strokePath({path:new b(o,l).lineTo(o+this.majorTickLength,l),color:this.foregroundColor,lineWidth:1*h,opacity:100/255}),this.showMinorTicks&&this.drawMinorYTicks(t,r,o,i+s)}}return l}drawMinorXTicks(t,e,i,s){const{gridStepInPixel:r}=this;let o,h;r/5>=this.minorTickMarkStepHint?(o=5,h=Math.floor(r/5)):r/4>=this.minorTickMarkStepHint?(o=4,h=Math.floor(r/4)):(o=2,h=Math.floor(r/2));const{labelPositions:n,minorTickLength:a,scale:l}=this;if(e>0)if(1===e&&n[1]-n[0]<r){let e=n[1];for(;e-n[0]>h+3*l;){e-=h;const r=Math.round(i+e)-.5*l;t.strokePath({path:new b(r,s).lineTo(r,s+a),color:this.foregroundColor,lineWidth:1*l,opacity:100/255})}}else if(e===n.length-1&&n[e]-n[e-1]<r){let r=n[e-1];for(;n[e]-r>h+3*l;){r+=h;const e=Math.round(i+r)-.5*l;t.strokePath({path:new b(e,s).lineTo(e,s+a),color:this.foregroundColor,lineWidth:1*l,opacity:100/255})}}else for(let r=0;r<o;r++){let h=i+n[e-1]+(n[e]-n[e-1])*r/o;h=Math.round(h)-.5*l,t.strokePath({path:new b(h,s).lineTo(h,s+a),color:this.foregroundColor,lineWidth:1*l,opacity:100/255})}}drawMinorYTicks(t,e,i,s){const{gridStepInPixel:r}=this;let o,h;r/5>=this.minorTickMarkStepHint?(o=5,h=Math.floor(r/5)):r/4>=this.minorTickMarkStepHint?(o=4,h=Math.floor(r/4)):(o=2,h=Math.floor(r/2));const{labelPositions:n,minorTickLength:a,majorTickLength:l,scale:d}=this;if(e>0)if(1===e&&n[1]-n[0]<r){let e=n[1];for(;e-n[0]>h+3*d;){e-=h;const r=Math.round(s-e)-.5*d;t.strokePath({path:new b(i+l-a,r).lineTo(i+l,r),color:this.foregroundColor,lineWidth:1*d,opacity:100/255})}}else if(e===n.length-1&&n[e]-n[e-1]<r){let r=n[e-1];for(;n[e]-r>h+3*d;){r+=h;const e=Math.round(s-r)-.5*d;t.strokePath({path:new b(i+l-a,e).lineTo(i+l,e),color:this.foregroundColor,lineWidth:1*d,opacity:100/255})}}else for(let r=0;r<o;r++){let h=s-n[e-1]-(n[e]-n[e-1])*r/o;h=Math.round(h)-.5*d,t.strokePath({path:new b(i+l-a,h).lineTo(i+l,h),color:this.foregroundColor,lineWidth:1*d,opacity:100/255})}}updateLabels(t,e){if(this.labels=[],this.labelValues=[],this.labelPositions=[],this.showScale)if(this.logScale)this.updateLabelsForLogScale(this.minimum,this.maximum,e);else{const t=this.getGridStep(e,this.minimum,this.maximum),i=Math.max(Math.abs(this.minimum),Math.abs(this.maximum)),s=this.maximum/i-this.minimum/i;this.gridStepInPixel=Math.floor(e*(t/i)/s),this.updateLabelsForLinearScale(this.minimum,this.maximum,e,t)}this.updateVisibility(t)}getGridStep(t,e,i){t<=0&&(t=1);let s=!1;if(e>=i)if(i===e)i++;else{s=!0;const t=e;e=i,i=t}const r=Math.abs(i-e);let o=this.majorTickStepHint;o>t&&(o=t);let h,n=r/t*o,a=0;if(n<1){if(0!=n)for(;n<1;)n*=10,a--}else for(;n>=10;)n/=10,a++;return h=n>7.5?10*Math.pow(10,a):n>3.5?5*Math.pow(10,a):n>1.5?2*Math.pow(10,a):Math.pow(10,a),s&&(h=-h),h}updateLabelsForLogScale(t,e,i){t<=0&&(t=.1),e<=t&&(e=t+100);const s=e<t,r=Math.log10(t),o=Math.ceil(r),h=Math.ceil(Math.log10(e));let n,a=Math.pow(10,o-1);n=t%a<=0||s?t-t%a:t-t%a+a,(s&&t>n||!s&&t<n)&&this.addMinMaxTickInfo(t,i,!0);for(let t=o;s?t>=h:t<=h;t+=s?-1:1)if(Math.abs(h-o)>20){const s=Math.pow(10,t);if(s>e)break;this.addTickInfo(s,e,r,i)}else{for(let o=n;(s?o>=Math.pow(10,t-1):o<=Math.pow(10,t))&&!(s?o<e:o>e);o=s?o-a:o+a)this.addTickInfo(o,e,r,i);a=s?a/Math.pow(10,1):a*Math.pow(10,1),n=s?Math.pow(10,t-1):a+Math.pow(10,t)}(s?e<this.labelValues[this.labelValues.length-1]:e>this.labelValues[this.labelValues.length-1])&&this.addMinMaxTickInfo(e,i,!1)}addMinMaxTickInfo(t,e,i){i?(this.labelValues.push(t),this.labels.push(this.format(t)),this.labelPositions.push(this.margin)):(this.labelValues.push(t),this.labels.push(this.format(t)),this.labelPositions.push(this.margin+e))}addTickInfo(t,e,i,s){this.labels.push(this.format(t));const r=Math.floor((Math.log10(t)-i)/(Math.log10(e)-i)*s)+this.margin;this.labelPositions.push(r),this.labelValues.push(t)}updateLabelsForLinearScale(t,e,i,s){let r;r=t%s<=0?t-t%s:t-t%s+s,t>r==e<t&&(this.labelValues.push(t),this.labels.push(this.format(t)),this.labelPositions.push(this.margin));let o=1;const h=Math.max(Math.abs(t),Math.abs(e));s/=h,r/=h;const n=(e/=h)-(t/=h);for(let a=r;e>=t?a<e:a>e;a=r+o++*s){const e=a*h;this.labels.push(this.format(e)),this.labelValues.push(e);const s=Math.floor((a-t)/n*i)+this.margin;this.labelPositions.push(s)}e*=h,this.labelValues.push(e),this.labels.push(this.format(e)),this.labelPositions.push(this.margin+i)}updateVisibility(t){if(this.labelVisibilities=[],!this.labelPositions.length)return;for(let t=0;t<this.labelPositions.length;t++)this.labelVisibilities.push(!0);let e=0,i=null;for(let s=0;s<this.labelPositions.length;s++){let r=!0;const o=this.labels[s],h=this.labelPositions[s];0!==s&&(r=this.hasSpaceToDraw(t,e,h,i||"",o));const n=o===i&&0!==s&&s!==this.labelPositions.length-1;let a=!0;if(this.logScale){const t=Number(this.labels[s]);a=this.isMajorTick(t)||0===s||s===this.labelPositions.length-1}r&&!n&&a?(e=h,i=o):this.labelVisibilities[s]=!1}}hasSpaceToDraw(t,e,i,s,r){const o=t.measureText(r,this.scaleFont),h=t.measureText(s,this.scaleFont);let n=i-e,a=Math.floor(this.horizontal?o.width/2+h.width/2:o.height),l=!0,d=!0;if(i!=this.labelPositions[this.labelPositions.length-1]){l=n>a+this.tickLabelGap;const e=t.measureText(this.labels[this.labels.length-1],this.scaleFont);n=this.labelPositions[this.labelPositions.length-1]-i,a=Math.floor(this.horizontal?o.width/2+e.width/2:o.height),d=n>a+this.tickLabelGap}return l&&d}isMajorTick(t){if(!this.logScale)return!0;const e=Math.log10(t);return e===Math.round(e)}format(t){if(0===this.timeFormat)return this.scaleFormat?new Lr(this.scaleFormat).format(t):String(Number(t.toFixed(2)));const e=new Date(t);switch(this.timeFormat){case 1:return this.formatDate(e,{year:!0,month:!0,day:!0})+"\n"+this.formatTime(e,{hours:!0,minutes:!0,seconds:!0,milliseconds:!1});case 2:return this.formatDate(e,{year:!0,month:!0,day:!0})+"\n"+this.formatTime(e,{hours:!0,minutes:!0,seconds:!0,milliseconds:!0});case 3:return this.formatTime(e,{hours:!0,minutes:!0,seconds:!0,milliseconds:!1});case 4:return this.formatTime(e,{hours:!0,minutes:!0,seconds:!0,milliseconds:!0});case 5:return this.formatTime(e,{hours:!0,minutes:!0,seconds:!1,milliseconds:!1});case 6:return this.formatDate(e,{year:!0,month:!0,day:!0});case 7:return`${so[e.getUTCMonth()]} ${e.getUTCDate()}`;case 8:const t=Math.abs(this.maximum-this.minimum);return t<=5e3?this.formatTime(e,{hours:!1,minutes:!1,seconds:!0,milliseconds:!0}):t<=18e5?this.formatTime(e,{hours:!0,minutes:!0,seconds:!0,milliseconds:!1}):t<=864e5?this.formatTime(e,{hours:!0,minutes:!0,seconds:!1,milliseconds:!1}):t<=6048e5?this.formatDate(e,{year:!1,month:!0,day:!0})+"\n"+this.formatTime(e,{hours:!0,minutes:!0,seconds:!1,milliseconds:!1}):t<=2592e6?this.formatDate(e,{year:!1,month:!0,day:!0}):this.formatDate(e,{year:!0,month:!0,day:!0})}return""}formatDate(t,e){let i="";if(e.year&&(i+=t.getUTCFullYear()),e.month){e.year&&(i+="-");const s=t.getUTCMonth();i+=(s<10?"0":"")+s}if(e.day){e.month&&(i+="-");const s=t.getUTCDate();i+=(s<10?"0":"")+s}return i}formatTime(t,e){let i="";if(e.hours){const e=t.getUTCHours();i+=(e<10?"0":"")+e}if(e.minutes){e.hours&&(i+=":");const s=t.getUTCMinutes();i+=(s<10?"0":"")+s}if(e.seconds){e.minutes&&(i+=":");const s=t.getUTCSeconds();i+=(s<10?"0":"")+s}if(e.milliseconds){e.seconds&&(i+=".");const s=t.getUTCMilliseconds();i+=(s<10?"00":s<100?"0":"")+s}return i}get spaceBetweenMarkAndLabel(){return 2*this.scale}get majorTickLength(){return 6*this.scale}get minorTickLength(){return 3*this.scale}get minorTickMarkStepHint(){return 4*this.scale}get tickLabelGap(){return 2*this.scale}}const oo="color_map",ho="crop_bottom",no="crop_left",ao="crop_right",lo="crop_top",co="data_height",po="data_width",go="font",uo="graph_area_height",mo="graph_area_width",xo="maximum",fo="minimum",wo="show_ramp",yo="x_axis_axis_color",vo="x_axis_axis_title",bo="x_axis_major_tick_step_hint",To="x_axis_maximum",So="x_axis_minimum",Vo="x_axis_scale_font",Ao="x_axis_show_minor_ticks",_o="x_axis_title_font",Lo="x_axis_visible",Co="y_axis_axis_color",Po="y_axis_axis_title",Mo="y_axis_major_tick_step_hint",ko="y_axis_maximum",Ro="y_axis_minimum",Eo="y_axis_scale_font",Wo="y_axis_show_minor_ticks",Bo="y_axis_title_font",Io="y_axis_visible";class Oo extends ge{constructor(t,e){super(t,e),this.properties.add(new Y(oo)),this.properties.add(new $(ho)),this.properties.add(new $(no)),this.properties.add(new $(ao)),this.properties.add(new $(lo)),this.properties.add(new $(co)),this.properties.add(new $(po)),this.properties.add(new $(uo)),this.properties.add(new $(mo)),this.properties.add(new q(go)),this.properties.add(new G(xo)),this.properties.add(new G(fo)),this.properties.add(new z(wo)),this.properties.add(new U(yo)),this.properties.add(new D(vo)),this.properties.add(new $(bo)),this.properties.add(new G(To)),this.properties.add(new G(So)),this.properties.add(new q(Vo)),this.properties.add(new z(Ao)),this.properties.add(new q(_o)),this.properties.add(new z(Lo)),this.properties.add(new U(Co)),this.properties.add(new D(Po)),this.properties.add(new $(Mo)),this.properties.add(new G(ko)),this.properties.add(new G(Ro)),this.properties.add(new q(Eo)),this.properties.add(new z(Wo)),this.properties.add(new q(Bo)),this.properties.add(new z(Io))}draw(t){const{scale:e}=this;let i=this.area;this.borderAlarmSensitive&&(i=d(i,2*e));const s=this.alarmSensitiveBackgroundColor;t.fillRect(Object.assign(Object.assign({},i),{color:s}));const{graphAreaWidth:r,graphAreaHeight:o}=this;this.xAxisVisible&&t.measureText(this.xAxisAxisTitle,this.xAxisTitleFont).height;let h=0;this.yAxisVisible&&(h=t.measureText(this.yAxisAxisTitle,this.yAxisTitleFont).height);const n=new ro(e,this.xAxisScaleFont,this.xAxisMinimum,this.xAxisMaximum,!1,this.xAxisMajorTickStepHint,this.xAxisAxisColor,this.xAxisShowMinorTicks,this.xAxisVisible),a=n.calculateMargin(t,!0),l=new ro(e,this.yAxisScaleFont,this.yAxisMinimum,this.yAxisMaximum,!1,this.yAxisMajorTickStepHint,this.yAxisAxisColor,this.yAxisShowMinorTicks,this.yAxisVisible),c=l.calculateMargin(t,!1),p=n.measureHorizontalHeight(t),g=o+2*c,u=l.drawVertical(t,i.x+h,i.y,g,!0),m=r+2*a,x=i.x+h+u-a,f=i.y+g+p-c;n.drawHorizontal(t,x,f,m);const w=1*e,y=Math.round(i.x+h+u)-w/2,v=Math.round(i.y+c)-w/2;t.strokePath({path:new b(y,v).lineTo(y,v+o),color:this.yAxisAxisColor,opacity:100/255,lineWidth:w});const T=y,S=v+o+w;t.strokePath({path:new b(T,S).lineTo(T+r,S),color:this.xAxisAxisColor,opacity:100/255,lineWidth:w});const{dataWidth:V,dataHeight:A,colorMap:_}=this,{minimum:L,maximum:C}=this,[P,M]=_.getMinMax();if(this.value&&this.value.length){const e=document.createElement("canvas"),{cropLeft:s,cropRight:n,cropTop:a,cropBottom:d}=this;e.width=V-s-n,e.height=A-a-d;const c=e.getContext("2d");for(let t=s;t<V-n;t++)for(let e=a;e<A-d;e++){let i=this.value[e*V+t];if(_.autoscale){i=P+(i-L)/(C-L)*(M-P)}const[r,o,h]=_.lookup(i);c.fillStyle=`rgb(${r},${o},${h})`,c.fillRect(t-s,e-a,1,1)}const p=Math.round(i.x+h+u),g=Math.round(i.y+l.margin);t.ctx.drawImage(e,p,g,r,o)}if(this.showRamp){const s=new ro(e,this.font,L,C,!1,50*e,this.alarmSensitiveForegroundColor,!1,!0),n=i.y+l.margin,a=o,d=s.drawVertical(t,i.x+i.width,n,a,!1,!0),c=i.x+h+u+r+this.gap,p=i.width-h-u-r-d-this.gap,g=a-2*s.margin,m=document.createElement("canvas");m.width=p,m.height=g;const x=m.getContext("2d");for(let t=0;t<g;t++){let e=C-t/g*(C-L);if(_.autoscale){e=P+(e-L)/(C-L)*(M-P)}const[i,s,r]=_.lookup(e);x.fillStyle=`rgb(${i},${s},${r})`,x.fillRect(0,t,p,1)}t.ctx.drawImage(m,c,n+s.margin)}if(this.xAxisVisible){let e=i.x+u+r/2;this.yAxisVisible&&(e+=h),t.fillText({x:e,y:i.y+i.height,align:"center",baseline:"bottom",font:this.xAxisTitleFont,color:this.xAxisAxisColor,text:this.xAxisAxisTitle})}this.yAxisVisible&&(t.ctx.save(),t.ctx.translate(i.x+h/2,i.y+g/2),t.ctx.rotate(-Math.PI/2),t.fillText({x:0,y:0,align:"center",baseline:"middle",font:this.yAxisTitleFont,color:this.yAxisAxisColor,text:this.yAxisAxisTitle}),t.ctx.restore())}get gap(){return 3*this.scale}get colorMap(){return this.properties.getValue(oo)}get cropBottom(){return this.properties.getValue(ho)}get cropLeft(){return this.properties.getValue(no)}get cropRight(){return this.properties.getValue(ao)}get cropTop(){return this.properties.getValue(lo)}get dataHeight(){return this.properties.getValue(co)}get dataWidth(){return this.properties.getValue(po)}get font(){return this.properties.getValue(go).scale(this.scale)}get graphAreaHeight(){return this.scale*this.properties.getValue(uo)}get graphAreaWidth(){return this.scale*this.properties.getValue(mo)}get maximum(){return this.properties.getValue(xo)}get minimum(){return this.properties.getValue(fo)}get showRamp(){return this.properties.getValue(wo)}get xAxisAxisColor(){return this.properties.getValue(yo)}get xAxisAxisTitle(){return this.properties.getValue(vo)}get xAxisMajorTickStepHint(){return this.scale*this.properties.getValue(bo)}get xAxisMaximum(){return this.properties.getValue(To)}get xAxisMinimum(){return this.properties.getValue(So)}get xAxisScaleFont(){return this.properties.getValue(Vo).scale(this.scale)}get xAxisShowMinorTicks(){return this.properties.getValue(Ao)}get xAxisTitleFont(){return this.properties.getValue(_o).scale(this.scale)}get xAxisVisible(){return this.properties.getValue(Lo)}get yAxisAxisColor(){return this.properties.getValue(Co)}get yAxisAxisTitle(){return this.properties.getValue(Po)}get yAxisMajorTickStepHint(){return this.scale*this.properties.getValue(Mo)}get yAxisMaximum(){return this.properties.getValue(ko)}get yAxisMinimum(){return this.properties.getValue(Ro)}get yAxisScaleFont(){return this.properties.getValue(Eo).scale(this.scale)}get yAxisShowMinorTicks(){return this.properties.getValue(Wo)}get yAxisTitleFont(){return this.properties.getValue(Bo).scale(this.scale)}get yAxisVisible(){return this.properties.getValue(Io)}}const Ho="data_type",Fo="effect_3d",No="state_count",Do="square_led",jo="off_color",$o="off_label",Go="font",zo="on_color",Uo="on_label",qo="bulb_border",Yo="bulb_border_color",Xo="state_color_fallback",Ko="state_label_fallback",Zo="show_boolean_label";class Jo extends ge{constructor(t,i){super(t,i),this.states=[],this.properties.add(new $("bit")),this.properties.add(new $(Ho)),this.properties.add(new z(Fo)),this.properties.add(new z(Do)),this.properties.add(new $(No,2)),this.properties.add(new U(jo)),this.properties.add(new D($o)),this.properties.add(new U(zo)),this.properties.add(new D(Uo)),this.properties.add(new q(Go)),this.properties.add(new z(Zo)),this.properties.add(new U(Xo)),this.properties.add(new D(Ko)),this.properties.add(new $(qo,3)),this.properties.add(new U(Yo,e.DARK_GRAY))}parseNode(t){if(super.parseNode(t),this.stateCount>2)for(let e=0;e<this.stateCount;e++){const i=new U(`state_color_${e}`);i.value=t.getColor(`state_color_${e}`),this.properties.add(i);const s=new D(`state_label_${e}`);s.value=t.getString(`state_label_${e}`),this.properties.add(s);const r=new G(`state_value_${e}`);r.value=t.getFloat(`state_value_${e}`),this.properties.add(r),this.states.push({label:this.properties.getValue(s.name),color:this.properties.getValue(i.name),value:this.properties.getValue(r.name)})}}init(){this.areaRegion={id:`${this.wuid}-area`,click:()=>{const t={pvName:this.pvName};this.display.fireEvent("openpv",t)},cursor:"pointer",tooltip:()=>this.tooltip}}get booleanValue(){var t,e,i;return 0===this.dataType?this.bit<0?Boolean(null===(t=this.pv)||void 0===t?void 0:t.toNumber()):void 0!==(null===(e=this.pv)||void 0===e?void 0:e.value)&&((null===(i=this.pv)||void 0===i?void 0:i.value)>>this.bit&1)>0:(this.dataType,!1)}get bulbColor(){var t;if(this.stateCount<=2)return this.booleanValue?this.onColor:this.offColor;for(const e of this.states)if(e.value===(null===(t=this.pv)||void 0===t?void 0:t.value))return e.color;return this.stateColorFallback}get label(){var t;if(2===this.stateCount)return this.booleanValue?this.onLabel:this.offLabel;for(const e of this.states)if(e.value===(null===(t=this.pv)||void 0===t?void 0:t.value))return e.label;return this.stateLabelFallback}draw(t){const e=d(this.bounds,3*this.scale);this.squareLed?this.effect3d?this.drawSquare3d(t,e):this.drawSquare2d(t,e):this.effect3d?this.drawCircle3d(t,e):this.drawCircle2d(t,e),this.showBooleanLabel&&t.fillText({x:e.x+e.width/2,y:e.y+e.height/2,font:this.font,baseline:"middle",align:"center",color:this.foregroundColor,text:this.label})}drawCircle2d(t,e){const i=e.x+e.width/2,s=e.y+e.height/2;let r=e.width/2,o=e.height/2;if(this.bulbBorder>0&&(r-=this.bulbBorder/2,o-=this.bulbBorder/2),t.fillEllipse({cx:i,cy:s,rx:r,ry:o,color:this.bulbColor}),t.strokeEllipse({cx:i,cy:s,rx:r,ry:o,color:this.bulbBorderColor,lineWidth:this.bulbBorder}),this.pv&&this.pv.navigable&&!this.pv.disconnected){t.addHitRegion(this.areaRegion).addEllipse(i,s,r,o,0,0,2*Math.PI)}}drawCircle3d(t,i){const s=i.x+i.width/2,r=i.y+i.height/2;let o=i.width/2,h=i.height/2;t.fillEllipse({cx:s,cy:r,rx:o,ry:h,color:e.WHITE});let n=t.createLinearGradient(i.x,i.y,i.x+i.width,i.y+i.height);n.addColorStop(0,this.bulbBorderColor.toString()),n.addColorStop(1,this.bulbBorderColor.withAlpha(0).toString()),t.fillEllipse({cx:s,cy:r,rx:o,ry:h,gradient:n});if(o=(i.width-2*this.bulbBorder)/2,h=(i.height-2*this.bulbBorder)/2,t.fillEllipse({cx:s,cy:r,rx:o,ry:h,color:this.bulbColor}),n=t.createLinearGradient(i.x,i.y,i.x+i.width,i.y+i.height),n.addColorStop(0,e.WHITE.toString()),n.addColorStop(1,this.bulbBorderColor.withAlpha(0).toString()),t.fillEllipse({cx:s,cy:r,rx:o,ry:h,gradient:n}),this.pv&&this.pv.navigable&&!this.pv.disconnected){t.addHitRegion(this.areaRegion).addEllipse(s,r,o,h,0,0,2*Math.PI)}}drawSquare2d(t,e){const i=a(e.x,e.y,e.width,e.height,this.bulbBorder);if(t.fillRect(Object.assign(Object.assign({},i),{color:this.bulbColor})),t.strokeRect(Object.assign(Object.assign({},i),{color:this.bulbBorderColor,lineWidth:this.bulbBorder})),this.pv&&this.pv.navigable&&!this.pv.disconnected){t.addHitRegion(this.areaRegion).addRect(e.x,e.y,e.width,e.height)}}drawSquare3d(t,e){if(t.fillRect(Object.assign(Object.assign({},e),{color:this.bulbBorderColor})),this.pv&&this.pv.navigable&&!this.pv.disconnected){t.addHitRegion(this.areaRegion).addRect(e.x,e.y,e.width,e.height)}let i=t.createLinearGradient(e.x,e.y,e.x+e.width,e.y);i.addColorStop(0,"rgba(0,0,0,0.078)"),i.addColorStop(1,"rgba(0,0,0,0.39)"),t.fillPath({gradient:i,path:new b(e.x,e.y).lineTo(e.x+this.bulbBorder,e.y+this.bulbBorder).lineTo(e.x+this.bulbBorder,e.y+e.height-this.bulbBorder).lineTo(e.x,e.y+e.height)}),i=t.createLinearGradient(e.x,e.y,e.x,e.y+e.height),i.addColorStop(0,"rgba(0,0,0,0.078)"),i.addColorStop(1,"rgba(0,0,0,0.39)"),t.fillPath({gradient:i,path:new b(e.x,e.y).lineTo(e.x+this.bulbBorder,e.y+this.bulbBorder).lineTo(e.x+e.width-this.bulbBorder,e.y+this.bulbBorder).lineTo(e.x+e.width,e.y)}),i=t.createLinearGradient(e.x,e.y,e.x+e.width,e.y),i.addColorStop(0,"rgba(255,255,255,0.078)"),i.addColorStop(1,"rgba(255,255,255,0.39)"),t.fillPath({gradient:i,path:new b(e.x+e.width,e.y).lineTo(e.x+e.width-this.bulbBorder,e.y+this.bulbBorder).lineTo(e.x+e.width-this.bulbBorder,e.y+e.height-this.bulbBorder).lineTo(e.x+e.width,e.y+e.height)}),i=t.createLinearGradient(e.x,e.y,e.x,e.y+e.height),i.addColorStop(0,"rgba(255,255,255,0.078)"),i.addColorStop(1,"rgba(255,255,255,0.39)"),t.fillPath({gradient:i,path:new b(e.x,e.y+e.height).lineTo(e.x+this.bulbBorder,e.y+e.height-this.bulbBorder).lineTo(e.x+e.width-this.bulbBorder,e.y+e.height-this.bulbBorder).lineTo(e.x+e.width,e.y+e.height)});const s=e.x+this.bulbBorder,r=e.y+this.bulbBorder,o=e.width-2*this.bulbBorder,h=e.height-2*this.bulbBorder;t.fillRect({x:s,y:r,width:o,height:h,color:this.bulbColor}),i=t.createLinearGradient(e.x,e.y,e.x+e.width,e.y+e.height),i.addColorStop(0,"rgba(255,255,255,0.784)"),i.addColorStop(1,this.bulbColor.withAlpha(0).toString()),t.fillRect({x:s,y:r,width:o,height:h,gradient:i})}get bit(){return this.properties.getValue("bit")}get dataType(){return this.properties.getValue(Ho)}get squareLed(){return this.properties.getValue(Do)}get showBooleanLabel(){return this.properties.getValue(Zo)}get font(){return this.properties.getValue(Go).scale(this.scale)}get effect3d(){return this.properties.getValue(Fo)}get stateCount(){return this.properties.getValue(No)}get bulbBorder(){return this.scale*this.properties.getValue(qo)}get bulbBorderColor(){return this.properties.getValue(Yo)}get offLabel(){return this.properties.getValue($o)}get offColor(){return this.properties.getValue(jo)}get onLabel(){return this.properties.getValue(Uo)}get onColor(){return this.properties.getValue(zo)}get stateLabelFallback(){return this.properties.getValue(Ko)}get stateColorFallback(){return this.properties.getValue(Xo)}}const Qo=u(45),th=(1-Math.sin(Qo)/2)/(2*Math.cos(Qo)),eh="color_hi",ih="color_hihi",sh="color_lo",rh="color_lolo",oh="font",hh="level_hi",nh="level_hihi",ah="level_lo",lh="level_lolo",dh="log_scale",ch="minimum",ph="maximum",gh="needle_color",uh="ramp_gradient",mh="scale_font",xh="show_hi",fh="show_hihi",wh="show_lo",yh="show_lolo",vh="show_ramp",bh="value_label_format";class Th extends ge{constructor(t,e){super(t,e),this.properties.add(new U(eh)),this.properties.add(new U(ih)),this.properties.add(new U(sh)),this.properties.add(new U(rh)),this.properties.add(new q(oh)),this.properties.add(new $(hh)),this.properties.add(new $(nh)),this.properties.add(new $(ah)),this.properties.add(new $(lh)),this.properties.add(new z(dh)),this.properties.add(new $(ph)),this.properties.add(new $(ch)),this.properties.add(new U(gh)),this.properties.add(new z(uh)),this.properties.add(new q(mh)),this.properties.add(new z(xh)),this.properties.add(new z(fh)),this.properties.add(new z(wh)),this.properties.add(new z(yh)),this.properties.add(new z(vh,!0)),this.properties.add(new D(bh))}init(){this.areaRegion={id:`${this.wuid}-area`,click:()=>{const t={pvName:this.pvName};this.display.fireEvent("openpv",t)},tooltip:()=>this.tooltip,cursor:"pointer"}}draw(t){if(t.fillRect({x:this.x,y:this.y,width:this.width,height:this.height,color:this.backgroundColor}),this.showRamp&&this.drawRamp(t),this.pv&&this.pv.navigable&&!this.pv.disconnected){t.addHitRegion(this.areaRegion).addRect(this.x,this.y,this.width,this.height)}}drawRamp(t){const e=String(this.minimum),i=t.measureText(e,this.scaleFont),s=String(this.maximum),r=t.measureText(s,this.scaleFont),o=Math.max(i.width,r.width)/2;let h=this.height,n=this.width;h>th*(n-2*o)&&(h=Math.floor(th*(n-2*o)));const a=h/(1-Math.sin(Qo)/2),l={x:Math.floor(this.x-a*(1-Math.cos(Qo))+o),y:this.y,width:Math.floor(2*a),height:Math.floor(2*a)},{rampWidth:c}=this,p=d(l,l.width/4-c,l.height/4-c);p.width=Math.min(p.width,p.height),p.height=p.width;const g=new Cr(c,135,45);g.lolo=this.levelLoLo,g.loloColor=this.colorLoLo,g.showLoLo=!0,g.lo=this.levelLo,g.loColor=this.colorLo,g.showLo=!0,g.hi=this.levelHi,g.hiColor=this.colorHi,g.showHi=!0,g.hihi=this.levelHiHi,g.hihiColor=this.colorHiHi,g.showHiHi=!0,g.minimum=this.minimum,g.maximum=this.maximum,g.gradient=this.rampGradient,g.logScale=this.logScale,g.draw(t,l,p),this.drawNeedle(t,l,g);const u=W.ARIAL_12_BOLD.scale(this.scale);if(this.pv&&void 0!==this.pv.value){const e=this.format(this.pv.value),i=t.measureText(e,u);t.fillText({x:l.x+l.width/2-i.width/2,y:l.y+l.height/2-l.height/4-(g.getRadius()-l.height/4)/2-i.height/2,align:"left",baseline:"top",font:u,text:e,color:this.foregroundColor})}}drawNeedle(t,e,i){const s=e.x+e.width/2,r=e.y+e.height/2;let o;if(this.pv&&void 0!==this.pv.value){const t=i.getValueInRange(this.pv.value);o=360-i.getValuePosition(t),this.maximum>this.minimum?t>this.maximum?o+=8:t<this.minimum&&(o-=8):t>this.minimum?o-=8:t<this.maximum&&(o+=8)}else o=360-i.getValuePosition(this.minimum+this.maximum/2);const h=u(o),{needleWidth:n,gapBetweenNeedleScale:a,scale:d}=this,c=l(s+e.width/4,r-n/2+3*d,s,r,h),p=l(s+i.getRadius()-a,r,s,r,h),g=l(s+e.width/4,r+n/2-3*d,s,r,h);t.fillPath({color:this.needleColor,path:new b(c.x,c.y).lineTo(p.x,p.y).lineTo(g.x,g.y).closePath()})}get needleWidth(){return 16*this.scale}get gapBetweenNeedleScale(){return-5*this.scale}get rampWidth(){return 12*this.scale}format(t){return this.valueLabelFormat?new Lr(this.valueLabelFormat).format(t):String(Number(t.toFixed(3)))}get colorLo(){return this.properties.getValue(sh)}get colorLoLo(){return this.properties.getValue(rh)}get colorHi(){return this.properties.getValue(eh)}get colorHiHi(){return this.properties.getValue(ih)}get font(){return this.properties.getValue(oh).scale(this.scale)}get levelLo(){return this.properties.getValue(ah)}get levelLoLo(){return this.properties.getValue(lh)}get levelHi(){return this.properties.getValue(hh)}get levelHiHi(){return this.properties.getValue(nh)}get logScale(){return this.properties.getValue(dh)}get minimum(){return this.properties.getValue(ch)}get maximum(){return this.properties.getValue(ph)}get needleColor(){return this.properties.getValue(gh)}get rampGradient(){return this.properties.getValue(uh)}get scaleFont(){return this.properties.getValue(mh).scale(this.scale)}get showLo(){return this.properties.getValue(wh)}get showLoLo(){return this.properties.getValue(yh)}get showHi(){return this.properties.getValue(xh)}get showHiHi(){return this.properties.getValue(fh)}get showRamp(){return this.properties.getValue(vh)}get valueLabelFormat(){return this.properties.getValue(bh)}}const Sh="color_hi",Vh="color_hihi",Ah="color_lo",_h="color_lolo",Lh="color_fillbackground",Ch="effect_3d",Ph="fill_color",Mh="fillcolor_alarm_sensitive",kh="font",Rh="horizontal",Eh="indicator_mode",Wh="level_hi",Bh="level_hihi",Ih="level_lo",Oh="level_lolo",Hh="limits_from_pv",Fh="log_scale",Nh="maximum",Dh="major_tick_step_hint",jh="minimum",$h="origin",Gh="origin_ignored",zh="scale_font",Uh="scale_format",qh="show_hi",Yh="show_hihi",Xh="show_label",Kh="show_lo",Zh="show_lolo",Jh="show_markers",Qh="show_minor_ticks",tn="show_scale",en="transparent_background",sn="value_label_format";class rn extends ge{constructor(t,e){super(t,e),this.properties.add(new U(Sh)),this.properties.add(new U(Vh)),this.properties.add(new U(Ah)),this.properties.add(new U(_h)),this.properties.add(new U(Lh)),this.properties.add(new z(Ch)),this.properties.add(new U(Ph)),this.properties.add(new z(Mh,!1)),this.properties.add(new q(kh)),this.properties.add(new z(Rh)),this.properties.add(new z(Eh)),this.properties.add(new G(Wh)),this.properties.add(new G(Bh)),this.properties.add(new G(Ih)),this.properties.add(new G(Oh)),this.properties.add(new z(Hh)),this.properties.add(new z(Fh)),this.properties.add(new G(Nh)),this.properties.add(new G(Dh)),this.properties.add(new G(jh)),this.properties.add(new G($h,0)),this.properties.add(new z(Gh,!0)),this.properties.add(new q(zh)),this.properties.add(new D(Uh)),this.properties.add(new z(qh)),this.properties.add(new z(Yh)),this.properties.add(new z(Xh)),this.properties.add(new z(Kh)),this.properties.add(new z(Zh)),this.properties.add(new z(Jh)),this.properties.add(new z(Qh)),this.properties.add(new z(tn)),this.properties.add(new z(en)),this.properties.add(new D(sn))}draw(t){let e=this.area;this.borderAlarmSensitive&&(e=d(this.area,2*this.scale));const i=this.alarmSensitiveBackgroundColor;this.transparentBackground||t.fillRect(Object.assign(Object.assign({},e),{color:i})),this.horizontal?this.drawHorizontal(t,e):this.drawVertical(t,e)}drawVertical(t,e){const i=this.alarmSensitiveForegroundColor,s=new ro(this.scale,this.scaleFont,this.min,this.max,this.logScale,this.majorTickStepHint,i,this.showMinorTicks,this.showScale);s.scaleFormat=this.scaleFormat;const r=s.drawVertical(t,e.x,e.y,e.height,!0);let o=0;this.showMarkers&&(o=this.drawVerticalMarkers(t,s,e)),this.drawVerticalBar(t,s,{x:e.x+r,y:e.y+s.margin,width:e.width-r-o,height:e.height-2*s.margin})}drawVerticalMarkers(t,e,i){const{lolo:s,lo:r,hi:o,hihi:h}=this,n=W.ARIAL_9.scale(this.scale);let a=0;if(this.showLoLo&&void 0!==s){const e=t.measureText("LOLO",n);a=Math.max(a,e.width)}if(this.showLo&&void 0!==r){const e=t.measureText("LO",n);a=Math.max(a,e.width)}if(this.showHi&&void 0!==o){const e=t.measureText("HI",n);a=Math.max(a,e.width)}if(this.showHiHi&&void 0!==h){const e=t.measureText("HIHI",n);a=Math.max(a,e.width)}const l=i.x+i.width;if(this.showLoLo&&void 0!==s){const i=l-a-this.markerGap,r=Math.round(e.getValuePosition(s));t.strokePath({path:new b(i,r).lineTo(i-this.markerTickLength,r),color:this.colorLoLo,lineWidth:this.markerTickLineWidth}),t.fillText({x:i+this.markerGap,y:r,text:"LOLO",align:"left",baseline:"middle",color:this.colorLoLo,font:n})}if(this.showLo&&void 0!==r){const i=l-a-this.markerGap,s=Math.round(e.getValuePosition(r));t.strokePath({path:new b(i,s).lineTo(i-this.markerTickLength,s),color:this.colorLo,lineWidth:this.markerTickLineWidth}),t.fillText({x:i+this.markerGap,y:s,text:"LO",align:"left",baseline:"middle",color:this.colorLo,font:n})}if(this.showHi&&void 0!==o){const i=l-a-this.markerGap,s=Math.round(e.getValuePosition(o));t.strokePath({path:new b(i,s).lineTo(i-this.markerTickLength,s),color:this.colorHi,lineWidth:this.markerTickLineWidth}),t.fillText({x:i+this.markerGap,y:s,text:"HI",align:"left",baseline:"middle",color:this.colorHi,font:n})}if(this.showHiHi&&void 0!==h){const i=l-a-this.markerGap,s=Math.round(e.getValuePosition(h));t.strokePath({path:new b(i,s).lineTo(i-this.markerTickLength,s),color:this.colorHiHi,lineWidth:this.markerTickLineWidth}),t.fillText({x:i+this.markerGap,y:s,text:"HIHI",align:"left",baseline:"middle",color:this.colorHiHi,font:n})}return this.markerTickLength+this.markerGap+a}drawVerticalBar(t,i,s){var r;const{outlineWidth:o}=this;if(t.fillRect(Object.assign(Object.assign({},s),{color:this.colorFillbackground})),this.effect3d){const i=t.createLinearGradient(s.x,0,s.x+s.width,0);i.addColorStop(0,e.WHITE.toString()),i.addColorStop(1,this.colorFillbackground.withAlpha(0).toString()),t.fillRect(Object.assign(Object.assign({},s),{gradient:i}));const r=d(s,o/2);t.strokeRect(Object.assign(Object.assign({},r),{color:e.GRAY,lineWidth:o}))}const h=this.alarmSensitiveFillColor;if(this.indicatorMode){const r=Math.round(i.getValuePosition(this.getFillValue())),n=s.width,a=this.thumbBreadth,l=g([{x:0,y:a/2},{x:n/2,y:0},{x:n-1,y:a/2},{x:n/2,y:a}],s.x,r-a/2),d=b.fromPoints(l);if(this.effect3d){const{x:i,y:s}=l[0],{x:r,y:n}=l[2],a=t.createLinearGradient(i,s,r,n);a.addColorStop(0,e.WHITE.toString()),a.addColorStop(1,h.toString()),t.fillPath({path:d,gradient:a}),t.strokePath({path:d,color:e.GRAY,lineWidth:o})}else t.fillPath({path:d,color:h})}else{let r=this.originIgnored?this.min:this.origin,n=this.getFillValue();if(n<r){const t=r;r=n,n=t}const a=Math.round(i.getValuePosition(r)),l=Math.round(i.getValuePosition(n)),c=d(Object.assign(Object.assign({},s),{y:a,height:l-a}),o);if(t.fillRect(Object.assign(Object.assign({},c),{color:h})),this.effect3d){const i=t.createLinearGradient(c.x,0,c.x+c.width,0);i.addColorStop(0,e.WHITE.toString()),i.addColorStop(1,h.withAlpha(0).toString()),t.fillRect(Object.assign(Object.assign({},c),{gradient:i}))}}const n=null===(r=this.pv)||void 0===r?void 0:r.value;this.showLabel&&void 0!==n&&t.fillText({x:s.x+s.width/2,y:s.y+s.height/2,align:"center",baseline:"middle",color:this.alarmSensitiveForegroundColor,font:this.font,text:this.format(n)})}drawHorizontal(t,e){const i=this.alarmSensitiveForegroundColor,s=new ro(this.scale,this.scaleFont,this.min,this.max,this.logScale,this.majorTickStepHint,i,this.showMinorTicks,this.showScale);s.scaleFormat=this.scaleFormat;const r=s.drawHorizontal(t,e.x,e.y+e.height,e.width);let o=0;this.showMarkers&&(o=this.drawHorizontalMarkers(t,s,e)),this.drawHorizontalBar(t,s,{x:e.x+s.margin,y:e.y+o,width:e.width-2*s.margin,height:e.height-r-o})}drawHorizontalMarkers(t,e,i){const{lolo:s,lo:r,hi:o,hihi:h}=this,n=W.ARIAL_9.scale(this.scale);let a=0;if(this.showLoLo&&void 0!==s){const e=t.measureText("LOLO",n);a=Math.max(a,e.height)}if(this.showLo&&void 0!==r){const e=t.measureText("LO",n);a=Math.max(a,e.height)}if(this.showHi&&void 0!==o){const e=t.measureText("HI",n);a=Math.max(a,e.height)}if(this.showHiHi&&void 0!==h){const e=t.measureText("HIHI",n);a=Math.max(a,e.height)}const l=i.y;if(this.showLoLo&&void 0!==s){const i=Math.round(e.getValuePosition(s)),r=l+a+this.markerGap;t.strokePath({path:new b(i,r).lineTo(i,r+this.markerTickLength),color:this.colorLoLo,lineWidth:this.markerTickLineWidth}),t.fillText({x:i,y:l,text:"LOLO",align:"center",baseline:"top",color:this.colorLoLo,font:n})}if(this.showLo&&void 0!==r){const i=Math.round(e.getValuePosition(r)),s=l+a+this.markerGap;t.strokePath({path:new b(i,s).lineTo(i,s+this.markerTickLength),color:this.colorLo,lineWidth:this.markerTickLineWidth}),t.fillText({x:i,y:l,text:"LO",align:"center",baseline:"top",color:this.colorLo,font:n})}if(this.showHi&&void 0!==o){const i=Math.round(e.getValuePosition(o)),s=l+a+this.markerGap;t.strokePath({path:new b(i,s).lineTo(i,s+this.markerTickLength),color:this.colorHi,lineWidth:this.markerTickLineWidth}),t.fillText({x:i,y:l,text:"HI",align:"center",baseline:"top",color:this.colorHi,font:n})}if(this.showHiHi&&void 0!==h){const i=Math.round(e.getValuePosition(h)),s=l+a+this.markerGap;t.strokePath({path:new b(i,s).lineTo(i,s+this.markerTickLength),color:this.colorHiHi,lineWidth:this.markerTickLineWidth}),t.fillText({x:i,y:l,text:"HIHI",align:"center",baseline:"top",color:this.colorHiHi,font:n})}return this.markerTickLength+this.markerGap+a}drawHorizontalBar(t,i,s){var r;const{outlineWidth:o}=this;if(t.fillRect(Object.assign(Object.assign({},s),{color:this.colorFillbackground})),this.effect3d){const i=t.createLinearGradient(0,s.y,0,s.y+s.height);i.addColorStop(0,e.WHITE.toString()),i.addColorStop(1,this.colorFillbackground.withAlpha(0).toString()),t.fillRect(Object.assign(Object.assign({},s),{gradient:i}));const r=d(s,o/2);t.strokeRect(Object.assign(Object.assign({},r),{color:e.GRAY,lineWidth:o}))}const h=this.alarmSensitiveFillColor;if(this.indicatorMode){const r=Math.round(i.getValuePosition(this.getFillValue())),n=s.height,a=this.thumbBreadth,l=g([{x:a/2,y:0},{x:a,y:n/2},{x:a/2,y:n-1},{x:0,y:n/2}],r-a/2,s.y),d=b.fromPoints(l);if(this.effect3d){const{x:i,y:s}=l[0],{x:r,y:n}=l[2],a=t.createLinearGradient(i,s,r,n);a.addColorStop(0,e.WHITE.toString()),a.addColorStop(1,h.toString()),t.fillPath({path:d,gradient:a}),t.strokePath({path:d,color:e.GRAY,lineWidth:o})}else t.fillPath({path:d,color:h})}else{let r=this.originIgnored?this.min:this.origin,n=this.getFillValue();if(n<r){const t=r;r=n,n=t}const a=Math.round(i.getValuePosition(r)),l=Math.round(i.getValuePosition(n)),c=d(Object.assign(Object.assign({},s),{x:a,width:l-a}),o);if(t.fillRect(Object.assign(Object.assign({},c),{color:h})),this.effect3d){const i=t.createLinearGradient(0,c.y,0,c.y+c.height);i.addColorStop(0,e.WHITE.toString()),i.addColorStop(1,h.withAlpha(0).toString()),t.fillRect(Object.assign(Object.assign({},c),{gradient:i}))}}const n=null===(r=this.pv)||void 0===r?void 0:r.value;this.showLabel&&void 0!==n&&t.fillText({x:s.x+s.width/2,y:s.y+s.height/2,align:"center",baseline:"middle",color:this.alarmSensitiveForegroundColor,font:this.font,text:this.format(n)})}get min(){var t,e;return this.limitsFromPv&&null!==(e=null===(t=this.pv)||void 0===t?void 0:t.lowerDisplayLimit)&&void 0!==e?e:this.minimum}get max(){var t,e;return this.limitsFromPv&&null!==(e=null===(t=this.pv)||void 0===t?void 0:t.upperDisplayLimit)&&void 0!==e?e:this.maximum}get lolo(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.lowerAlarmLimit:this.levelLoLo}get lo(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.lowerWarningLimit:this.levelLo}get hi(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.upperWarningLimit:this.levelHi}get hihi(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.upperAlarmLimit:this.levelHiHi}get markerTickLength(){return 10*this.scale}get markerTickLineWidth(){return 2*this.scale}get markerGap(){return 3*this.scale}get thumbBreadth(){return 13*this.scale}get outlineWidth(){return 1*this.scale}get alarmSensitiveFillColor(){if(this.fillColorAlarmSensitive){if(this.isMajorSeverity())return e.RED;if(this.isMinorSeverity())return e.ORANGE}return this.fillColor}getFillValue(){var t,e;let i=null!==(e=null===(t=this.pv)||void 0===t?void 0:t.value)&&void 0!==e?e:this.min;return i=Math.max(this.min,i),i=Math.min(this.max,i),i}format(t){return this.valueLabelFormat?new Lr(this.valueLabelFormat).format(t):String(Number(t.toFixed(2)))}get colorLo(){return this.properties.getValue(Ah)}get colorLoLo(){return this.properties.getValue(_h)}get colorHi(){return this.properties.getValue(Sh)}get colorHiHi(){return this.properties.getValue(Vh)}get colorFillbackground(){return this.properties.getValue(Lh)}get effect3d(){return this.properties.getValue(Ch)}get fillColorAlarmSensitive(){return this.properties.getValue(Mh)}get fillColor(){return this.properties.getValue(Ph)}get font(){return this.properties.getValue(kh).scale(this.scale)}get horizontal(){return this.properties.getValue(Rh)}get indicatorMode(){return this.properties.getValue(Eh)}get levelLo(){return this.properties.getValue(Ih)}get levelLoLo(){return this.properties.getValue(Oh)}get levelHi(){return this.properties.getValue(Wh)}get levelHiHi(){return this.properties.getValue(Bh)}get limitsFromPv(){return this.properties.getValue(Hh)}get logScale(){return this.properties.getValue(Fh)}get minimum(){return this.properties.getValue(jh)}get majorTickStepHint(){return this.scale*this.properties.getValue(Dh)}get maximum(){return this.properties.getValue(Nh)}get origin(){return this.properties.getValue($h)}get originIgnored(){return this.properties.getValue(Gh)}get scaleFont(){return this.properties.getValue(zh).scale(this.scale)}get scaleFormat(){return this.properties.getValue(Uh)}get showHi(){return this.properties.getValue(qh)}get showHiHi(){return this.properties.getValue(Yh)}get showLabel(){return this.properties.getValue(Xh)}get showLo(){return this.properties.getValue(Kh)}get showLoLo(){return this.properties.getValue(Zh)}get showMarkers(){return this.properties.getValue(Jh)}get showMinorTicks(){return this.properties.getValue(Qh)}get showScale(){return this.properties.getValue(tn)}get transparentBackground(){return this.properties.getValue(en)}get valueLabelFormat(){return this.properties.getValue(sn)}}const on="color_hi",hn="color_hihi",nn="color_lo",an="color_lolo",ln="color_fillbackground",dn="fill_color",cn="fillcolor_alarm_sensitive",pn="effect_3d",gn="level_hi",un="level_hihi",mn="level_lo",xn="level_lolo",fn="limits_from_pv",wn="log_scale",yn="maximum",vn="major_tick_step_hint",bn="minimum",Tn="scale_font",Sn="scale_format",Vn="show_hi",An="show_hihi",_n="show_lo",Ln="show_lolo",Cn="show_markers",Pn="show_minor_ticks",Mn="show_scale",kn="transparent_background",Rn=new e(160,160,160);class En extends ge{constructor(t,e){super(t,e),this.properties.add(new U(on)),this.properties.add(new U(hn)),this.properties.add(new U(nn)),this.properties.add(new U(an)),this.properties.add(new U(ln)),this.properties.add(new z(pn)),this.properties.add(new U(dn)),this.properties.add(new z(cn,!1)),this.properties.add(new G(gn)),this.properties.add(new G(un)),this.properties.add(new G(mn)),this.properties.add(new G(xn)),this.properties.add(new z(fn)),this.properties.add(new z(wn)),this.properties.add(new G(yn)),this.properties.add(new G(vn)),this.properties.add(new G(bn)),this.properties.add(new q(Tn)),this.properties.add(new D(Sn)),this.properties.add(new z(Vn)),this.properties.add(new z(An)),this.properties.add(new z(_n)),this.properties.add(new z(Ln)),this.properties.add(new z(Cn)),this.properties.add(new z(Pn)),this.properties.add(new z(Mn)),this.properties.add(new z(kn))}draw(t){const{scale:e,min:i,max:s}=this;let r=this.area;this.borderAlarmSensitive&&(r=d(r,2*e));const o=this.alarmSensitiveBackgroundColor;this.transparentBackground||t.fillRect(Object.assign(Object.assign({},r),{color:o}));const h=this.alarmSensitiveForegroundColor,n=new ro(e,this.scaleFont,i,s,this.logScale,this.majorTickStepHint,h,this.showMinorTicks,this.showScale);n.scaleFormat=this.scaleFormat;const a=n.drawVertical(t,r.x,r.y,r.height,!0);let l=0;this.showMarkers&&(l=this.drawMarkers(t,r,n)),this.drawTank(t,r,a,l,n)}drawMarkers(t,e,i){const{lolo:s,lo:r,hi:o,hihi:h}=this,n=W.ARIAL_9.scale(this.scale);let a=0;if(this.showLoLo&&void 0!==s){const e=t.measureText("LOLO",n);a=Math.max(a,e.width)}if(this.showLo&&void 0!==r){const e=t.measureText("LO",n);a=Math.max(a,e.width)}if(this.showHi&&void 0!==o){const e=t.measureText("HI",n);a=Math.max(a,e.width)}if(this.showHiHi&&void 0!==h){const e=t.measureText("HIHI",n);a=Math.max(a,e.width)}const l=e.x+e.width-a-this.markerGap-this.markerTickLength;if(this.showLoLo&&void 0!==s){const e=Math.round(i.getValuePosition(s));t.strokePath({path:new b(l,e).lineTo(l+this.markerTickLength,e),color:this.colorLoLo,lineWidth:this.markerTickLineWidth}),t.fillText({x:l+this.markerTickLength+this.markerGap,y:e,text:"LOLO",align:"left",baseline:"middle",color:this.colorLoLo,font:n})}if(this.showLo&&void 0!==r){const e=Math.round(i.getValuePosition(r));t.strokePath({path:new b(l,e).lineTo(l+this.markerTickLength,e),color:this.colorLo,lineWidth:this.markerTickLineWidth}),t.fillText({x:l+this.markerTickLength+this.markerGap,y:e,text:"LO",align:"left",baseline:"middle",color:this.colorLo,font:n})}if(this.showHi&&void 0!==o){const e=Math.round(i.getValuePosition(o));t.strokePath({path:new b(l,e).lineTo(l+this.markerTickLength,e),color:this.colorHi,lineWidth:this.markerTickLineWidth}),t.fillText({x:l+this.markerTickLength+this.markerGap,y:e,text:"HI",align:"left",baseline:"middle",color:this.colorHi,font:n})}if(this.showHiHi&&void 0!==h){const e=Math.round(i.getValuePosition(h));t.strokePath({path:new b(l,e).lineTo(l+this.markerTickLength,e),color:this.colorHiHi,lineWidth:this.markerTickLineWidth}),t.fillText({x:l+this.markerTickLength+this.markerGap,y:e,text:"HIHI",align:"left",baseline:"middle",color:this.colorHiHi,font:n})}return this.markerTickLength+this.markerGap+a}drawTank(t,i,s,r,o){const h=this.alarmSensitiveForegroundColor,{scale:n,outlineWidth:a}=this,l=i.x+s,c=i.y+o.margin,p=i.width-s-r,g=i.height-2*o.margin;let u=this.defaultCorner,m=.55;p<2*u&&(m=.6);const x=Math.floor(p*m);u>2*x-p-2*a&&(u=2*x-p);const f=o.getValuePosition(this.getFillValue()),w=this.alarmSensitiveFillColor;if(this.effect3d){t.fillRect({x:l,y:c,width:p,height:g,rx:u/2,ry:u/2,color:e.WHITE});let i=t.createLinearGradient(l,c,l+x+2*n,c);i.addColorStop(0,this.colorFillbackground.toString()),i.addColorStop(1,e.WHITE.withAlpha(0).toString()),t.fillRect({x:l,y:c,width:x,height:g,rx:u/2,ry:u/2,gradient:i}),i=t.createLinearGradient(l+p-x-2*n,c,l+p,c),i.addColorStop(0,e.WHITE.withAlpha(0).toString()),i.addColorStop(1,this.colorFillbackground.toString()),t.fillRect({x:l+p-x,y:c,width:x,height:g,rx:u/2,ry:u/2,gradient:i});const s=f,r=c+g-f;i=t.createLinearGradient(l,s,l+x+2*n,s),i.addColorStop(0,w.toString()),i.addColorStop(1,e.WHITE.withAlpha(0).toString()),t.fillRect({x:l,y:s,width:x,height:r,rx:u/2,ry:u/2,gradient:i}),i=t.createLinearGradient(l+p-x-2*n,s,l+p,s),i.addColorStop(0,e.WHITE.withAlpha(0).toString()),i.addColorStop(1,w.toString()),t.fillRect({x:l+p-x,y:s,width:x,height:r,rx:u/2,ry:u/2,gradient:i})}else t.fillRect({x:l,y:c,width:p,height:g,rx:u/2,ry:u/2,color:this.colorFillbackground}),t.fillRect({x:l,y:f,width:p,height:c+g-f,rx:u/2,ry:u/2,color:w});let y=d({x:l,y:c,width:p,height:g},a/2);t.strokeRect(Object.assign(Object.assign({},y),{rx:u/2,ry:u/2,color:this.effect3d?Rn:h,lineWidth:a}))}get min(){var t,e;return this.limitsFromPv&&null!==(e=null===(t=this.pv)||void 0===t?void 0:t.lowerDisplayLimit)&&void 0!==e?e:this.minimum}get max(){var t,e;return this.limitsFromPv&&null!==(e=null===(t=this.pv)||void 0===t?void 0:t.upperDisplayLimit)&&void 0!==e?e:this.maximum}get lolo(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.lowerAlarmLimit:this.levelLoLo}get lo(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.lowerWarningLimit:this.levelLo}get hi(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.upperWarningLimit:this.levelHi}get hihi(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.upperAlarmLimit:this.levelHiHi}get defaultCorner(){return 15*this.scale}get markerTickLength(){return 10*this.scale}get markerTickLineWidth(){return 2*this.scale}get markerGap(){return 3*this.scale}get outlineWidth(){return 1*this.scale}get alarmSensitiveFillColor(){if(this.fillColorAlarmSensitive){if(this.isMajorSeverity())return e.RED;if(this.isMinorSeverity())return e.ORANGE}return this.fillColor}getFillValue(){var t,e;let i=null!==(e=null===(t=this.pv)||void 0===t?void 0:t.value)&&void 0!==e?e:this.min;return i=Math.max(this.min,i),i=Math.min(this.max,i),i}get colorLo(){return this.properties.getValue(nn)}get colorLoLo(){return this.properties.getValue(an)}get colorHi(){return this.properties.getValue(on)}get colorHiHi(){return this.properties.getValue(hn)}get colorFillbackground(){return this.properties.getValue(ln)}get fillColorAlarmSensitive(){return this.properties.getValue(cn)}get fillColor(){return this.properties.getValue(dn)}get effect3d(){return this.properties.getValue(pn)}get levelLo(){return this.properties.getValue(mn)}get levelLoLo(){return this.properties.getValue(xn)}get levelHi(){return this.properties.getValue(gn)}get levelHiHi(){return this.properties.getValue(un)}get limitsFromPv(){return this.properties.getValue(fn)}get logScale(){return this.properties.getValue(wn)}get minimum(){return this.properties.getValue(bn)}get majorTickStepHint(){return this.scale*this.properties.getValue(vn)}get maximum(){return this.properties.getValue(yn)}get scaleFont(){return this.properties.getValue(Tn).scale(this.scale)}get scaleFormat(){return this.properties.getValue(Sn)}get showLo(){return this.properties.getValue(_n)}get showLoLo(){return this.properties.getValue(Ln)}get showHi(){return this.properties.getValue(Vn)}get showHiHi(){return this.properties.getValue(An)}get showMarkers(){return this.properties.getValue(Cn)}get showMinorTicks(){return this.properties.getValue(Pn)}get showScale(){return this.properties.getValue(Mn)}get transparentBackground(){return this.properties.getValue(kn)}}const Wn="font",Bn="format_type",In="horizontal_alignment",On="precision",Hn="precision_from_pv",Fn="vertical_alignment";class Nn extends ge{constructor(t,e){super(t,e),this.properties.add(new q(Wn)),this.properties.add(new $(Bn)),this.properties.add(new $(In)),this.properties.add(new $(On)),this.properties.add(new z(Hn)),this.properties.add(new $(Fn))}init(){this.areaRegion={id:`${this.wuid}-area`,click:()=>{const t={pvName:this.pvName};this.display.fireEvent("openpv",t)},tooltip:()=>this.tooltip,cursor:"pointer"}}draw(t){const e=t.ctx;if(this.transparent?this.backgroundAlarmSensitive&&this.alarm&&t.fillRect(Object.assign(Object.assign({},this.area),{color:this.alarmSensitiveBackgroundColor})):t.fillRect(Object.assign(Object.assign({},this.area),{color:this.backgroundColor})),this.pv&&this.pv.navigable&&!this.pv.disconnected){t.addHitRegion(this.areaRegion).addRect(this.x,this.y,this.width,this.height)}e.fillStyle=this.alarmSensitiveForegroundColor.toString(),e.font=this.font.getFontString();const{scale:i}=this;let s=this.area;this.borderAlarmSensitive&&(s=d(s,2*i,2*i));let r=s.x;0===this.horizAlignment?e.textAlign="start":1===this.horizAlignment?(r+=s.width/2,e.textAlign="center"):2===this.horizAlignment&&(r+=s.width,e.textAlign="end");let o=s.y;0===this.vertAlignment?e.textBaseline="top":1===this.vertAlignment?(o+=s.height/2,e.textBaseline="middle"):2===this.vertAlignment&&(o+=s.height,e.textBaseline="bottom");let h=this.text;if(this.pv&&void 0!==this.pv.value){const t=this.precisionFromPV?this.pv.precision:this.precision;h=this.pv.formatValue(this.formatType,t)}e.fillText(h,r,o)}get font(){return this.properties.getValue(Wn).scale(this.scale)}get formatType(){return this.properties.getValue(Bn)}get horizAlignment(){return this.properties.getValue(In)}get precision(){return this.properties.getValue(On)}get precisionFromPV(){return this.properties.getValue(Hn)}get vertAlignment(){return this.properties.getValue(Fn)}}const Dn="color_hi",jn="color_hihi",$n="color_lo",Gn="color_lolo",zn="color_fillbackground",Un="fill_color",qn="fillcolor_alarm_sensitive",Yn="font",Xn="effect_3d",Kn="level_hi",Zn="level_hihi",Jn="level_lo",Qn="level_lolo",ta="limits_from_pv",ea="log_scale",ia="maximum",sa="major_tick_step_hint",ra="minimum",oa="scale_font",ha="scale_format",na="show_bulb",aa="show_hi",la="show_hihi",da="show_lo",ca="show_lolo",pa="show_markers",ga="show_minor_ticks",ua="show_scale",ma="transparent_background",xa="unit",fa="value_label_format",wa=new e(160,160,160);class ya extends ge{constructor(t,e){super(t,e),this.properties.add(new U(Dn)),this.properties.add(new U(jn)),this.properties.add(new U($n)),this.properties.add(new U(Gn)),this.properties.add(new U(zn)),this.properties.add(new U(Un)),this.properties.add(new z(qn,!1)),this.properties.add(new z(Xn)),this.properties.add(new G(Kn)),this.properties.add(new G(Zn)),this.properties.add(new G(Jn)),this.properties.add(new G(Qn)),this.properties.add(new z(ta)),this.properties.add(new q(Yn)),this.properties.add(new z(ea)),this.properties.add(new G(ia)),this.properties.add(new G(sa)),this.properties.add(new G(ra)),this.properties.add(new q(oa)),this.properties.add(new D(ha)),this.properties.add(new z(na)),this.properties.add(new z(aa)),this.properties.add(new z(la)),this.properties.add(new z(da)),this.properties.add(new z(ca)),this.properties.add(new z(pa)),this.properties.add(new z(ga)),this.properties.add(new z(ua)),this.properties.add(new z(ma)),this.properties.add(new $(xa)),this.properties.add(new D(fa))}draw(t){var i;const{scale:s,min:r,max:o}=this;let h=this.area;this.borderAlarmSensitive&&(h=d(this.area,2*this.scale));const n=this.alarmSensitiveBackgroundColor,a=this.alarmSensitiveForegroundColor,l=this.alarmSensitiveFillColor;this.transparentBackground||t.fillRect(Object.assign(Object.assign({},h),{color:n}));let c=h.height;if(this.showBulb){let t=Math.min(h.width/2,this.bulbMaxDiameter);c=h.height<t?0:h.height-t}let p=Object.assign(Object.assign({},h),{height:c});const g=new ro(s,this.scaleFont,r,o,this.logScale,this.majorTickStepHint,a,this.showMinorTicks,this.showScale);g.scaleFormat=this.scaleFormat;let u=0,m="";if(0===this.unit?m="°C":1===this.unit?m="°F":2===this.unit&&(m="K"),m){const e=W.ARIAL_9.scale(s),i=2*s;u=t.measureText(m,e).height+2*i,t.fillText({x:h.x+h.width/2-this.pipeWidth/2-i,y:h.y+i,baseline:"top",align:"right",color:a,font:e,text:m})}const x=p.x+p.width/2-this.pipeWidth/2-1*s,f=Object.assign(Object.assign({},p),{y:p.y+u,height:p.height-u+g.calculateMargin(t,!1)});g.drawVertical(t,x,f.y,f.height,!1);const w=Math.floor(this.pipeWidth/2);if(p=Object.assign(Object.assign({},p),{y:g.getValuePosition(o)-w,height:g.scaleLength+2*w}),this.drawPipe(t,p,g),this.showMarkers&&this.drawMarkers(t,h,g),this.showBulb){let o=Math.min(h.width/2,this.bulbMaxDiameter);const n=1*s,d=h.x+h.width/2,u=h.y+c+o/2,m=o/2,x=o/2;if(t.fillEllipse({cx:d,cy:u,rx:m,ry:x,color:l}),this.effect3d){const i=t.createLinearGradient(d-m,u-x,d+m,u+x);i.addColorStop(0,e.WHITE.toString()),i.addColorStop(1,l.withAlpha(0).toString()),t.fillEllipse({cx:d,cy:u,rx:m,ry:x,gradient:i})}t.strokeEllipse({cx:d,cy:u,rx:m-n/2,ry:x-n/2,color:this.effect3d?wa:a,lineWidth:n});const f={x:Math.round(p.x+p.width/2-this.pipeWidth/2)+this.outlineWidth,y:Math.floor(g.getValuePosition(r)),width:this.pipeWidth-2*this.outlineWidth,height:3*s};if(this.effect3d){const i=Math.round(p.x+p.width/2-this.pipeWidth/2),s=i+this.pipeWidth,r=t.createLinearGradient(i,f.y,s,f.y);r.addColorStop(0,e.WHITE.toString()),r.addColorStop(1,l.toString()),t.fillRect(Object.assign(Object.assign({},f),{gradient:r}))}else t.fillRect(Object.assign(Object.assign({},f),{color:l}));const w=null===(i=this.pv)||void 0===i?void 0:i.value;w&&t.fillText({x:d,y:u,align:"center",baseline:"middle",color:l.contrast(),font:this.font,text:this.format(w)})}}drawPipe(t,i,s){const{scale:r,outlineWidth:o,min:h,max:n}=this,a=this.alarmSensitiveForegroundColor,l=this.alarmSensitiveFillColor,c={x:Math.round(i.x+i.width/2-this.pipeWidth/2),y:i.y,width:this.pipeWidth,height:i.height},p=this.getFillValue();let g=s.getValuePosition(p);n>h?p>n?g-=10*r:p<h&&(g+=10*r):p>h?g+=10*r:p<n&&(g-=10*r);const u=this.pipeWidth/2,{x:m,y:x,width:f,height:w}=c;if(this.effect3d){let i=t.createLinearGradient(m,x,m+f,x);i.addColorStop(0,e.WHITE.toString()),i.addColorStop(1,this.colorFillbackground.toString()),t.fillRect(Object.assign(Object.assign({},c),{rx:u/2,ry:u/2,gradient:i})),i=t.createLinearGradient(m,x,m+f,x),i.addColorStop(0,e.WHITE.toString()),i.addColorStop(1,l.toString()),t.fillRect({x:m,y:g,width:f,height:x+w-g,rx:u/2,ry:u/2,gradient:i})}else t.fillRect(Object.assign(Object.assign({},c),{rx:u/2,ry:u/2,color:this.colorFillbackground})),t.fillRect({x:m,y:g,width:f,height:x+w-g,rx:u/2,ry:u/2,color:l});let y=d(c,o/2);t.strokeRect(Object.assign(Object.assign({},y),{rx:u/2,ry:u/2,color:this.effect3d?wa:a,lineWidth:o}))}drawMarkers(t,e,i){const{lolo:s,lo:r,hi:o,hihi:h}=this,n=W.ARIAL_9.scale(this.scale),a=e.x+e.width/2+this.pipeWidth/2;if(this.showLoLo&&void 0!==s){const e=Math.round(i.getValuePosition(s));t.strokePath({path:new b(a,e).lineTo(a+this.markerTickLength,e),color:this.colorLoLo,lineWidth:this.markerTickLineWidth}),t.fillText({x:a+this.markerTickLength+this.markerGap,y:e,text:"LOLO",align:"left",baseline:"middle",color:this.colorLoLo,font:n})}if(this.showLo&&void 0!==r){const e=Math.round(i.getValuePosition(r));t.strokePath({path:new b(a,e).lineTo(a+this.markerTickLength,e),color:this.colorLo,lineWidth:this.markerTickLineWidth}),t.fillText({x:a+this.markerTickLength+this.markerGap,y:e,text:"LO",align:"left",baseline:"middle",color:this.colorLo,font:n})}if(this.showHi&&void 0!==o){const e=Math.round(i.getValuePosition(o));t.strokePath({path:new b(a,e).lineTo(a+this.markerTickLength,e),color:this.colorHi,lineWidth:this.markerTickLineWidth}),t.fillText({x:a+this.markerTickLength+this.markerGap,y:e,text:"HI",align:"left",baseline:"middle",color:this.colorHi,font:n})}if(this.showHiHi&&void 0!==h){const e=Math.round(i.getValuePosition(h));t.strokePath({path:new b(a,e).lineTo(a+this.markerTickLength,e),color:this.colorHiHi,lineWidth:this.markerTickLineWidth}),t.fillText({x:a+this.markerTickLength+this.markerGap,y:e,text:"HIHI",align:"left",baseline:"middle",color:this.colorHiHi,font:n})}}get min(){var t,e;return this.limitsFromPv&&null!==(e=null===(t=this.pv)||void 0===t?void 0:t.lowerDisplayLimit)&&void 0!==e?e:this.minimum}get max(){var t,e;return this.limitsFromPv&&null!==(e=null===(t=this.pv)||void 0===t?void 0:t.upperDisplayLimit)&&void 0!==e?e:this.maximum}get lolo(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.lowerAlarmLimit:this.levelLoLo}get lo(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.lowerWarningLimit:this.levelLo}get hi(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.upperWarningLimit:this.levelHi}get hihi(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.upperAlarmLimit:this.levelHiHi}get pipeWidth(){return 15*this.scale}get bulbMaxDiameter(){return 40*this.scale}get outlineWidth(){return 1*this.scale}get markerTickLength(){return 10*this.scale}get markerTickLineWidth(){return 2*this.scale}get markerGap(){return 3*this.scale}get alarmSensitiveFillColor(){if(this.fillColorAlarmSensitive){if(this.isMajorSeverity())return e.RED;if(this.isMinorSeverity())return e.ORANGE}return this.fillColor}getFillValue(){var t,e;let i=null!==(e=null===(t=this.pv)||void 0===t?void 0:t.value)&&void 0!==e?e:this.min;return i=Math.max(this.min,i),i=Math.min(this.max,i),i}format(t){return this.valueLabelFormat?new Lr(this.valueLabelFormat).format(t):String(Number(t.toFixed(3)))}get colorLo(){return this.properties.getValue($n)}get colorLoLo(){return this.properties.getValue(Gn)}get colorHi(){return this.properties.getValue(Dn)}get colorHiHi(){return this.properties.getValue(jn)}get colorFillbackground(){return this.properties.getValue(zn)}get fillColorAlarmSensitive(){return this.properties.getValue(qn)}get fillColor(){return this.properties.getValue(Un)}get font(){return this.properties.getValue(Yn).scale(this.scale)}get effect3d(){return this.properties.getValue(Xn)}get levelLo(){return this.properties.getValue(Jn)}get levelLoLo(){return this.properties.getValue(Qn)}get levelHi(){return this.properties.getValue(Kn)}get levelHiHi(){return this.properties.getValue(Zn)}get limitsFromPv(){return this.properties.getValue(ta)}get logScale(){return this.properties.getValue(ea)}get minimum(){return this.properties.getValue(ra)}get majorTickStepHint(){return this.scale*this.properties.getValue(sa)}get maximum(){return this.properties.getValue(ia)}get scaleFont(){return this.properties.getValue(oa).scale(this.scale)}get scaleFormat(){return this.properties.getValue(ha)}get showBulb(){return this.properties.getValue(na)}get showMarkers(){return this.properties.getValue(pa)}get showMinorTicks(){return this.properties.getValue(ga)}get showLo(){return this.properties.getValue(da)}get showLoLo(){return this.properties.getValue(ca)}get showHi(){return this.properties.getValue(aa)}get showHiHi(){return this.properties.getValue(la)}get showScale(){return this.properties.getValue(ua)}get transparentBackground(){return this.properties.getValue(ma)}get unit(){return this.properties.getValue(xa)}get valueLabelFormat(){return this.properties.getValue(fa)}}const va=-323.3062,ba=308.2547;class Ta{constructor(t,e){this.widget=t,this.index=e}get scale(){return this.widget.scale}getValue(t){return this.widget.properties.getValue(`axis_${this.index}_${t}`)}isDateEnabled(){return 0!==this.timeFormat}isHorizontal(){return 0===this.index||1!==this.index&&!this.yAxis}isVertical(){return!this.isHorizontal()}isPrimary(){return this.index<=1}get effectiveMinimum(){var t;return null!==(t=this._effectiveMinimum)&&void 0!==t?t:this.minimum}set effectiveMinimum(t){this._effectiveMinimum=t}get effectiveMaximum(){var t;return null!==(t=this._effectiveMaximum)&&void 0!==t?t:this.maximum}set effectiveMaximum(t){this._effectiveMaximum=t}performAutoScale(){const t=this.widget.calculateAutoscaledRange(this);t&&(this.effectiveMinimum=t.start,this.effectiveMaximum=t.stop,this.widget.requestRepaint())}applyZoom(t,e){let i,s,r=this.effectiveMinimum,o=this.effectiveMaximum;if(this.logScale){o=Math.log10(o),r=Math.log10(r);const h=Math.log10(t)*e,n=1-e;i=h+r*n,s=h+o*n,i<va&&(i=va),i=Math.pow(10,i),s>ba&&(s=ba),s=Math.pow(10,s)}else{const h=Math.max(Math.abs(r),Math.abs(o));r/=h,o/=h;const n=t/h*e,a=1-e;i=(n+r*a)*h,s=(n+o*a)*h}this.effectiveMinimum=i,this.effectiveMaximum=s,this.widget.requestRepaint()}get autoScale(){return this.getValue("auto_scale")}get autoScaleTreshold(){return this.getValue("auto_scale_treshold")}get axisColor(){return this.getValue("axis_color")}get axisTitle(){return this.getValue("axis_title")}get dashGridLine(){return this.getValue("dash_grid_line")}get gridColor(){return this.getValue("grid_color")}get leftBottomSide(){return this.getValue("left_bottom_side")}get logScale(){return this.getValue("log_scale")}get maximum(){return this.getValue("maximum")}get minimum(){return this.getValue("minimum")}get scaleFont(){return this.getValue("scale_font").scale(this.scale)}get scaleFormat(){return this.getValue("scale_format")}get showGrid(){return this.getValue("show_grid")}get timeFormat(){return this.getValue("time_format")}get titleFont(){return this.getValue("title_font").scale(this.scale)}get visible(){return this.getValue("visible")}get yAxis(){return this.getValue("y_axis")}}class Sa{constructor(t,e){this.xAxis=t,this.yAxis=e,this.beforeXRanges=[],this.beforeYRanges=[],this.afterXRanges=[],this.afterYRanges=[];for(const e of t)this.beforeXRanges.push({min:e.effectiveMinimum,max:e.effectiveMaximum});for(const t of e)this.beforeYRanges.push({min:t.effectiveMinimum,max:t.effectiveMaximum})}saveState(){for(const t of this.xAxis)this.afterXRanges.push({min:t.effectiveMinimum,max:t.effectiveMaximum});for(const t of this.yAxis)this.afterYRanges.push({min:t.effectiveMinimum,max:t.effectiveMaximum})}undo(){for(let t=0;t<this.xAxis.length;t++){const e=this.xAxis[t],i=this.beforeXRanges[t];e.effectiveMinimum=i.min,e.effectiveMaximum=i.max}for(let t=0;t<this.yAxis.length;t++){const e=this.yAxis[t],i=this.beforeYRanges[t];e.effectiveMinimum=i.min,e.effectiveMaximum=i.max}}redo(){for(let t=0;t<this.xAxis.length;t++){const e=this.xAxis[t],i=this.afterXRanges[t];e.effectiveMinimum=i.min,e.effectiveMaximum=i.max}for(let t=0;t<this.yAxis.length;t++){const e=this.yAxis[t],i=this.afterYRanges[t];e.effectiveMinimum=i.min,e.effectiveMaximum=i.max}}}class Va{constructor(){this.undoStack=[],this.redoStack=[]}canUndo(){return this.undoStack.length>0}canRedo(){return this.redoStack.length>0}add(t){this.undoStack.push(t),this.redoStack.length=0}undo(){const t=this.undoStack.pop();t&&(t.undo(),this.redoStack.push(t))}redo(){const t=this.redoStack.pop();t&&(t.redo(),this.undoStack.push(t))}}class Aa{constructor(t,e){this.widget=e,this.id=t}tooltip(){return this.widget.tooltip}mouseDown(t){var e;const{widget:i}=this;switch(null===(e=i.toolbar)||void 0===e?void 0:e.currentTool){case"rubberband-zoom":case"horizontal-zoom":case"vertical-zoom":this.grabStart=t;break;case"panning":this.grabZoomCommand=new Sa(i.getXAxes(),i.getYAxes())}}grab(t){var e;switch(null===(e=this.widget.toolbar)||void 0===e?void 0:e.currentTool){case"rubberband-zoom":case"horizontal-zoom":case"vertical-zoom":this.grabStart&&(this.selection=Object.assign(Object.assign({},this.grabStart.point),{width:t.dx,height:t.dy}),this.widget.requestRepaint());break;case"panning":this.pan(t),this.prevGrabEvent=t,this.widget.requestRepaint()}}grabEnd(){var t;const{grabZoomCommand:e,selection:i,widget:s}=this;switch(null===(t=s.toolbar)||void 0===t?void 0:t.currentTool){case"rubberband-zoom":if(i){const t=new Sa(s.getXAxes(),s.getYAxes());this.rangeZoomXAxes(i),this.rangeZoomYAxes(i),t.saveState(),s.toolbar.addCommand(t)}break;case"horizontal-zoom":if(i){const t=new Sa(s.getXAxes(),s.getYAxes());this.rangeZoomXAxes(i),t.saveState(),s.toolbar.addCommand(t)}break;case"vertical-zoom":if(i){const t=new Sa(s.getXAxes(),s.getYAxes());this.rangeZoomYAxes(i),t.saveState(),s.toolbar.addCommand(t)}break;case"panning":e&&(e.saveState(),s.toolbar.addCommand(e))}this.selection=void 0,this.prevGrabEvent=void 0,this.grabZoomCommand=void 0,this.widget.requestRepaint()}click(t){var e;const{widget:i}=this;switch(null===(e=i.toolbar)||void 0===e?void 0:e.currentTool){case"zoom-in":const e=new Sa(i.getXAxes(),i.getYAxes());for(const e of i.getAxes()){const i=e.isHorizontal()?t.point.x:t.point.y,s=e.linearScale.getPositionValue(i);e.applyZoom(s,.1)}e.saveState(),i.toolbar.addCommand(e);break;case"zoom-out":const s=new Sa(i.getXAxes(),i.getYAxes());for(const e of i.getAxes()){const i=e.isHorizontal()?t.point.x:t.point.y,s=e.linearScale.getPositionValue(i);e.applyZoom(s,-.1)}s.saveState(),i.toolbar.addCommand(s)}}rangeZoomXAxes(t){for(const e of this.widget.getXAxes()){let i=e.linearScale.getPositionValue(t.x),s=e.linearScale.getPositionValue(t.x+t.width);if(i>s){const t=i;i=s,s=t}const r=e.linearScale.getMinMax();i=Math.max(r.start,i),s=Math.min(r.stop,s),e.effectiveMinimum=i,e.effectiveMaximum=s}}rangeZoomYAxes(t){for(const e of this.widget.getYAxes()){let i=e.linearScale.getPositionValue(t.y),s=e.linearScale.getPositionValue(t.y+t.height);if(i>s){const t=i;i=s,s=t}const r=e.linearScale.getMinMax();i=Math.max(r.start,i),s=Math.min(r.stop,s),e.effectiveMinimum=i,e.effectiveMaximum=s}}pan(t){const{prevGrabEvent:e,widget:i}=this;if(e){const s=e.dx-t.dx;if(0!==s)for(const t of i.getXAxes()){const e=t.linearScale,i=e.getMinMax(),r=e.getValuePosition(i.start)+s,o=e.getValuePosition(i.stop)+s;t.effectiveMinimum=e.getPositionValue(r),t.effectiveMaximum=e.getPositionValue(o)}const r=e.dy-t.dy;if(0!==r)for(const t of i.getYAxes()){const e=t.linearScale,i=e.getMinMax(),s=e.getValuePosition(i.start)+r,o=e.getValuePosition(i.stop)+r;t.effectiveMinimum=e.getPositionValue(s),t.effectiveMaximum=e.getPositionValue(o)}}}}class _a{constructor(t){this.pointer=0,this.samples=[],this.samples=Array(t).fill(void 0)}push(t,e){this.samples[this.pointer]={x:t,y:e},this.pointer=(this.pointer+1)%this.samples.length}clear(){this.samples.fill(void 0),this.pointer=0}isFull(){const t=(this.pointer+1)%this.samples.length;return void 0!==this.samples[t]}isEmpty(){return void 0===this.tail()}tail(){return 0===this.pointer?this.samples[this.samples.length-1]:this.samples[this.pointer-1]}snapshot(t=!1){if(t){return this.samples.filter((t=>void 0!==t)).sort(((t,e)=>t.x-e.x))}{const t=this.samples.slice(this.pointer).filter((t=>void 0!==t)),e=this.samples.slice(0,this.pointer).filter((t=>void 0!==t));return t.concat(e)}}}class La{constructor(t,e,i,s,r){this.bufferSize=t,this.plotMode=e,this.updateMode=i,this.concatenateData=s,this.chronological=r,this.x=0,this.xPending=!1,this.y=0,this.yTimestamp=0,this.yPending=!1,this.xArray=[],this.xArrayPending=!1,this.yArray=[],this.yArrayPending=!1,this.traceData=new _a(t)}clear(){this.traceData.clear(),this.x=0,this.xPending=!1,this.y=0,this.yPending=!1,this.yTimestamp=0,this.xArray=[],this.xArrayPending=!1,this.yArray=[],this.yArrayPending=!1}snapshot(){return this.traceData.snapshot()}updateX(t){this.x=t,this.xPending=!0,this.maybeAddPoint()}updateY(t,e){this.y=t,this.yTimestamp=e,this.yPending=!0,this.maybeAddPoint()}updateXArray(t){this.xArray=t,this.xArrayPending=!0,this.maybeAddArray()}updateYArray(t){this.yArray=t,this.yArrayPending=!0,this.maybeAddArray()}maybeAddPoint(){if(1===this.plotMode&&this.traceData.isFull())return;const{xPending:t,yPending:e,chronological:i,updateMode:s}=this;0===s?(i&&e||!i&&(t||e))&&this.addPoint():1===s?(i&&e||!i&&t&&e)&&this.addPoint():2===s?(i&&e||!i&&t)&&this.addPoint():3===s&&this.yPending&&this.addPoint()}maybeAddArray(){if(1===this.plotMode&&this.traceData.isFull())return;const{xArrayPending:t,yArrayPending:e,chronological:i,updateMode:s}=this;0===s?(i&&e||!i&&(t||e))&&this.addArray():1===s?(i&&e||!i&&t&&e)&&this.addArray():2===s?(i&&e||!i&&t)&&this.addArray():3===s&&this.yArrayPending&&this.addArray()}addPoint(){this.concatenateData||this.traceData.clear();let t=this.x;if(this.chronological)if(5===this.updateMode)t=(new Date).getTime();else if(void 0!==this.yTimestamp)t=this.yTimestamp;else{const e=this.traceData.tail();t=e?e.x+1:0}this.traceData.push(t,this.y),this.xPending=!1,this.yPending=!1}addArray(){this.concatenateData||this.traceData.clear();let{xArray:t,yArray:e}=this;if(this.chronological)if(t=Array(e.length),this.traceData.isEmpty())for(let i=0;i<e.length;i++)t[i]=i;else{const i=this.traceData.tail();for(let s=1;s<e.length;s++)t[s-1]=i.x+s}let i=Math.min(t.length,e.length),s=Math.min(i,this.bufferSize);for(let i=0;i<s;i++)this.traceData.push(t[i],e[i]);this.xArrayPending=!1,this.yArrayPending=!1}}class Ca{constructor(t,e){this.widget=t,this.i=e,this.xPVListener=()=>{var t,e;const i=this.xPVInstance;if(i)if(Array.isArray(i.value))null===(t=this.traceData)||void 0===t||t.updateXArray(i.value);else{const t=i.toNumber();null!=t&&(null===(e=this.traceData)||void 0===e||e.updateX(t))}},this.yPVListener=()=>{var t,e,i;const s=this.yPVInstance;if(s)if(Array.isArray(s.value))null===(t=this.traceData)||void 0===t||t.updateYArray(s.value);else{const t=this.widget.getAxis(this.xAxisIndex),r=s.toNumber();if(null!=r)if(t.isDateEnabled()){const t=(s.time||new Date).getTime();null===(e=this.traceData)||void 0===e||e.updateY(r,t)}else null===(i=this.traceData)||void 0===i||i.updateY(r)}}}init(){const{bufferSize:t,plotMode:e,updateMode:i,concatenateData:s}=this,r=!this.xPV;this.traceData=new La(t,e,i,s,r),this.xPV&&(this.xPVInstance=this.widget.display.pvEngine.createPV(this.xPV),this.xPVInstance.addListener(this.xPVListener)),this.yPV&&(this.yPVInstance=this.widget.display.pvEngine.createPV(this.yPV),this.yPVInstance.addListener(this.yPVListener)),this.widget.addPropertyListener(`trace_${this.i}_x_pv`,(()=>{var t;const e=this.widget.display.pvEngine.createPV(this.xPV);e!==this.xPVInstance&&(null===(t=this.xPVInstance)||void 0===t||t.removeListener(this.xPVListener),this.xPVInstance=e,this.xPVInstance.addListener(this.xPVListener))})),this.widget.addPropertyListener(`trace_${this.i}_y_pv`,(()=>{var t;const e=this.widget.display.pvEngine.createPV(this.yPV);e!==this.yPVInstance&&(null===(t=this.yPVInstance)||void 0===t||t.removeListener(this.yPVListener),this.yPVInstance=e,this.yPVInstance.addListener(this.yPVListener))}))}snapshot(){var t;return(null===(t=this.traceData)||void 0===t?void 0:t.snapshot())||[]}drawTrace(t,e){const{lineWidth:i}=this;if(0===this.traceType)t.strokePath({path:b.fromPoints(e),color:this.traceColor,lineWidth:i});else if(1===this.traceType)t.strokePath({path:b.fromPoints(e),color:this.traceColor,lineWidth:i,dash:[6*this.scale,2*this.scale]});else if(2===this.traceType);else if(3===this.traceType){const s=this.widget.getAxis(this.yAxisIndex).linearScale.getValuePosition(0);for(const r of e)t.strokePath({path:new b(r.x,r.y).lineTo(r.x,s),lineWidth:i,color:this.traceColor,opacity:100/255})}else if(4===this.traceType||5===this.traceType){const s=this.widget.getAxis(this.yAxisIndex).linearScale.getValuePosition(0);for(let i=1;i<e.length;i++){const r=e[i-1],o=e[i];t.fillPath({path:new b(r.x,r.y).lineTo(r.x,s).lineTo(o.x,s).lineTo(o.x,o.y),color:this.traceColor,opacity:100/255})}5===this.traceType&&t.strokePath({path:b.fromPoints(e),color:this.traceColor,lineWidth:i})}else if(6===this.traceType)for(let s=1;s<e.length;s++){const r=e[s-1],o=e[s];t.strokePath({path:new b(r.x,r.y).lineTo(r.x,o.y).lineTo(o.x,o.y),color:this.traceColor,lineWidth:i})}else if(7===this.traceType)for(let s=1;s<e.length;s++){const r=e[s-1],o=e[s];t.strokePath({path:new b(r.x,r.y).lineTo(o.x,r.y).lineTo(o.x,o.y),color:this.traceColor,lineWidth:i})}else if(8===this.traceType){const{scale:s}=this;t.strokePath({path:b.fromPoints(e),color:this.traceColor,lineWidth:i,dash:[6*s,2*s,2*s,2*s]})}else if(9===this.traceType){const{scale:s}=this;t.strokePath({path:b.fromPoints(e),color:this.traceColor,lineWidth:i,dash:[6*s,2*s,2*s,2*s,2*s,2*s]})}else if(10===this.traceType){const{scale:s}=this;t.strokePath({path:b.fromPoints(e),color:this.traceColor,lineWidth:i,dash:[2*s,2*s]})}}drawPoint(t,e){t.ctx.fillStyle=this.traceColor.toString(),t.ctx.strokeStyle=this.traceColor.toString(),t.ctx.lineWidth=1*this.scale;const i=this.pointSize/2,s=e.x,r=e.y;switch(this.pointStyle){case 1:case 3:t.ctx.beginPath(),t.ctx.ellipse(s,r,i,i,0,0,2*Math.PI),t.ctx.fill();break;case 2:t.ctx.beginPath(),t.ctx.ellipse(s,r,i,i,0,0,2*Math.PI),t.ctx.stroke();break;case 4:t.ctx.lineWidth=1*this.scale,t.ctx.beginPath(),t.ctx.moveTo(s-i,r+i),t.ctx.lineTo(s,r-i),t.ctx.lineTo(s+i,r+i),t.ctx.closePath(),t.ctx.stroke();break;case 5:t.ctx.lineWidth=1*this.scale,t.ctx.beginPath(),t.ctx.moveTo(s-i,r+i),t.ctx.lineTo(s,r-i),t.ctx.lineTo(s+i,r+i),t.ctx.closePath(),t.ctx.fill();break;case 6:t.ctx.strokeRect(s-i,r-i,2*i,2*i);break;case 7:t.ctx.fillRect(s-i,r-i,2*i,2*i);break;case 8:case 9:t.ctx.beginPath(),t.ctx.moveTo(s-i,r),t.ctx.lineTo(s,r-i),t.ctx.lineTo(s+i,r),t.ctx.lineTo(s,r+i),t.ctx.closePath(),t.ctx.stroke();break;case 10:t.ctx.beginPath(),t.ctx.moveTo(s-i,r-i),t.ctx.lineTo(s+i,r+i),t.ctx.moveTo(s+i,r-i),t.ctx.lineTo(s-i,r+i),t.ctx.stroke();break;case 11:t.ctx.beginPath(),t.ctx.moveTo(s-i,r),t.ctx.lineTo(s+i,r),t.ctx.moveTo(s,r-i),t.ctx.lineTo(s,r+i),t.ctx.stroke();break;case 12:t.ctx.beginPath(),t.ctx.moveTo(s,r-i),t.ctx.lineTo(s,r+i),t.ctx.stroke()}}clearData(){var t;null===(t=this.traceData)||void 0===t||t.clear()}get scale(){return this.widget.scale}getValue(t){return this.widget.properties.getValue(`trace_${this.i}_${t}`)}get antiAlias(){return this.getValue("anti_alias")}get bufferSize(){return this.getValue("buffer_size")}get concatenateData(){return this.getValue("concatenate_data")}get lineWidth(){return this.scale*this.getValue("line_width")}get name(){return this.getValue("name")}get plotMode(){return this.getValue("plot_mode")}get pointSize(){return this.scale*this.getValue("point_size")}get pointStyle(){return this.getValue("point_style")}get traceColor(){return this.getValue("trace_color")}get traceType(){return this.getValue("trace_type")}get updateDelay(){return this.getValue("update_delay")}get updateMode(){return this.getValue("update_mode")}get visible(){return this.getValue("visible")}get xAxisIndex(){return this.getValue("x_axis_index")}get xPV(){return this.getValue("x_pv")}get yAxisIndex(){return this.getValue("y_axis_index")}get yPV(){return this.getValue("y_pv")}}const Pa=new e(236,236,236),Ma=new e(130,130,130);class ka{constructor(t,e,i,s,r){this.imageFile=e,this.disabledImageFile=i,this.action=r,this.imageElement=new Image,this.disabledImageElement=new Image,this.toggleButton=!1,this.toolButton=!1,this.pushed=!1,this.disabled=!1,this.loadPromise=new Promise(((t,e)=>{this.imageElement.onload=()=>t()})),this.disabledLoadPromise=new Promise(((t,e)=>{this.disabledImageElement.onload=()=>t()})),this.region={id:`${t.xyGraph.wuid}-${e}`,mouseDown:()=>{this.toggleButton||(this.pushed=!0,t.xyGraph.requestRepaint())},mouseOut:()=>{this.toggleButton||(this.pushed=!1),t.xyGraph.requestRepaint()},mouseUp:()=>{this.toggleButton||(this.pushed=!1,t.xyGraph.requestRepaint())},click:()=>{this.toggleButton&&(this.pushed=!this.pushed,this.toolButton&&t.toggleTool(this)),this.action(),t.updateState()},tooltip:()=>s}}loadImage(t){this.imageElement.src=t+this.imageFile,this.disabledImageElement.src=t+this.disabledImageFile}}class Ra{constructor(t){this.xyGraph=t,this.buttons=[],this.imagesLoaded=!1,this.currentTool="default",this.commandBuffer=new Va,this.showLegend=this.createToggleButton("ShowLegend.png","Show Legend",(()=>{t.properties.setValue("show_legend",this.showLegend.pushed)})),this.showLegend.pushed=t.showLegend,t.addPropertyListener("show_legend",(t=>{this.showLegend.pushed=t})),this.autoScale=this.createButton("AutoScale.png","AutoScale.png","Perform Auto Scale",(()=>{const e=new Sa(t.getXAxes(),t.getYAxes());t.performAutoScale(),e.saveState(),this.addCommand(e)})),this.rubberbandZoom=this.createToolButton("RubberbandZoom.png","Rubberband Zoom",(()=>{this.rubberbandZoom.pushed?(this.currentTool="rubberband-zoom",t.setCursor("crosshair"),t.autoScaleAllowed=!1):(this.currentTool="default",t.setCursor(void 0),t.autoScaleAllowed=!0)})),this.horizontalZoom=this.createToolButton("HorizontalZoom.png","Horizontal Zoom",(()=>{this.horizontalZoom.pushed?(this.currentTool="horizontal-zoom",t.setCursor("col-resize"),t.autoScaleAllowed=!1):(this.currentTool="default",t.setCursor(void 0),t.autoScaleAllowed=!0)})),this.verticalZoom=this.createToolButton("VerticalZoom.png","Vertical Zoom",(()=>{this.verticalZoom.pushed?(this.currentTool="vertical-zoom",t.setCursor("row-resize"),t.autoScaleAllowed=!1):(this.currentTool="default",t.setCursor(void 0),t.autoScaleAllowed=!0)})),this.zoomIn=this.createToolButton("ZoomIn.png","Zoom In",(()=>{this.zoomIn.pushed?(this.currentTool="zoom-in",t.setCursor("zoom-in"),t.autoScaleAllowed=!1):(this.currentTool="default",t.setCursor(void 0),t.autoScaleAllowed=!0)})),this.zoomOut=this.createToolButton("ZoomOut.png","Zoom Out",(()=>{this.zoomOut.pushed?(this.currentTool="zoom-out",t.setCursor("zoom-out"),t.autoScaleAllowed=!1):(this.currentTool="default",t.setCursor(void 0),t.autoScaleAllowed=!0)})),this.panning=this.createToolButton("Panning.png","Panning",(()=>{this.panning.pushed?(this.currentTool="panning",t.setCursor("grab"),t.autoScaleAllowed=!1):(this.currentTool="default",t.setCursor(void 0),t.autoScaleAllowed=!0)})),this.mouseArrow=this.createToolButton("MouseArrow.png","None",(()=>{this.currentTool="default",t.setCursor(void 0),t.autoScaleAllowed=!0})),this.undo=this.createButton("Undo.png","Undo_Gray.png","Undo",(()=>{this.commandBuffer.undo()})),this.undo.disabled=!0,this.redo=this.createButton("Redo.png","Redo_Gray.png","Redo",(()=>{this.commandBuffer.redo()})),this.redo.disabled=!0,this.camera=this.createButton("camera.png","camera.png","Save Snapshot to PNG File",(()=>{const e=document.createElement("a");try{e.href=t.toDataURL(),e.download=`${t.name}_export.png`,document.body.appendChild(e),e.click()}finally{document.body.removeChild(e)}})),this.toggleTool(this.mouseArrow);const e=this.buttons.map((t=>t.loadPromise)).concat(this.buttons.map((t=>t.disabledLoadPromise)));Promise.all(e).finally((()=>{this.imagesLoaded=!0,t.requestRepaint()}));for(const e of this.buttons)e.loadImage(t.display.imagesPrefix)}updateState(){this.undo.disabled=!this.commandBuffer.canUndo(),this.redo.disabled=!this.commandBuffer.canRedo(),this.xyGraph.requestRepaint()}addCommand(t){this.commandBuffer.add(t),this.updateState()}toggleTool(t){const e=t.pushed;for(const t of this.buttons)t.toolButton&&(t.pushed=!1);e?t.pushed=!0:this.mouseArrow.pushed=!0,this.xyGraph.requestRepaint()}createToolButton(t,e,i){const s=this.createToggleButton(t,e,i);return s.toolButton=!0,s}createToggleButton(t,e,i){const s=this.createButton(t,t,e,i);return s.toggleButton=!0,s}createButton(t,e,i,s){const r=new ka(this,t,e,i,s);return this.buttons.push(r),r}draw(t,e){const{buttonSize:i}=this,s={x:e.x,y:e.y};return this.drawButton(t,s.x,s.y,this.showLegend),s.x+=i,this.maybeWrap(s,e),this.drawButton(t,s.x,s.y,this.autoScale),s.x+=i,this.maybeWrap(s,e,i/2),this.drawSeparator(t,s.x,s.y),s.x+=i/2,this.maybeWrap(s,e),this.drawButton(t,s.x,s.y,this.rubberbandZoom),s.x+=i,this.maybeWrap(s,e),this.drawButton(t,s.x,s.y,this.horizontalZoom),s.x+=i,this.maybeWrap(s,e),this.drawButton(t,s.x,s.y,this.verticalZoom),s.x+=i,this.maybeWrap(s,e),this.drawButton(t,s.x,s.y,this.zoomIn),s.x+=i,this.maybeWrap(s,e),this.drawButton(t,s.x,s.y,this.zoomOut),s.x+=i,this.maybeWrap(s,e),this.drawButton(t,s.x,s.y,this.panning),s.x+=i,this.maybeWrap(s,e),this.drawButton(t,s.x,s.y,this.mouseArrow),s.x+=i,this.maybeWrap(s,e,i/2),this.drawSeparator(t,s.x,s.y),s.x+=i/2,this.maybeWrap(s,e),this.drawButton(t,s.x,s.y,this.undo),s.x+=i,this.maybeWrap(s,e),this.drawButton(t,s.x,s.y,this.redo),s.x+=i,this.maybeWrap(s,e,i/2),this.drawSeparator(t,s.x,s.y),s.x+=i/2,this.maybeWrap(s,e),this.drawButton(t,s.x,s.y,this.camera),s.x+=i,s.y+i-e.y}maybeWrap(t,e,i){i=null!=i?i:this.buttonSize,t.x+i>e.x+e.width&&(t.x=e.x,t.y+=this.buttonSize)}drawSeparator(t,e,i){const{buttonSize:s}=this,r=1*this.scale,o=Math.round(e+s/4)-r/2;t.strokePath({path:new b(o,i).lineTo(o,i+s),color:Ma,lineWidth:r})}drawButton(t,i,s,r){const{buttonSize:o,scale:h}=this;t.fillRect({x:i,y:s,width:o,height:o,color:Pa}),this.xyGraph.enabled&&!r.disabled&&t.addHitRegion(r.region).addRect(i,s,o,o);const n=1*h,a=Math.round(s+n/2)-.5,l=Math.round(i+n/2)-.5,d=Math.round(s+o-n+n/2)-.5,c=Math.round(i+o-n+n/2)-.5;if(t.strokePath({color:r.pushed?e.WHITE:e.BLACK,path:new b(c,d).lineTo(c,a).moveTo(c,d).lineTo(l,d),lineWidth:n}),t.strokePath({color:r.pushed?e.BLACK:e.WHITE,path:new b(l,a).lineTo(c-n,a).moveTo(l,a).lineTo(l,d-n),lineWidth:n}),this.imagesLoaded){const e=r.disabled?r.disabledImageElement:r.imageElement,n=e.naturalHeight*h,a=e.naturalWidth*h,l=Math.round(i+(o-a)/2),d=Math.round(s+(o-n)/2);t.ctx.drawImage(e,l,d,a,n)}}get scale(){return this.xyGraph.scale}get buttonSize(){return 25*this.scale}}const Ea="axis_count",Wa="plot_area_background_color",Ba="show_legend",Ia="show_plot_area_border",Oa="show_toolbar",Ha="title",Fa="title_font",Na="trace_count",Da="transparent";class ja extends ge{constructor(t,e){super(t,e),this.axes=[],this.traces=[],this.autoScaleAllowed=!0,this.properties.add(new $(Ea)),this.properties.add(new U(Wa)),this.properties.add(new z(Ba)),this.properties.add(new z(Ia)),this.properties.add(new z(Oa)),this.properties.add(new D(Ha)),this.properties.add(new q(Fa)),this.properties.add(new $(Na)),this.properties.add(new z(Da)),this.properties.addGenerator((()=>{const t=[];this.axes=[];const e=this.properties.getValue(Ea);for(let i=0;i<e;i++)this.axes.push(new Ta(this,i)),t.push(new z(`axis_${i}_auto_scale`),new G(`axis_${i}_auto_scale_treshold`),new U(`axis_${i}_axis_color`),new D(`axis_${i}_axis_title`),new z(`axis_${i}_dash_grid_line`),new U(`axis_${i}_grid_color`),new z(`axis_${i}_log_scale`),new G(`axis_${i}_maximum`),new G(`axis_${i}_minimum`),new q(`axis_${i}_scale_font`),new D(`axis_${i}_scale_format`),new z(`axis_${i}_show_grid`),new $(`axis_${i}_time_format`),new q(`axis_${i}_title_font`),new z(`axis_${i}_visible`)),i>1&&t.push(new z(`axis_${i}_left_bottom_side`),new z(`axis_${i}_y_axis`));this.traces=[];const i=this.properties.getValue(Na);for(let e=0;e<i;e++)this.traces.push(new Ca(this,e)),t.push(new z(`trace_${e}_anti_alias`),new $(`trace_${e}_buffer_size`),new z(`trace_${e}_concatenate_data`),new $(`trace_${e}_line_width`),new D(`trace_${e}_name`),new $(`trace_${e}_plot_mode`),new $(`trace_${e}_point_size`),new $(`trace_${e}_point_style`),new U(`trace_${e}_trace_color`),new $(`trace_${e}_trace_type`),new $(`trace_${e}_update_delay`),new $(`trace_${e}_update_mode`),new z(`trace_${e}_visible`),new $(`trace_${e}_x_axis_index`),new D(`trace_${e}_x_pv`),new j(`trace_${e}_x_pv_value`,`trace_${e}_x_pv`),new $(`trace_${e}_y_axis_index`),new D(`trace_${e}_y_pv`),new j(`trace_${e}_y_pv_value`,`trace_${e}_y_pv`));return t}))}init(){this.plotAreaRegion=new Aa(`${this.wuid}-plotarea`,this),this.traces.forEach((t=>t.init()))}draw(t){var e;const{scale:i}=this;let s=this.area;if(this.borderAlarmSensitive&&(s=d(this.area,2*i)),!this.transparent){const e=this.alarmSensitiveBackgroundColor;t.fillRect(Object.assign(Object.assign({},s),{color:e}))}this.showToolbar&&this.drawToolbar(t,s),this.title&&this.drawTitle(t,s);for(const t of this.axes){if(t.autoScale&&this.autoScaleAllowed){const e=this.calculateAutoscaledRange(t);e&&(t.effectiveMinimum=e.start,t.effectiveMaximum=e.stop)}const e=t.effectiveMinimum,s=t.effectiveMaximum;t.linearScale=new ro(i,t.scaleFont,e,s,t.logScale,50*i,t.axisColor,!0,t.visible),t.linearScale.scaleFormat=t.scaleFormat,t.linearScale.timeFormat=t.timeFormat}this.showLegend&&this.drawLegend(t,s),t.addHitRegion(this.plotAreaRegion).addRect(s.x,s.y,s.width,s.height);const r=this.drawAxes(t,s);this.drawPlotArea(t,r);const o=null===(e=this.plotAreaRegion)||void 0===e?void 0:e.selection;o&&this.drawZoomSelection(t,r,function(t,e){let i=t.x,s=t.y,r=i+t.width,o=s+t.height;if(r<i){const t=i;i=r,r=t}if(o<s){const t=s;s=o,o=t}let h=e.x,n=e.y,a=h+e.width,l=n+e.height;if(a<h){const t=h;h=a,a=t}if(l<n){const t=n;n=l,l=t}const d=Math.max(i,h),c=Math.max(s,n);return{x:d,y:c,width:Math.min(r,a)-d,height:Math.min(o,l)-c}}(r,o))}drawToolbar(t,e){this.toolbar||(this.toolbar=new Ra(this));const i=3*this.scale,s=d(e,i),r=this.toolbar.draw(t,s);e.y+=i+r+i,e.height-=i+r+i}drawTitle(t,e){const i=t.measureText(this.title,this.titleFont).height;t.fillText({x:e.x+e.width/2,y:e.y+i/2,align:"center",baseline:"middle",color:this.alarmSensitiveForegroundColor,font:this.titleFont,text:this.title});const s=2*this.scale;e.y+=i+s,e.height-=i+s}drawAxes(t,e){const{scale:i}=this,s=5*i,r=Object.assign({},e);let o=0;for(const e of this.getXAxes())if(e.visible){let i=0;e.axisTitle&&(i=s+t.measureText(e.axisTitle,e.titleFont).height),o+=i+e.linearScale.measureHorizontalHeight(t)}let h=0,n=0;for(const a of this.getYAxes().reverse()){const l=a.linearScale;if(a.visible){const d=l.calculateMargin(t,!1),c=r.height-o+(o>0?d:0);let p=0;a.axisTitle&&(p=t.measureText(a.axisTitle,a.titleFont).height,t.ctx.save(),t.ctx.translate(r.x+s+p/2,e.y+c/2),t.ctx.rotate(-Math.PI/2),t.fillText({x:0,y:0,align:"center",baseline:"middle",font:a.titleFont,color:a.axisColor,text:a.axisTitle}),t.ctx.restore(),p+=s);const g=p+l.drawVertical(t,r.x+p,e.y,c,!0,!1);r.x+=g,r.width-=g,h+=g;const u=l.margin;n=0===n?u:Math.min(n,u);const m=1*i,x=Math.round(r.x)-m/2,f=Math.round(e.y+d)-m/2;t.strokePath({path:new b(x,f).lineTo(x,f+c-2*d),color:a.axisColor,opacity:100/255,lineWidth:m})}else{const t=r.height-o;l.setDimensions(0,e.y,t,!1)}}let a=0;for(const o of this.getXAxes().reverse()){const n=o.linearScale;if(o.visible){const l=n.calculateMargin(t,!0),d=h-l;let c=0;if(o.axisTitle){c=t.measureText(o.axisTitle,o.titleFont).height;const i=e.x+h+(e.width-h)/2;t.fillText({x:i,y:r.y+r.height-c/2,align:"center",baseline:"middle",font:o.titleFont,color:o.axisColor,text:o.axisTitle}),c+=s}const p=c+n.drawHorizontal(t,e.x+d,r.y+r.height-c,e.width-d);r.height-=p;const g=n.margin;a=0===a?g:Math.min(a,g);const u=1*i,m=Math.round(e.x+d+l)-u/2,x=Math.round(r.y+r.height)-u/2;t.strokePath({path:new b(m,x).lineTo(m+r.width-l,x),color:o.axisColor,opacity:100/255,lineWidth:u})}else{const t=e.x+h,i=e.width-h;n.setDimensions(t,0,i,!0)}}return r.y+=n,r.width-=a,r.height-=o>0?n:2*n,r}drawPlotArea(t,i){const{scale:s}=this,r=1*s;if(t.fillRect(Object.assign(Object.assign({},i),{color:this.plotAreaBackgroundColor})),this.showPlotAreaBorder){const{x:s,y:o,width:h,height:n}=d(i,r/2);t.strokePath({path:new b(s,o).lineTo(s+h,o).lineTo(s+h,o+n),color:e.BLACK,lineWidth:r})}for(const e of this.axes.filter((t=>t.visible&&t.showGrid))){const o=e.linearScale;if(e.isHorizontal())for(const h of o.getGridPositions()){const n=Math.round(o.getX()+h)-r/2;t.strokePath({path:new b(n,i.y).lineTo(n,i.y+i.height),color:e.gridColor,lineWidth:r,dash:e.dashGridLine?[6*s,2*s]:void 0})}else for(const h of o.getGridPositions()){const n=Math.round(o.getY()+h)-r/2;t.strokePath({path:new b(i.x,n).lineTo(i.x+i.width,n),color:e.gridColor,lineWidth:r,dash:e.dashGridLine?[6*s,2*s]:void 0})}}t.ctx.save(),t.ctx.beginPath(),t.ctx.rect(i.x,i.y,i.width,i.height),t.ctx.clip();for(const e of this.traces.filter((t=>t.visible))){const i=this.getAxis(e.xAxisIndex).linearScale,s=this.getAxis(e.yAxisIndex).linearScale,r=[];for(const t of e.snapshot()){const e=i.getValuePosition(t.x),o=s.getValuePosition(t.y);r.push({x:e,y:o})}if(r.length){e.drawTrace(t,r);for(const i of r)e.drawPoint(t,i)}}t.ctx.restore()}drawZoomSelection(t,i,s){var r;const{scale:o}=this;switch(null===(r=this.toolbar)||void 0===r?void 0:r.currentTool){case"rubberband-zoom":t.strokeRect(Object.assign(Object.assign({},s),{color:e.BLACK,lineWidth:1*o}));break;case"horizontal-zoom":const r=s;r.y=i.y,r.height=i.height,t.strokeRect(Object.assign(Object.assign({},c(r)),{color:e.BLACK,lineWidth:1*o}));break;case"vertical-zoom":const h=s;h.x=i.x,h.width=i.width,t.strokeRect(Object.assign(Object.assign({},c(h)),{color:e.BLACK,lineWidth:1*o}))}}drawLegend(t,e){const{scale:i}=this,s=25*i,r=2*i,o=5*i,h=W.ARIAL_10.scale(i);for(const n of this.getYAxes()){const a=this.traces.filter((t=>t.visible&&t.yAxisIndex===n.index)),l=[];let c=[],p=0,g=0;for(const i of a){let n=s+r+o;i.name&&(n+=t.measureText(i.name,h).width),p+n<e.width?(c.push(i),p+=n):(l.push(c),n=Math.max(n,p),c=[i],p=n)}if(c.length&&(l.push(c),g=Math.max(g,p)),!l.length)continue;const u=s*l.length,m={x:Math.round(e.x+(e.width-g)/2),y:Math.round(e.y+e.height-u),width:g,height:u};e.height-=m.height,t.fillRect(Object.assign(Object.assign({},m),{color:this.plotAreaBackgroundColor})),t.strokeRect(Object.assign(Object.assign({},d(m,1*i/2)),{color:n.axisColor}));let x=m.x,f=m.y;for(let e=0;e<l.length;e++){const n=l[e],a=f+e*s,d=a+s/2;for(const e of n){const n=e.pointSize>Math.floor((s-o)/2)?Math.floor(s-o):e.pointSize;switch(e.traceType){case 3:const r=x+s/2;t.strokePath({path:new b(r,a+n).lineTo(r,a+s),lineWidth:e.lineWidth,color:e.traceColor,opacity:100/255}),e.drawPoint(t,{x:r,y:a+n});break;case 4:case 5:const o=[{x:x,y:a+s/2},{x:x+s/2,y:a+n},{x:x+s,y:a+s/2},{x:x+s,y:a+s},{x:x,y:a+s}];t.fillPath({path:b.fromPoints(o),color:e.traceColor,opacity:100/255}),5===e.traceType&&t.strokePath({path:b.fromPoints(o.slice(0,3)),color:e.traceColor,lineWidth:1*i}),e.drawPoint(t,{x:x+s/2,y:a+n});break;default:e.drawTrace(t,[{x:x,y:d},{x:x+s,y:d}]),e.drawPoint(t,{x:x+s/2,y:d})}x+=s+r,e.name&&(t.fillText({x:x,y:d,align:"left",baseline:"middle",color:e.traceColor,font:h,text:e.name}),x+=t.measureText(e.name,h).width),x+=o}}}}setCursor(t){this.plotAreaRegion.cursor=t}calculateAutoscaledRange(t){let e,i;const s=t.logScale;for(const r of this.traces)if(r.visible&&(this.axes[r.xAxisIndex]===t||this.axes[r.yAxisIndex]===t))for(const o of r.snapshot()){const r=t.isHorizontal()?o.x:o.y;(void 0===e||e>r)&&(!s||r>0)&&(e=r),(void 0===i||i<r)&&(!s||r>0)&&(i=r)}if(void 0!==e&&void 0!==i)return{start:e,stop:i}}performAutoScale(){for(const t of this.axes)t.visible&&t.performAutoScale()}clearGraph(){for(const t of this.traces)t.clearData();this.requestRepaint()}getAxes(){return[...this.axes]}getXAxes(){return this.axes.filter((t=>t.isHorizontal()))}getYAxes(){return this.axes.filter((t=>t.isVertical()))}getAxis(t){return this.axes[t]}getTrace(t){return this.traces[t]}get axisCount(){return this.properties.getValue(Ea)}get plotAreaBackgroundColor(){return this.properties.getValue(Wa)}get showLegend(){return this.properties.getValue(Ba)}get showPlotAreaBorder(){return this.properties.getValue(Ia)}get showToolbar(){return this.properties.getValue(Oa)}get title(){return this.properties.getValue(Ha)}get titleFont(){return this.properties.getValue(Fa).scale(this.scale)}get traceCount(){return this.properties.getValue(Na)}get transparent(){return this.properties.getValue(Da)}}const $a="macros";class Ga extends ge{constructor(t,e){super(t,e),this._widgets=[],this._connections=[],this.relativeScale=1,this.properties.add(new Z($a))}expandContainerMacros(t){for(const e in this.macros.macros)t=(t=t.replace(`$(${e})`,this.macros.macros[e])).replace(`\${${e}}`,this.macros.macros[e]);return this.parent&&this.macros.includeParentMacros&&(t=this.parent.expandContainerMacros(t)),t}findWidget(t){for(const e of this.widgets){if(e.wuid===t)return e;if(e instanceof Ga){const i=e.findWidget(t);if(i)return i}}}findWidgetByName(t){for(const e of this.widgets){if(e.name===t)return e;if(e instanceof Ga){const i=e.findWidgetByName(t);if(i)return i}}for(const e of this.connections)if(e.name===t)return e}closeMenu(){for(const t of this.widgets)t.closeMenu()}hide(){for(const t of this.widgets)t.hide()}destroy(){for(const t of this.widgets)t.destroy()}get widgets(){return this._widgets}get connections(){return this._connections}get macros(){return this.properties.getValue($a)}}const za="arrow_length",Ua="arrows",qa="fill_arrow",Ya="name",Xa="line_color",Ka="line_style",Za="line_width",Ja="src_wuid",Qa="src_term",tl="tgt_wuid",el="tgt_term",il="router",sl="points",rl="LEFT",ol="UP",hl="DOWN",nl="RIGHT";class al extends ge{constructor(t){super(t),this.properties.clear(),this.properties.add(new $(za)),this.properties.add(new $(Ua)),this.properties.add(new z(qa)),this.properties.add(new D(Ya)),this.properties.add(new U(Xa)),this.properties.add(new $(Ka)),this.properties.add(new $(Za)),this.properties.add(new D(Ja)),this.properties.add(new D(Qa)),this.properties.add(new D(tl)),this.properties.add(new D(el)),this.properties.add(new $(il)),this.properties.add(new X(sl)),this.properties.add(new D("wuid"))}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):0===this.router?this.drawManhattanConnection(t):1===this.router&&this.drawDirectConnection(t))}drawPath(t){const e=this.getPosition(this.sourceWidget,this.sourceTerm),i=this.getPosition(this.targetWidget,this.targetTerm),s=[e,...this.points,i],r=b.fromPoints(s).translate(.5*this.scale,.5*this.scale);t.strokePath({path:r,lineWidth:this.lineWidth,color:this.lineColor,dash:this.getDashArray()}),this.drawStartArrow(t,s[1],s[0]),this.drawStopArrow(t,s[s.length-2],s[s.length-1])}drawManhattanConnection(t){const e=this.getManhattanAnchor(this.sourceWidget,this.sourceTerm),i=this.getManhattanAnchor(this.targetWidget,this.targetTerm),s=this.route(e,i),r=b.fromPoints(s);this.lineWidth&&t.strokePath({lineWidth:this.lineWidth,color:this.lineColor,path:r,dash:this.getDashArray()}),this.drawStartArrow(t,s[s.length-2],s[s.length-1]),this.drawStopArrow(t,s[1],s[0])}getDashArray(){const{scale:t}=this;if(this.lineWidth){if(0===this.lineStyle)return[];if(1===this.lineStyle)return[6*t,2*t];if(2===this.lineStyle)return[2*t,2*t];if(3===this.lineStyle)return[6*t,2*t,2*t,2*t];if(4===this.lineStyle)return[6*t,2*t,2*t,2*t,2*t,2*t];console.warn(`Unsupported connection line style ${this.lineStyle}`)}}drawDirectConnection(t){const e=this.getPosition(this.sourceWidget,this.sourceTerm),i=this.getPosition(this.targetWidget,this.targetTerm);this.lineWidth&&t.strokePath({path:new b(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=ol;break;case"BOTTOM":case"BOTTOM_LEFT":case"BOTTOM_RIGHT":i=hl;break;case"LEFT":i=rl;break;case"RIGHT":i=nl}const s=t.bounds,r=this.getPosition(t,e),o=r.x-s.x,h=s.x+s.width-r.x,n=r.y-s.y,a=s.y+s.height-r.y;return i=Math.min(o,h)<Math.min(n,a)?o<h?rl:nl:n<a?ol:hl,{x:r.x,y:r.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:const i=parseInt(e,10);let s=t.properties.getProperty("points");if(s){let t=s.value;return t=w(t,this.scale),t[i]}throw Error(`Unexpected term ${e}`)}}route(t,e){let i,s,r=t.x-e.x,o=t.y-e.y,h={x:0,y:0},n=[];const{tolxtol:a,tol:l,minDist:d}=this;if(r*r<a&&o*o<a)return[{x:e.x,y:e.y}];t.direction===rl?r>0&&o*o<l&&e.direction===nl?(h=e,i=e.direction):(r<0?h={x:t.x-d,y:t.y}:o>0&&e.direction===hl||o<0&&e.direction===ol?h={x:e.x,y:t.y}:t.direction===e.direction?(s=Math.min(t.x,e.x)-d,h={x:s,y:t.y}):h={x:t.x-r/2,y:t.y},i=o>0?ol:hl):t.direction===nl?r<0&&o*o<l&&e.direction===rl?(h=e,i=e.direction):(r>0?h={x:t.x+d,y:t.y}:o>0&&e.direction===hl||o<0&&e.direction===ol?h={x:e.x,y:t.y}:t.direction===e.direction?(s=Math.max(t.x,e.x)+d,h={x:s,y:t.y}):h={x:t.x-r/2,y:t.y},i=o>0?ol:hl):t.direction===hl?r*r<l&&o<0&&e.direction===ol?(h=e,i=e.direction):(o>0?h={x:t.x,y:t.y+d}:r>0&&e.direction===nl||r<0&&e.direction===rl?h={x:t.x,y:e.y}:t.direction===e.direction?(s=Math.max(t.y,e.y)+d,h={x:t.x,y:s}):h={x:t.x,y:t.y-o/2},i=r>0?rl:nl):t.direction===ol&&(r*r<l&&o>0&&e.direction===hl?(h=e,i=e.direction):(o<0?h={x:t.x,y:t.y-d}:r>0&&e.direction===nl||r<0&&e.direction===rl?h={x:t.x,y:e.y}:t.direction===e.direction?(s=Math.min(t.y,e.y)-d,h={x:t.x,y:s}):h={x:t.x,y:t.y-o/2},i=r>0?rl:nl));const c=Object.assign(Object.assign({},h),{direction:i});return n=n.concat(this.route(c,e)),n.push(t),n}drawStartArrow(t,e,i){const s=t.ctx;if(1===this.arrows||3===this.arrows){const t=this.calculateArrowPoints(e,i);if(t[2]=i,this.fillArrow){s.fillStyle=this.lineColor.toString(),s.beginPath();for(let e=0;e<t.length;e++)0===e?s.moveTo(t[e].x,t[e].y):s.lineTo(t[e].x,t[e].y);s.fill()}else s.strokeStyle=this.lineColor.toString(),s.lineWidth=this.lineWidth,s.beginPath(),s.moveTo(i.x,i.y),s.lineTo(t[0].x,t[0].y),s.moveTo(i.x,i.y),s.lineTo(t[1].x,t[1].y),s.stroke()}}drawStopArrow(t,e,i){const s=t.ctx;if(2===this.arrows||3===this.arrows){const t=this.calculateArrowPoints(e,i);if(t[2]=i,this.fillArrow){s.fillStyle=this.lineColor.toString(),s.beginPath();for(let e=0;e<t.length;e++)0===e?s.moveTo(t[e].x,t[e].y):s.lineTo(t[e].x,t[e].y);s.fill()}else s.strokeStyle=this.lineColor.toString(),s.lineWidth=this.lineWidth,s.beginPath(),s.moveTo(i.x,i.y),s.lineTo(t[0].x,t[0].y),s.moveTo(i.x,i.y),s.lineTo(t[1].x,t[1].y),s.stroke()}}calculateArrowPoints(t,e){const i=x(e,t),s=Math.PI/10,r=new f(this.arrowLength,i.theta-s),o=new f(this.arrowLength,i.theta+s),h=new f(Math.floor(this.arrowLength*Math.cos(s)),i.theta);return[p(r.toPoint(),e.x,e.y),p(o.toPoint(),e.x,e.y),p(h.toPoint(),e.x,e.y)]}get minDist(){return 20*this.scale}get tol(){return.1*this.scale}get tolxtol(){return.01*this.scale}get name(){return this.properties.getValue(Ya)}get arrows(){return this.properties.getValue(Ua)}get fillArrow(){return this.properties.getValue(qa)}get arrowLength(){return this.scale*this.properties.getValue(za)}get lineColor(){return this.properties.getValue(Xa)}get lineStyle(){return this.properties.getValue(Ka)}get lineWidth(){return this.scale*this.properties.getValue(Za)}get router(){return this.properties.getValue(il)}get sourceTerm(){return this.properties.getValue(Qa)}get sourceWuid(){return this.properties.getValue(Ja)}get targetTerm(){return this.properties.getValue(el)}get targetWuid(){return this.properties.getValue(tl)}get points(){return w(this.properties.getValue(sl),this.scale)}}let ll=0;const dl="auto_scale_widgets";class cl extends Ga{constructor(t,e){super(t,e),this.properties.add(new it(dl))}parseNode(t){super.parseNode(t);const e=ll++;this.macros.set("DID",`DID_${e}`);const i=this.properties.getValue("name");this.macros.set("DNAME",i);for(const e of t.getNodes("widget")){const t=e.getString("widget_type"),i=this.display.createWidget(t,this);i&&(i.parseNode(e),this.widgets.push(i))}for(const e of t.getNodes("connection")){const t=new al(this.display);t.parseNode(e),this.connections.push(t)}}draw(t){for(const e of this.widgets.filter((t=>t.visible)))e.drawHolder(t),e.draw(t),e.drawDecoration(t);for(const e of this.connections)e.draw(t);for(const e of this.widgets.filter((t=>t.visible)))e.drawOverlay(t)}measureContentBounds(t){let e=0,i=0,s=0,r=0;for(const o of this.widgets.filter((t=>t.visible))){const h=t?o.bounds:o.unscaledBounds;e=Math.min(e,h.x),i=Math.min(i,h.y),s=Math.max(s,h.x+h.width),r=Math.max(r,h.y+h.height)}return{x:e,y:i,width:s-e,height:r-i}}get autoScaleWidgets(){return this.properties.getValue(dl)}}class pl extends Ga{parseNode(t){super.parseNode(t);for(const e of t.getNodes("widget")){const t=e.getString("widget_type"),i=this.display.createWidget(t,this);i&&(i.parseNode(e),this.widgets.push(i))}}draw(t){this.transparent||t.fillRect({x:this.x,y:this.y,width:this.width,height:this.height,color:this.backgroundColor});const e=t.createChild(this.width,this.height);for(const t of this.widgets.filter((t=>t.visible)))t.drawHolder(e),t.draw(e),t.drawDecoration(e);for(const t of this.widgets.filter((t=>t.visible)))t.drawOverlay(e);t.copy(e,this.x,this.y)}}class gl{constructor(){this.includeParentMacros=!0,this.macros={}}clear(){this.macros={}}set(t,e){this.macros[t]=e}get(t){if(t in this.macros)return this.macros[t]}}class ul{constructor(t,e,i){this.autoScaleWidgets=t,this.minWidth=e,this.minHeight=i}}class ml{constructor(t,e,i){this.widthScalable=t,this.heightScalable=e,this.keepWidthHeightRatio=i}}class xl{constructor(){this.scripts=[]}}class fl{constructor(t){this.node=t}get name(){return this.node.nodeName}static parseFromXML(t){const e=(new DOMParser).parseFromString(t,"text/xml");return new fl(e.documentElement)}getNode(t){const e=this.findChild(t);return new fl(e)}getNodes(t){const e=[];for(let i=0;i<this.node.childNodes.length;i++){const s=this.node.childNodes[i];3!==s.nodeType&&(t&&s.nodeName!==t||e.push(new fl(s)))}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 e=0;e<this.node.childNodes.length;e++){const i=this.node.childNodes[e];if(i.nodeName===t&&null!==i.textContent)return i.textContent}if(void 0!==e)return e;throw new Error(`No child node named ${t} could be found`)}getStringAttribute(t){const e=this.node.attributes.getNamedItem(t);if(null===e)throw new Error(`No attribute named ${t}`);return e.textContent||""}getFloat(t,e){for(let e=0;e<this.node.childNodes.length;e++){const i=this.node.childNodes[e];if(i.nodeName===t&&null!==i.textContent)return parseFloat(i.textContent)}if(void 0!==e)return e;throw new Error(`No child node named ${t} could be found`)}getInt(t,e){for(let e=0;e<this.node.childNodes.length;e++){const i=this.node.childNodes[e];if(i.nodeName===t&&null!==i.textContent)return parseInt(i.textContent,10)}if(void 0!==e)return e;throw new Error(`No child node named ${t} could be found`)}getIntAttribute(t){const e=this.node.attributes.getNamedItem(t);if(null===e)throw new Error(`No attribute named ${t}`);return parseInt(e.textContent||"",10)}getBoolean(t,e){for(let e=0;e<this.node.childNodes.length;e++){const i=this.node.childNodes[e];if(i.nodeName===t)return"true"===i.textContent}if(void 0!==e)return e;throw new Error(`No child node named ${t} could be found`)}getBooleanAttribute(t,e){const i=this.node.attributes.getNamedItem(t);if(null===i){if(void 0!==e)return e;throw new Error(`No attribute named ${t}`)}return"true"===i.textContent}getColor(t,e){const i=this.findChild(t);for(let t=0;t<i.childNodes.length;t++){const e=i.childNodes[t];if("color"===e.nodeName)return this.parseColorNode(new fl(e))}if(void 0!==e)return e;throw new Error("No child node named 'color' could be found")}getFont(t){const e=this.getNode(t);if(e.hasNode("opifont.name")){const t=e.getNode("opifont.name"),i=t.getStringAttribute("fontName"),s=t.getIntAttribute("height"),r=t.getIntAttribute("style");let o=!1;return t.hasAttribute("pixels")&&(o=t.getBooleanAttribute("pixels")),new W(i,s,r,o)}{const t=e.getNode("fontdata"),i=t.getStringAttribute("fontName"),s=t.getIntAttribute("height"),r=t.getIntAttribute("style");return new W(i,s,r,!1)}}getPoints(t){const e=this.getNode(t),i=[];for(const t of e.getNodes("point"))i.push({x:t.getIntAttribute("x"),y:t.getIntAttribute("y")});return i}getStringList(t){const e=this.getNode(t),i=[];for(const t of e.getNodes("s"))i.push(t.getTextContent());return i}getScripts(t){const e=this.getNode(t),i=new xl;for(const t of e.getNodes("path")){const e=[];for(const i of t.getNodes("pv"))e.push({pvName:i.getTextContent(),trigger:i.getBooleanAttribute("trig")});const s=t.getStringAttribute("pathString");"EmbeddedJs"===s?i.scripts.push({embedded:!0,text:t.getString("scriptText"),checkConnect:t.getBooleanAttribute("checkConnect"),skipFirstExecution:t.getBooleanAttribute("sfe",!1),inputs:e}):"EmbeddedPy"===s?console.warn("Unsupported EmbeddedPy script"):i.scripts.push({embedded:!1,path:s,checkConnect:t.getBooleanAttribute("checkConnect"),skipFirstExecution:t.getBooleanAttribute("sfe",!1),inputs:e})}return i}getScaleOptions(t){const e=this.getNode(t);return new ml(e.getBoolean("width_scalable"),e.getBoolean("height_scalable"),e.getBoolean("keep_wh_ratio"))}getAutoScaleWidgets(t){const e=this.getNode(t);return new ul(e.getBoolean("auto_scale_widgets"),e.getInt("min_width"),e.getInt("min_height"))}getColorMap(t){const e=this.getNode(t);if(!e.hasNode("e"))return new H(e.getInt("map"),e.getBoolean("interpolate"),e.getBoolean("autoscale"));{const t=new H(0,e.getBoolean("interpolate"),e.getBoolean("autoscale"));for(const i of e.getNodes("e")){const e=Number(i.getTextContent()),s=i.getIntAttribute("red"),r=i.getIntAttribute("green"),o=i.getIntAttribute("blue");t.addMapping(e,s,r,o)}}}getRules(t){const e=this.getNode(t),i=new jt;for(const t of e.getNodes("rule")){const e=[];for(const i of t.getNodes("pv"))e.push({pvName:i.getTextContent(),trigger:i.getBooleanAttribute("trig")});const s=[];for(const e of t.getNodes("exp")){e.getNode("value").hasNode("color")?s.push({type:"color",expression:e.getStringAttribute("bool_exp"),outputValue:e.getColor("value")}):s.push({type:"string",expression:e.getStringAttribute("bool_exp"),outputValue:e.getString("value")})}i.rules.push({name:t.getStringAttribute("name"),propertyName:t.getStringAttribute("prop_id"),outputExpression:t.getBooleanAttribute("out_exp"),inputs:e,expressions:s})}return i}getMacros(t){const e=this.getNode(t),i=new gl;i.includeParentMacros=e.getBoolean("include_parent_macros");for(const t of e.getNodes())"include_parent_macros"!==t.name&&i.set(t.name,e.getString(t.name));return i}getActions(t){const e=this.getNode(t),i=new Wt;i.hookFirstActionToClick=e.getBooleanAttribute("hook"),i.hookAllActionsToClick=e.getBooleanAttribute("hook_all",!1);for(const t of e.getNodes("action")){const e=t.getStringAttribute("type");if("OPEN_DISPLAY"===e){const e=new Bt(t.getString("path"));t.hasNode("mode")&&(e.mode=t.getInt("mode")),e.description=t.getString("description"),i.add(e)}else if("OPEN_FILE"===e){const e=new It;e.path=t.getString("path"),e.description=t.getString("description"),i.add(e)}else if("EXECUTE_CMD"===e){const e=new Ht;e.command=t.getString("command"),e.commandDirectory=t.getString("command_directory"),e.waitTime=t.getInt("wait_time"),e.description=t.getString("description"),i.add(e)}else if("EXECUTE_JAVASCRIPT"===e){const e=new Ot(t.getBoolean("embedded"));e.embedded?e.text=t.getString("scriptText"):e.path=t.getString("path"),e.description=t.getString("description"),i.add(e)}else if("WRITE_PV"===e){const e=new Ft(t.getString("pv_name"),t.getString("value"));e.confirmMessage=t.getString("confirm_message",""),e.description=t.getString("description"),i.add(e)}else if("PLAY_SOUND"===e){const e=new Nt;e.path=t.getString("path"),e.description=t.getString("description"),i.add(e)}else if("OPEN_WEBPAGE"===e){const e=new Dt;e.hyperlink=t.getString("hyperlink"),e.description=t.getString("description"),i.add(e)}else console.warn(`Unsupported action type ${e}`),i.add(null)}return i}parseColorNode(t){const i=t.getIntAttribute("red"),s=t.getIntAttribute("green"),r=t.getIntAttribute("blue");return new e(i,s,r)}findChild(t){for(let e=0;e<this.node.childNodes.length;e++){const i=this.node.childNodes[e];if(i.nodeName===t)return i}throw new Error(`No child node named ${t} could be found`)}}let wl=0;const yl="group_name",vl="opi_file",bl="resize_behaviour";class Tl extends Ga{constructor(t,e){super(t,e),this.properties.add(new D(yl)),this.properties.add(new D(vl)),this.properties.add(new $(bl,0))}parseNode(t){super.parseNode(t);const e=wl++;this.macros.set("LCID",`LCID_${e}`)}init(){this.opiFile&&fetch(this.display.baseUrl+this.opiFile,{credentials:"same-origin"}).then((t=>{t.ok&&t.text().then((t=>{this.linkedDisplay=new cl(this.display,this);const e=fl.parseFromXML(t);this.linkedDisplay.parseNode(e),this.requestRepaint()}))}))}draw(t){this.transparent||t.fillRect(Object.assign(Object.assign({},this.area),{color:this.backgroundColor}));const e=this.getLinkedWidget();if(this.linkedDisplay&&e)if(t.fillRect(Object.assign(Object.assign({},this.area),{color:this.linkedDisplay.backgroundColor})),0===this.resizeBehavior){const e=this.linkedDisplay.measureContentBounds(!1);let{width:i,height:s}=e;const r=this.display.scale;i*=r,s*=r;const o=i/s;let h=this.width,n=h/o,a=h/i;n>this.height&&(n=this.height,h=n*o,a=n/i),this.linkedDisplay.relativeScale=a;const l=t.createChild(Math.ceil(h),Math.ceil(n));l.translate(e.x,e.y),this.linkedDisplay.draw(l),t.copy(l,this.x,this.y)}else if(1===this.resizeBehavior)console.warn("Unsupported resize behavior of LinkingContainer",this.resizeBehavior);else if(2===this.resizeBehavior){const e=this.linkedDisplay.measureContentBounds(!0),i=t.createChild(e.width,e.height);i.translate(e.x,e.y),this.linkedDisplay.draw(i),t.copy(i,this.x,this.y)}else 3===this.resizeBehavior&&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(vl)}get groupName(){return this.properties.getValue(yl)}get resizeBehavior(){return this.properties.getValue(bl)}}const Sl="minimum_tab_height",Vl="active_tab",Al="horizontal_tabs",_l="tab_count";class Ll{constructor(t,e){this.widget=t,this.i=e,this.headerRegion={id:`${t.wuid}-header-${e}`,click:()=>{t.activeTab!==e&&(t.properties.setValue(Vl,e),t.requestRepaint())},cursor:"pointer"}}get scale(){return this.widget.scale}getValue(t){return this.widget.properties.getValue(`tab_${this.i}_${t}`)}get title(){return this.getValue("title")}get backgroundColor(){return this.getValue("background_color")}get foregroundColor(){return this.getValue("foreground_color")}get enabled(){return this.getValue("enabled")}get font(){return this.getValue("font").scale(this.scale)}}class Cl extends Ga{constructor(t,e){super(t,e),this.tabs=[],this.properties.add(new $(Sl)),this.properties.add(new $(Vl)),this.properties.add(new z(Al)),this.properties.add(new $(_l)),this.properties.addGenerator((()=>{this.tabs=[];const t=this.properties.getValue(_l),e=[];for(let i=0;i<t;i++)this.tabs.push(new Ll(this,i)),e.push(new D(`tab_${i}_title`),new U(`tab_${i}_background_color`),new U(`tab_${i}_foreground_color`),new z(`tab_${i}_enabled`),new q(`tab_${i}_font`));return e}))}parseNode(t){super.parseNode(t);for(const e of t.getNodes("widget")){const t=e.getString("widget_type"),i=this.display.createWidget(t,this);i&&(i.parseNode(e),this.widgets.push(i))}}draw(t){this.horizontalTabs?this.drawHorizontalTabs(t):this.drawVerticalTabs(t)}measureTabOffset(t){return this.horizontalTabs?{x:0,y:this.measureLabelHeight(t)}:{x:this.measureLabelWidth(t),y:0}}measureLabelHeight(t){const{scale:e}=this,i=1*e;let s=this.minimumTabHeight;for(let e=0;e<this.tabs.length;e++){const r=this.tabs[e],o=t.measureText(r.title,r.font).height+i;o>s&&(s=o)}return s+this.margin}measureLabelWidth(t){const{scale:e}=this,i=1*e;let s=this.minimumTabWidth;for(let e=0;e<this.tabs.length;e++){const r=this.tabs[e],o=t.measureText(r.title,r.font).width+i;o>s&&(s=o)}return s+this.margin}drawHorizontalTabs(t){const{margin:i,gap:s,scale:r}=this,o=this.measureLabelHeight(t),h=1*r;let n=this.x;for(let a=0;a<this.tabs.length;a++){const l=this.tabs[a],d=t.measureText(l.title,l.font);let c,p,g,u,m;this.activeTab===a?(c=n,p=this.y,g=d.width+h+i+s,u=o,m=l.backgroundColor):(c=n+s,p=this.y+2*r,g=d.width+h+i-s,u=o-2*r,m=this.darken(l.backgroundColor)),t.fillRect({x:c,y:p,width:g,height:u,color:m});t.addHitRegion(l.headerRegion).addRect(c,p,g,u);const x=t.createLinearGradient(c,p,c,p+u);if(x.addColorStop(0,e.WHITE.toString()),x.addColorStop(1,e.WHITE.withAlpha(0).toString()),t.fillRect({x:c,y:p,width:g,height:u,gradient:x}),t.fillText({x:c+g/2,y:p+u/2,baseline:"middle",align:"center",font:l.font,color:l.foregroundColor,text:l.title}),n+=d.width+h+i-1*r,this.activeTab===a){const e=this.x,i=this.y+o,s=this.width,r=this.height-o;t.fillRect({x:e,y:i,width:s,height:r,color:l.backgroundColor});const h=this.widgets[a],n=t.createChild(s,r);h.drawHolder(n),h.draw(n),h.drawDecoration(n),h.drawOverlay(n),t.copy(n,e,i)}else{this.widgets[a].hide()}}}drawVerticalTabs(t){const{margin:i,gap:s,scale:r}=this,o=this.measureLabelWidth(t),h=1*r;let n=this.y;for(let a=0;a<this.tabs.length;a++){const l=this.tabs[a],d=t.measureText(l.title,l.font),c=Math.max(d.height+h+h,this.minimumTabHeight);let p,g,u,m,x;this.activeTab===a?(p=this.x,g=n,u=o,m=c+i+s,x=l.backgroundColor):(p=this.x+2*r,g=n+s,u=o-2*r,m=c+i-s,x=this.darken(l.backgroundColor)),t.fillRect({x:p,y:g,width:u,height:m,color:x});t.addHitRegion(l.headerRegion).addRect(p,g,u,m);const f=t.createLinearGradient(p,g,p+u,g);if(f.addColorStop(0,e.WHITE.toString()),f.addColorStop(1,e.WHITE.withAlpha(0).toString()),t.fillRect({x:p,y:g,width:u,height:m,gradient:f}),t.fillText({x:p+u/2,y:g+m/2,baseline:"middle",align:"center",font:l.font,color:l.foregroundColor,text:l.title}),n+=c+i-1*r,this.activeTab===a){const e=this.x+o-1*r,i=this.y,s=this.width-o,h=this.height-1*r;t.fillRect({x:e,y:i,width:s,height:h,color:l.backgroundColor});const n=this.widgets[a],d=t.createChild(s,h);n.drawHolder(d),n.draw(d),n.drawDecoration(d),n.drawOverlay(d),t.copy(d,e,i)}else{this.widgets[a].destroy()}}}darken(t){const i=Math.max(0,t.red-30),s=Math.max(0,t.green-30),r=Math.max(0,t.blue-30);return new e(i,s,r)}get margin(){return 10*this.scale}get gap(){return 2*this.scale}get minimumTabWidth(){return 20*this.scale}get minimumTabHeight(){return this.scale*this.properties.getValue(Sl)}get activeTab(){return this.properties.getValue(Vl)}get tabCount(){return this.properties.getValue(_l)}get horizontalTabs(){return this.properties.getValue(Al)}}class Pl extends ge{constructor(t,e){super(t,e),this.properties.add(new D("url"))}init(){this.iframe=document.createElement("iframe"),this.iframe.src="https://yamcs.org",this.iframe.style.display="none",this.iframe.style.border="0",this.display.rootPanel.appendChild(this.iframe)}draw(t){if(this.iframe){const{x:t,y:e,width:i,height:s}=this.display.measureAbsoluteArea(this);this.iframe.style.position="absolute",this.iframe.style.display="block",this.iframe.style.left=`${t}px`,this.iframe.style.top=`${e}px`,this.iframe.style.width=`${i}px`,this.iframe.style.height=`${s}px`,this.url&&this.prevUrl!==this.url&&(this.iframe.src=this.url,this.prevUrl=this.url)}}hide(){this.iframe&&(this.iframe.style.display="none")}destroy(){this.iframe&&(this.display.rootPanel.removeChild(this.iframe),this.iframe=void 0)}get url(){return this.properties.getValue("url")}}t.CompiledFormula=V,t.DefaultImageResolver=S,t.Display=class{constructor(t){this.targetElement=t,this.repaintRequested=!1,this._editMode=!1,this._showGrid=!1,this._showOutline=!1,this._showRuler=!1,this._selection=[],this._scale=1,this._transparent=!1,this.imagesPrefix="",this.baseUrl="",this.eventListeners={closedisplay:[],opendisplay:[],openpv:[],selection:[],scale:[]},this.rootPanel=document.createElement("div"),this.rootPanel.className="display-root",this.rootPanel.style.overflow="hidden",this.rootPanel.style.position="relative",this.rootPanel.style.fontSize="0",t.appendChild(this.rootPanel);const e=document.createElement("canvas");this.rootPanel.appendChild(e),this.g=new v(e),this.ctx=this.g.ctx,this.pvEngine=new Tt(this),this.pvEngine.addProvider(new Rt),this.pvEngine.addProvider(new P),this.displayRegion={id:"display-root",click:()=>this.closeMenu()},this.imageResolver=new S(this),window.requestAnimationFrame((()=>this.step())),new o(this,e,this.g.hitCanvas)}addProvider(t){this.pvEngine.addProvider(t)}addScriptLibrary(t,e){this.pvEngine.addScriptLibrary(t,e)}setImageResolver(t){this.imageResolver=t}getImageResolver(){return this.imageResolver}step(){this.repaintRequested&&(this.g.clearHitCanvas(),this.drawScreen(),this.repaintRequested=!1),window.requestAnimationFrame((()=>this.step()))}drawScreen(){var t;if(this.instance?(this.rootPanel.style.height=this.instance.holderHeight+"px",this.rootPanel.style.width=this.instance.holderWidth+"px"):(this.rootPanel.style.height="0px",this.rootPanel.style.width="0px"),this.g.resize(this.rootPanel.clientWidth,this.rootPanel.clientHeight),this.transparent&&this.g.clearCanvas(),this.editMode){const t=document.createElement("canvas"),e=t.getContext("2d");t.width=16,t.height=16,e.fillStyle="#d6d6d6",e.fillRect(0,0,8,8),e.fillRect(8,8,8,8),this.ctx.fillStyle=this.ctx.createPattern(t,"repeat"),this.ctx.fillRect(0,0,this.ctx.canvas.width,this.ctx.canvas.height),this.instance&&this.g.fillRect(Object.assign(Object.assign({},this.instance.bounds),{color:this.instance.backgroundColor}))}else this.transparent||this.g.fillCanvas((null===(t=this.instance)||void 0===t?void 0:t.backgroundColor)||e.WHITE);if(this.g.addHitRegion(this.displayRegion).addRect(0,0,this.ctx.canvas.width,this.ctx.canvas.height),this.showGrid&&this.instance){const t=document.createElement("canvas"),e=t.getContext("2d");t.width=25,t.height=25,e.fillStyle=this.instance.foregroundColor.toString(),e.fillRect(0,0,2,1),this.ctx.fillStyle=this.ctx.createPattern(t,"repeat"),this.ctx.fillRect(25,25,this.ctx.canvas.width-50,this.ctx.canvas.height-50)}if(this.showRuler){this.ctx.lineWidth=1,this.ctx.strokeStyle="grey",this.ctx.textBaseline="bottom",this.ctx.textAlign="center",this.ctx.fillStyle="grey",this.ctx.font="12px Arial";let t=0;for(;t<=this.ctx.canvas.width;)t+=100,this.ctx.beginPath(),this.ctx.moveTo(t-75+.5,this.ctx.canvas.height),this.ctx.lineTo(t-75+.5,this.ctx.canvas.height-4),this.ctx.moveTo(t-50+.5,this.ctx.canvas.height),this.ctx.lineTo(t-50+.5,this.ctx.canvas.height-6),this.ctx.moveTo(t-25+.5,this.ctx.canvas.height),this.ctx.lineTo(t-25+.5,this.ctx.canvas.height-4),this.ctx.moveTo(t+.5,this.ctx.canvas.height),this.ctx.lineTo(t+.5,this.ctx.canvas.height-8),this.ctx.stroke(),this.ctx.fillText(String(t),t,this.ctx.canvas.height-8);this.ctx.textAlign="right",this.ctx.textBaseline="middle";let e=0;for(;e<=this.ctx.canvas.height;)e+=100,this.ctx.beginPath(),this.ctx.moveTo(this.ctx.canvas.width,e-75+.5),this.ctx.lineTo(this.ctx.canvas.width-4,e-75+.5),this.ctx.moveTo(this.ctx.canvas.width,e-50+.5),this.ctx.lineTo(this.ctx.canvas.width-6,e-50+.5),this.ctx.moveTo(this.ctx.canvas.width,e-25+.5),this.ctx.lineTo(this.ctx.canvas.width-4,e-25+.5),this.ctx.moveTo(this.ctx.canvas.width,e+.5),this.ctx.lineTo(this.ctx.canvas.width-8,e+.5),this.ctx.stroke(),this.ctx.fillText(String(e),this.ctx.canvas.width-8,e)}this.showOutline&&this.instance&&(this.ctx.lineWidth=1,this.ctx.setLineDash([10,5]),this.ctx.strokeStyle="black",this.ctx.strokeRect(-.5,-.5,this.instance.holderWidth+1,this.instance.holderHeight+1),this.ctx.setLineDash([])),this.instance&&this.instance.draw(this.g);for(const t of this.selection){const e=this.findWidget(t);e&&e.drawSelection(this.ctx)}}requestRepaint(){this.repaintRequested=!0}setTooltip(t){var e;this.rootPanel.title=null!==(e=null==t?void 0:t.trim())&&void 0!==e?e:""}closeMenu(){var t;null===(t=this.instance)||void 0===t||t.closeMenu()}createWidget(t,e){switch(t){case"Action Button":return new ye(this,e);case"Arc":return new ds(this,e);case"Boolean Button":return new Be(this,e);case"Boolean Switch":return new qe(this,e);case"Byte Monitor":return new _r(this,e);case"Check Box":return new ti(this,e);case"Choice Button":return new ni(this,e);case"Combo":case"Combo Box":return new gi(this,e);case"Ellipse":return new vs(this,e);case"Gauge":return new Yr(this,e);case"Grouping Container":return new pl(this,e);case"Image":return new Vs(this,e);case"Image Boolean Button":return new Li(this,e);case"Image Boolean Indicator":return new io(this,e);case"Intensity Graph":return new Oo(this,e);case"Label":return new Ps(this,e);case"LED":return new Jo(this,e);case"Linking Container":return new Tl(this,e);case"Meter":return new Th(this,e);case"Button":return new Ci(this,e);case"Polygon":return new Os(this,e);case"Polyline":return new Us(this,e);case"Progress Bar":return new rn(this,e);case"Radio Box":return new Oi(this,e);case"Rectangle":return new ir(this,e);case"Rounded Rectangle":return new ur(this,e);case"Scrollbar":return new Ki(this,e);case"Tabbed Container":return new Cl(this,e);case"Tank":return new En(this,e);case"Text Input":return new ss(this,e);case"Text Update":return new Nn(this,e);case"Thermometer":return new ya(this,e);case"Web Browser":return new Pl(this,e);case"XY Graph":return new ja(this,e);default:console.warn(`Unsupported widget type: ${t}`)}}destroy(){var t;null===(t=this.instance)||void 0===t||t.destroy(),this.instance=void 0,this.pvEngine.clearState(),this.requestRepaint()}setSource(t){return this.reset(),new Promise(((e,i)=>{fetch(this.baseUrl+t,{credentials:"same-origin"}).then((t=>{t.ok&&t.text().then((t=>{this.setSourceString(t),e()})).catch((t=>i(t)))})).catch((t=>i(t)))}))}setSourceString(t){this.reset(),this.instance=new cl(this);const e=fl.parseFromXML(t);this.instance.parseNode(e),this.requestRepaint()}reset(){this.instance&&(this.clearSelection(),this.pvEngine.clearState(),this.instance.destroy(),this.instance=void 0)}measureAbsoluteArea(t){const e=t.bounds;let i=t.parent;for(;i;){if(e.x+=i.holderX,e.y+=i.holderY,i instanceof Cl){const{x:t,y:s}=i.measureTabOffset(this.g);e.x+=t,e.y+=s}i=i.parent}return e.x+=t.x-t.holderX,e.y+=t.y-t.holderY,e.width+=t.width-t.holderWidth,e.height+=t.height-t.holderHeight,e.x+=1*this.scale,e.y+=1*this.scale,e}addEventListener(t,e){if(!(t in this.eventListeners))throw new Error(`Unknown event '${t}'`);this.eventListeners[t].push(e)}removeEventListener(t,e){if(!(t in this.eventListeners))throw new Error(`Unknown event '${t}'`);this.eventListeners[t]=this.eventListeners[t].filter((t=>t!==e))}fireEvent(t,e){this.eventListeners[t].forEach((t=>t(e)))}get showGrid(){return this._showGrid}set showGrid(t){this._showGrid=t,this.requestRepaint()}get showOutline(){return this._showOutline}set showOutline(t){this._showOutline=t,this.requestRepaint()}get showRuler(){return this._showRuler}set showRuler(t){this._showRuler=t,this.requestRepaint()}get selection(){return this._selection}set selection(t){this._selection=t,this.requestRepaint();const e={selected:this._selection.slice()};this.fireEvent("selection",e)}get editMode(){return this._editMode}set editMode(t){this._editMode=t,this.requestRepaint()}get scale(){return this._scale}set scale(t){this._scale=t,this.requestRepaint();const e={scale:t};this.fireEvent("scale",e)}get transparent(){return this._transparent}set transparent(t){this._transparent=t,this.requestRepaint()}get widgets(){return this.instance?this.instance.widgets:[]}clearSelection(){this.selection.length&&(this.selection=[])}findWidget(t){if(this.instance)return this.instance.findWidget(t)}findWidgetByName(t){if(this.instance)return this.instance.findWidgetByName(t)}getPVNames(){return this.pvEngine.getPVNames()}getPV(t){return this.pvEngine.getPV(t)}setValues(t){this.pvEngine.setValues(t)}copyCanvas(t){t||(t={x:0,y:0,width:this.g.canvas.width,height:this.g.canvas.height});const e=document.createElement("canvas");return e.width=t.width,e.height=t.height,e.getContext("2d").drawImage(this.g.canvas,t.x,t.y,t.width,t.height,0,0,t.width,t.height),e}toDataURL(t="image/png",e){return this.g.ctx.canvas.toDataURL(t,e)}},t.FormulaCompiler=C,t.PV=ft,Object.defineProperty(t,"__esModule",{value:!0})}));
1
+ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).opi={})}(this,(function(t){"use strict";class e{writeInfo(t){console.log(t)}writeError(t){console.error(t)}writeWarning(t){console.warn(t)}}class i{constructor(t,e,i,s=255){this.red=t,this.green=e,this.blue=i,this.alpha=s}withAlpha(t){return new i(this.red,this.green,this.blue,t)}mixWith(t,e){const s=Math.floor(this.red*e+t.red*(1-e)),r=Math.floor(this.green*e+t.green*(1-e)),o=Math.floor(this.blue*e+t.blue*(1-e));return new i(s,r,o)}brighter(){let{red:t,green:e,blue:s}=this;const r=Math.floor(1/(1-.7));return 0===t&&0===e&&0===s?new i(r,r,r):(t>0&&t<r&&(t=r),e>0&&e<r&&(e=r),s>0&&s<r&&(s=r),new i(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 i(Math.max(Math.floor(.7*this.red),0),Math.max(Math.floor(.7*this.green),0),Math.max(Math.floor(.7*this.blue),0))}contrast(){return new i(this.red,255-this.green,255-this.blue)}hex(){let t=this.red.toString(16);t=1==t.length?"0"+t:t;let e=this.green.toString(16);e=1==e.length?"0"+e:e;let i=this.blue.toString(16);i=1==i.length?"0"+i:i;let s=this.alpha.toString(16);return s=1==s.length?"0"+s:s,`#${t}${e}${i}${s}`}getRGBValue(){return this}equals(t){return t&&this.toString()===t.toString()}toString(){return`rgba(${this.red},${this.green},${this.blue},${this.alpha})`}}i.TRANSPARENT=new i(0,0,0,0),i.BLACK=new i(0,0,0),i.BLUE=new i(0,0,255),i.CYAN=new i(0,255,255),i.DARK_GRAY=new i(150,150,150),i.GRAY=new i(200,200,200),i.GREEN=new i(0,255,0),i.LIGHT_BLUE=new i(153,186,243),i.ORANGE=new i(255,128,0),i.PINK=new i(255,0,255),i.PURPLE=new i(128,0,255),i.RED=new i(255,0,0),i.WHITE=new i(255,255,255),i.YELLOW=new i(255,255,0),i.BUTTON=new i(239,240,241),i.BUTTON_DARKER=new i(164,168,172),i.BUTTON_DARKEST=i.BLACK,i.BUTTON_LIGHTEST=i.WHITE;const s=t=>(document.removeEventListener("click",s,!0),t.preventDefault(),t.stopPropagation(),!1);function r(t){return 1==(1&t.buttons)||void 0===t.buttons&&1==t.which}function o(t,e){return t&&e&&t.id===e.id}class n{constructor(t,e,i){this.display=t,this.canvas=e,this.hitCanvas=i,this.grabbing=!1,this.documentMouseMoveListener=t=>this.onDocumentMouseMove(t),this.documentMouseUpListener=t=>this.onDocumentMouseUp(t),e.addEventListener("click",(t=>this.onCanvasClick(t)),!1),e.addEventListener("mousedown",(t=>this.onCanvasMouseDown(t)),!1),e.addEventListener("mouseup",(t=>this.onCanvasMouseUp(t)),!1),e.addEventListener("mouseout",(t=>this.onCanvasMouseOut(t)),!1),e.addEventListener("mousemove",(t=>this.onCanvasMouseMove(t)),!1)}toPoint(t){const e=this.canvas.getBoundingClientRect();return{x:t.clientX-e.left,y:t.clientY-e.top}}onCanvasClick(t){this.display.clearSelection();const e=this.toPoint(t);if(this.display.editMode)this.selectSingleWidget(e.x,e.y);else{const 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",s,!0),r(t))){const e=this.toPoint(t),i=this.hitCanvas.getActiveRegion(e.x,e.y);return i&&i.mouseDown&&i.mouseDown({clientX:t.clientX,clientY:t.clientY,point:e}),i&&i.grab&&(this.grabPoint=Object.assign({},e),this.grabTarget=i),t.preventDefault(),t.stopPropagation(),!1}}onCanvasMouseUp(t){if(this.display.editMode)return;const 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){const e=this.toPoint(t),i=this.hitCanvas.getActiveRegion(e.x,e.y);this.prevEnteredRegion&&this.prevEnteredRegion.mouseOut&&(o(this.prevEnteredRegion,i)||this.prevEnteredRegion.mouseOut()),i&&i.mouseEnter&&(o(this.prevEnteredRegion,i)||i.mouseEnter()),this.prevEnteredRegion=i;const s=i&&i.cursor?i.cursor:"auto";if(s!=this.canvas.style.cursor&&(this.canvas.style.cursor=s),!this.grabbing&&i&&i.tooltip?this.display.setTooltip(i.tooltip()):this.display.setTooltip(void 0),this.grabPoint&&!this.grabbing&&r(t)){const t=(n=this.grabPoint.x,h=this.grabPoint.y,a=e.x,l=e.y,Math.sqrt((a-n)*(a-n)+(l-h)*(l-h)));Math.abs(t)>5&&(this.initiateGrab(),this.grabPoint&&(this.grabPoint=e))}var n,h,a,l;this.grabbing&&this.grabTarget&&r(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",s,!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);const t=this.grabTarget;this.grabbing=!1,this.grabPoint=void 0,this.grabTarget=void 0,(null==t?void 0:t.grabEnd)&&t.grabEnd()}}onDocumentMouseMove(t){this.onCanvasMouseMove(t)}selectSingleWidget(t,e){const i=this.display.instance;if(i)for(const s of i.widgets.slice().reverse()){const i=s.holderX,r=s.holderY,o=s.holderX+s.holderWidth,n=s.holderY+s.holderHeight;if(i<t&&t<o&&r<e&&e<n)return this.display.selection=[s.wuid],!1}}}const h="rgb(255,255,255)";class a{constructor(t,e,i){this.parent=t,this.regions={};const s=document.createElement("canvas");s.width=null!=e?e:s.width,s.height=null!=i?i:s.height,this.ctx=s.getContext("2d"),this.root=(null==t?void 0:t.root)||t}clear(){this.regions={},this.ctx.fillStyle=h,this.ctx.fillRect(0,0,this.ctx.canvas.width,this.ctx.canvas.height)}beginHitRegion(t){const e=(this.root||this).generateUniqueColor();return(this.root||this).regions[e]=t,this.ctx.beginPath(),this.ctx.fillStyle=e,e}getActiveRegion(t,e){const i=this.ctx.getImageData(t,e,1,1).data,s=`rgb(${i[0]},${i[1]},${i[2]})`;return this.regions[s]||void 0}createChild(t,e){return new a(this,t,e)}transferToParent(t,e,i,s){if(!this.parent)throw new Error("No parent to transfer to");this.parent.ctx.drawImage(this.ctx.canvas,t,e,i,s)}generateUniqueColor(){for(;;){const t=`rgb(${Math.round(255*Math.random())},${Math.round(255*Math.random())},${Math.round(255*Math.random())})`;if(!this.regions[t]&&t!=h)return t}}}function l(t,e,i,s,r){return c({x:t,y:e,width:i,height:s},r/2)}function d(t,e,i,s,r){const o=Math.sin(r),n=Math.cos(r),h=t-i,a=e-s;return{x:h*n-a*o+i,y:h*o+a*n+s}}function c(t,e,i){return void 0===i&&(i=e),{x:t.x+i,y:t.y+e,width:t.width-(i+i),height:t.height-(e+e)}}function p(t){return{x:Math.round(t.x)+.5,y:Math.round(t.y)+.5,width:Math.round(t.width),height:Math.round(t.height)}}function u(t,e,i){return{x:t.x+e,y:t.y+i}}function g(t,e,i){return t.map((t=>u(t,e,i)))}function m(t){return t*Math.PI/180}function f(t,e,i){const s=Math.floor(t*Math.cos(e)),r=Math.floor(-t*Math.sin(e));return{x:i.x+i.width/2+s,y:i.y+i.height/2+r}}function x(t,e){const i=e.x-t.x,s=e.y-t.y,r=Math.sqrt(Math.pow(i,2)+Math.pow(s,2));let o=Math.acos(i/r);return s>0&&(o=2*Math.PI-o),new w(Math.floor(r),o)}class w{constructor(t,e){this.r=t,this.theta=e}toPoint(){return{x:Math.floor(this.r*Math.cos(this.theta)),y:Math.floor(-this.r*Math.sin(this.theta))}}}function y(t,e){return t.map((t=>({x:t.x*e,y:t.y*e})))}function v(t,e,i,s,r,o,n){t.beginPath(),o||n?(s<2*o&&(o=s/2),r<2*n&&(n=r/2),t.moveTo(e+o,i),t.lineTo(e+s-o,i),t.quadraticCurveTo(e+s,i,e+s,i+n),t.lineTo(e+s,i+r-n),t.quadraticCurveTo(e+s,i+r,e+s-o,i+r),t.lineTo(e+o,i+r),t.quadraticCurveTo(e,i+r,e,i+r-n),t.lineTo(e,i+n),t.quadraticCurveTo(e,i,e+o,i)):t.rect(e,i,s,r)}class b{constructor(t,e){this.canvas=t,this.ctx=t.getContext("2d"),this.hitCanvas=e||new a,this.hitCtx=this.hitCanvas.ctx}createChild(t,e){const i=this.hitCanvas.createChild(t,e),s=document.createElement("canvas");return s.width=t,s.height=e,new b(s,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,s,r){const{width:o,height:n}=t.canvas,h=o/n;let a=s,l=a/h;l>r&&(l=r,a=l*h),this.copyScaled(t,e,i,a,l)}copyScaled(t,e,i,s,r){this.ctx.drawImage(t.canvas,e,i,s,r),t.hitCanvas.transferToParent(e,i,s,r)}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){this.ctx.fillStyle="color"in t?t.color.toString():t.gradient,void 0!==t.opacity&&(this.ctx.globalAlpha=t.opacity),t.rx||t.ry?(v(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),void 0!==t.opacity&&(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();const e=t.startAngle||0,i=void 0===t.endAngle?2*Math.PI:t.endAngle;this.ctx.ellipse(t.cx,t.cy,t.rx,t.ry,0,e,i,t.anticlockwise),this.ctx.fillStyle="color"in t?t.color.toString():t.gradient,void 0!==t.opacity&&(this.ctx.globalAlpha=t.opacity),this.ctx.fill(),void 0!==t.opacity&&(this.ctx.globalAlpha=1)}strokeEllipse(t){t.dash&&this.ctx.setLineDash(t.dash),this.ctx.lineWidth=t.lineWidth||1,this.ctx.beginPath();const e=t.startAngle||0,i=void 0===t.endAngle?2*Math.PI:t.endAngle;this.ctx.ellipse(t.cx,t.cy,t.rx,t.ry,0,e,i,t.anticlockwise),this.ctx.strokeStyle="color"in t?t.color.toString():t.gradient,this.ctx.stroke(),t.dash&&this.ctx.setLineDash([])}measureText(t,e){this.ctx.font=e.getFontString();return{width:this.ctx.measureText(t).width,height:e.height}}createLinearGradient(t,e,i,s){return this.ctx.createLinearGradient(t,e,i,s)}strokeRect(t){t.dash&&this.ctx.setLineDash(t.dash);const e=t.lineWidth||1;if(this.ctx.lineWidth=e,this.ctx.strokeStyle=t.color.toString(),t.crispen&&e){const i=c(t,e/2,e/2);t.rx||t.ry?(v(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?(v(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(const 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(),void 0!==t.opacity&&(this.ctx.globalAlpha=t.opacity),this.ctx.stroke(),void 0!==t.opacity&&(this.ctx.globalAlpha=1),t.dash&&this.ctx.setLineDash([])}fillPath(t){this.ctx.beginPath();for(const e of t.path.segments)e.line?this.ctx.lineTo(e.x,e.y):this.ctx.moveTo(e.x,e.y);this.ctx.fillStyle="color"in t?t.color.toString():t.gradient,void 0!==t.opacity&&(this.ctx.globalAlpha=t.opacity),this.ctx.fill("evenodd"),void 0!==t.opacity&&(this.ctx.globalAlpha=1)}addHitRegion(t){return this.hitCanvas.beginHitRegion(t),new S(this.hitCanvas.ctx)}}class T{constructor(t,e){this.segments=[],this.segments.push({x:t,y:e,line:!1})}static fromPoints(t){const e=new T(t[0].x,t[0].y);for(let i=1;i<t.length;i++)e.lineTo(t[i].x,t[i].y);return e}getBoundingBox(){const 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++){const s=this.segments[i];s.x<t.x&&(t.x=s.x),s.x>e.x&&(e.x=s.x),s.y<t.y&&(t.y=s.y),s.y>e.y&&(e.y=s.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(){const t=this.segments[0];return this.segments.push({x:t.x,y:t.y,line:!0}),this}translate(t,e){for(const i of this.segments)i.x+=t,i.y+=e;return this}}class S{constructor(t){this.ctx=t}addRect(t,e,i,s){return this.ctx.fillRect(t,e,i,s),this}addEllipse(t,e,i,s,r,o,n,h){this.ctx.beginPath(),this.ctx.ellipse(t,e,i,s,r,o,n,h),this.ctx.fill()}addPath(t){this.ctx.beginPath();for(const e of t.segments)e.line?this.ctx.lineTo(e.x,e.y):this.ctx.moveTo(e.x,e.y);this.ctx.fill()}}class V{constructor(t,e=[]){this.widget=t,this.properties=new Map,this.generators=[];for(const t of e)this.properties.set(t.name,t)}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 B)e.value=t.getActions(e.name);else if(e instanceof $)e.value=t.getAutoScaleWidgets(e.name);else if(e instanceof k)e.value=t.getBoolean(e.name);else if(e instanceof E)e.value=t.getColorMap(e.name);else if(e instanceof M)e.value=t.getColor(e.name);else if(e instanceof P)e.value=t.getFloat(e.name);else if(e instanceof R)e.value=t.getFont(e.name);else if(e instanceof L)e.value=t.getInt(e.name);else if(e instanceof I)e.value=t.getMacros(e.name);else if(e instanceof W)e.value=t.getPoints(e.name);else if(e instanceof _);else if(e instanceof F)e.value=t.getRules(e.name);else if(e instanceof D)e.value=t.getScaleOptions(e.name);else if(e instanceof O)e.value=t.getScripts(e.name);else if(e instanceof C)e.rawValue=t.getString(e.name);else if(e instanceof H)e.value=t.getStringList(e.name);else{if(!(e instanceof N))throw new Error(`Property ${e.name} has an unexpected type`);e.value=t.getStringTable(e.name)}}loadXMLValues(t){this.properties.forEach((e=>{this.loadProperty(t,e)})),this.resolveStringProperties();for(const e of this.generators)for(const 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((t=>{if(t instanceof C){const e=t;void 0!==e.rawValue?t.value=this.widget.expandMacro(e.rawValue):t.value=e.rawValue}}))}getProperty(t){return this.properties.get(t)}getValue(t,e=!1){const i=this.properties.get(t);if(i&&void 0!==i.value)return i.value;if(!e)throw new Error(`Missing property ${t}`)}setValue(t,e){const i=this.properties.get(t);if(!i)throw new Error(`Cannot set value of unknown property ${t}`);i.value=e}}class A{constructor(t,e){this.name=t,this.defaultValue=e,this.value=e}get value(){return this._value}set value(t){if(this.value!==t){const e=this._value;if(this._value=t,this.listeners)for(const i of this.listeners)i(t,e)}}addListener(t){this.listeners=this.listeners||[],this.listeners.push(t)}removeListener(t){const e=this.listeners||[],i=e.indexOf(t);-1!==i&&e.splice(i,1)}printScriptValue(t){return String(t)}}class C extends A{printScriptValue(t){return`"${t.replace('"','\\"')}"`}}class _ extends A{constructor(t,e){super(t),this.pvPropertyName=e}}class L extends A{}class P extends A{}class k extends A{}class M extends A{printScriptValue(t){const{red:e,green:i,blue:s}=Object.assign({},t);return`ColorFontUtil.getColorFromRGB(${e}, ${i}, ${s})`}}class R extends A{printScriptValue(t){const{name:e,height:i,style:s}=Object.assign({},t);return`ColorFontUtil.getFont("${e}", ${i}, ${s})`}}class E extends A{printScriptValue(t){return`${t.code}`}}class W extends A{}class B extends A{}class I extends A{}class O extends A{}class H extends A{}class N extends A{}class F extends A{}class D extends A{}class $ extends A{}class j{constructor(){this.actions=[],this.hookFirstActionToClick=!1,this.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]}getClickActions(){const t=[];if(this.hookFirstActionToClick)t.push(0);else if(this.hookAllActionsToClick)for(let e=0;e<this.actions.length;e++)t.push(e);return t}toString(){return 1===this.actions.length?String(this.actions[0])||this.actions[0].type:`${this.actions.length} actions`}}class G{constructor(t){this.path=t,this.type="OPEN_DISPLAY"}toString(){return`Open ${this.path}`}}class z{constructor(){this.type="OPEN_FILE"}toString(){return`Open ${this.path}`}}class U{constructor(t){this.embedded=t,this.type="EXECUTE_JAVASCRIPT"}toString(){return"Execute JavaScript"}}class q{constructor(){this.type="EXECUTE_CMD"}toString(){return`Execute Command ${this.command}`}}class Y{constructor(t,e){this.pvName=t,this.value=e,this.type="WRITE_PV"}toString(){return`Write ${this.value} to ${this.pvName}`}}class X{constructor(){this.type="PLAY_SOUND"}toString(){return`Play WAV File ${this.path}`}}class K{constructor(){this.type="OPEN_WEBPAGE"}toString(){return`Open Webpage ${this.hyperlink}`}}class Z{constructor(t,e,i){this.code=t,this.interpolate=e,this.autoscale=i,this.values=[],this.colors=[],this.entries=[],this.dirty=!0,0===t||(1===t?(this.values=[0,1],this.colors=[[0,0,0],[255,255,255]]):2===t?(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]]):3===t?(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]]):4===t?(this.values=[0,.365,.746,1],this.colors=[[11,0,0],[255,0,0],[255,255,0],[255,255,255]]):5===t?(this.values=[0,1],this.colors=[[0,255,255],[255,0,255]]):6===t&&(this.values=[0,.5,1],this.colors=[[0,0,0],[255,0,0],[255,255,255]]))}addMapping(t,e,i,s){this.values.push(t),this.colors.push([e,i,s]),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,0===e)return this.entries[e][1];if(e===this.entries.length)return this.entries[e-1][1];if(this.interpolate){const[i,s]=this.entries[e-1],[r,o]=this.entries[e],n=(t-i)/(r-i);return[Math.floor((o[0]-s[0])*n+s[0]),Math.floor((o[1]-s[1])*n+s[1]),Math.floor((o[2]-s[2])*n+s[2])]}return this.entries[e-1][1]}getMinMax(){return[Math.min.apply(Math,this.values),Math.max.apply(Math,this.values)]}binarySearch(t){let e=0,i=this.entries.length-1;for(;e<=i;){const s=i+e>>1;if(t>this.entries[s][0])e=s+1;else{if(!(t<this.entries[s][0]))return s;i=s-1}}return-e-1}}var J={exports:{}};!function(t){!function(){function e(t,e){document.addEventListener?t.addEventListener("scroll",e,!1):t.attachEvent("scroll",e)}function i(t){this.a=document.createElement("div"),this.a.setAttribute("aria-hidden","true"),this.a.appendChild(document.createTextNode(t)),this.b=document.createElement("span"),this.c=document.createElement("span"),this.h=document.createElement("span"),this.f=document.createElement("span"),this.g=-1,this.b.style.cssText="max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;",this.c.style.cssText="max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;",this.f.style.cssText="max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;",this.h.style.cssText="display:inline-block;width:200%;height:200%;font-size:16px;max-width:none;",this.b.appendChild(this.h),this.c.appendChild(this.f),this.a.appendChild(this.b),this.a.appendChild(this.c)}function s(t,e){t.a.style.cssText="max-width:none;min-width:20px;min-height:20px;display:inline-block;overflow:hidden;position:absolute;width:auto;margin:0;padding:0;top:-999px;white-space:nowrap;font-synthesis:none;font:"+e+";"}function r(t){var e=t.a.offsetWidth,i=e+100;return t.f.style.width=i+"px",t.c.scrollLeft=i,t.b.scrollLeft=t.b.scrollWidth+100,t.g!==e&&(t.g=e,!0)}function o(t,i){function s(){var t=o;r(t)&&t.a.parentNode&&i(t.g)}var o=t;e(t.b,s),e(t.c,s),r(t)}function n(t,e){var i=e||{};this.family=t,this.style=i.style||"normal",this.weight=i.weight||"normal",this.stretch=i.stretch||"normal"}var h=null,a=null,l=null,d=null;function c(){return null===d&&(d=!!document.fonts),d}function p(){if(null===l){var t=document.createElement("div");try{t.style.font="condensed 100px sans-serif"}catch(t){}l=""!==t.style.font}return l}function u(t,e){return[t.style,t.weight,p()?t.stretch:"","100px",e].join(" ")}n.prototype.load=function(t,e){var r=this,n=t||"BESbswy",l=0,d=e||3e3,p=(new Date).getTime();return new Promise((function(t,e){if(c()&&!function(){if(null===a)if(c()&&/Apple/.test(window.navigator.vendor)){var t=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))(?:\.([0-9]+))/.exec(window.navigator.userAgent);a=!!t&&603>parseInt(t[1],10)}else a=!1;return a}()){var g=new Promise((function(t,e){!function i(){(new Date).getTime()-p>=d?e(Error(d+"ms timeout exceeded")):document.fonts.load(u(r,'"'+r.family+'"'),n).then((function(e){1<=e.length?t():setTimeout(i,25)}),e)}()})),m=new Promise((function(t,e){l=setTimeout((function(){e(Error(d+"ms timeout exceeded"))}),d)}));Promise.race([m,g]).then((function(){clearTimeout(l),t(r)}),e)}else!function(t){document.body?t():document.addEventListener?document.addEventListener("DOMContentLoaded",(function e(){document.removeEventListener("DOMContentLoaded",e),t()})):document.attachEvent("onreadystatechange",(function e(){"interactive"!=document.readyState&&"complete"!=document.readyState||(document.detachEvent("onreadystatechange",e),t())}))}((function(){function a(){var e;(e=-1!=f&&-1!=x||-1!=f&&-1!=w||-1!=x&&-1!=w)&&((e=f!=x&&f!=w&&x!=w)||(null===h&&(e=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))/.exec(window.navigator.userAgent),h=!!e&&(536>parseInt(e[1],10)||536===parseInt(e[1],10)&&11>=parseInt(e[2],10))),e=h&&(f==y&&x==y&&w==y||f==v&&x==v&&w==v||f==b&&x==b&&w==b)),e=!e),e&&(T.parentNode&&T.parentNode.removeChild(T),clearTimeout(l),t(r))}var c=new i(n),g=new i(n),m=new i(n),f=-1,x=-1,w=-1,y=-1,v=-1,b=-1,T=document.createElement("div");T.dir="ltr",s(c,u(r,"sans-serif")),s(g,u(r,"serif")),s(m,u(r,"monospace")),T.appendChild(c.a),T.appendChild(g.a),T.appendChild(m.a),document.body.appendChild(T),y=c.a.offsetWidth,v=g.a.offsetWidth,b=m.a.offsetWidth,function t(){if((new Date).getTime()-p>=d)T.parentNode&&T.parentNode.removeChild(T),e(Error(d+"ms timeout exceeded"));else{var i=document.hidden;!0!==i&&void 0!==i||(f=c.a.offsetWidth,x=g.a.offsetWidth,w=m.a.offsetWidth,a()),l=setTimeout(t,50)}}(),o(c,(function(t){f=t,a()})),s(c,u(r,'"'+r.family+'",sans-serif')),o(g,(function(t){x=t,a()})),s(g,u(r,'"'+r.family+'",serif')),o(m,(function(t){w=t,a()})),s(m,u(r,'"'+r.family+'",monospace'))}))}))},t.exports=n}()}(J);var Q=J.exports;const tt=["Arial","Arial Black","Courier New","Helvetica","Tahoma","Verdana"];class et{constructor(t,e,i,s){this.name=t,this.style=i,this.height=s?e:Math.round(16*e/15)}scale(t){return new et(this.name,t*this.height,this.style,!0)}getFontString(){return 1===this.style?`bold ${this.height}px ${this.name}`:2===this.style?`italic ${this.height}px ${this.name}`:3===this.style?`italic bold ${this.height}px ${this.name}`:(0!==this.style&&console.warn(`Unsupported font style ${this.style}`),`normal ${this.height}px ${this.name}`)}preload(){if(-1!==tt.indexOf(this.name))return Promise.resolve();let t={weight:"normal",style:"normal"};return 1===this.style?t.weight="bold":2===this.style?t.style="italic":3===this.style&&(t.weight="bold",t.style="italic"),new Q(this.name,t).load()}}et.ARIAL_9=new et("Arial",9,0,!1),et.ARIAL_10=new et("Arial",10,0,!1),et.ARIAL_11=new et("Arial",11,0,!1),et.ARIAL_12_BOLD=new et("Arial",12,1,!1);class it{constructor(){this.includeParentMacros=!0,this.macros={}}clear(){this.macros={}}set(t,e){this.macros[t]=e}get(t){if(t in this.macros)return this.macros[t]}}class st{constructor(){this.rules=[]}}class rt{constructor(t,e,i){this.autoScaleWidgets=t,this.minWidth=e,this.minHeight=i}}class ot{constructor(t,e,i){this.widthScalable=t,this.heightScalable=e,this.keepWidthHeightRatio=i}}class nt{constructor(){this.scripts=[]}}class ht{constructor(t){this.node=t}get name(){return this.node.nodeName}static parseFromXML(t){const e=(new DOMParser).parseFromString(t,"text/xml");return new ht(e.documentElement)}getNode(t){const e=this.findChild(t);return new ht(e)}getNodes(t){const e=[];for(let i=0;i<this.node.childNodes.length;i++){const s=this.node.childNodes[i];3!==s.nodeType&&(t&&s.nodeName!==t||e.push(new ht(s)))}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 e=0;e<this.node.childNodes.length;e++){const i=this.node.childNodes[e];if(i.nodeName===t&&null!==i.textContent)return i.textContent}if(void 0!==e)return e;throw new Error(`No child node named ${t} could be found`)}getStringAttribute(t){const e=this.node.attributes.getNamedItem(t);if(null===e)throw new Error(`No attribute named ${t}`);return e.textContent||""}getFloat(t,e){for(let e=0;e<this.node.childNodes.length;e++){const i=this.node.childNodes[e];if(i.nodeName===t&&null!==i.textContent)return parseFloat(i.textContent)}if(void 0!==e)return e;throw new Error(`No child node named ${t} could be found`)}getInt(t,e){for(let e=0;e<this.node.childNodes.length;e++){const i=this.node.childNodes[e];if(i.nodeName===t&&null!==i.textContent)return parseInt(i.textContent,10)}if(void 0!==e)return e;throw new Error(`No child node named ${t} could be found`)}getIntAttribute(t){const e=this.node.attributes.getNamedItem(t);if(null===e)throw new Error(`No attribute named ${t}`);return parseInt(e.textContent||"",10)}getBoolean(t,e){for(let e=0;e<this.node.childNodes.length;e++){const i=this.node.childNodes[e];if(i.nodeName===t)return"true"===i.textContent}if(void 0!==e)return e;throw new Error(`No child node named ${t} could be found`)}getBooleanAttribute(t,e){const i=this.node.attributes.getNamedItem(t);if(null===i){if(void 0!==e)return e;throw new Error(`No attribute named ${t}`)}return"true"===i.textContent}getColor(t,e){const i=this.findChild(t);for(let t=0;t<i.childNodes.length;t++){const e=i.childNodes[t];if("color"===e.nodeName)return this.parseColorNode(new ht(e))}if(void 0!==e)return e;throw new Error("No child node named 'color' could be found")}getFont(t){const e=this.getNode(t);if(e.hasNode("opifont.name")){const t=e.getNode("opifont.name"),i=t.getStringAttribute("fontName"),s=t.getIntAttribute("height"),r=t.getIntAttribute("style");let o=!1;return t.hasAttribute("pixels")&&(o=t.getBooleanAttribute("pixels")),new et(i,s,r,o)}{const t=e.getNode("fontdata"),i=t.getStringAttribute("fontName"),s=t.getIntAttribute("height"),r=t.getIntAttribute("style");return new et(i,s,r,!1)}}getPoints(t){const e=this.getNode(t),i=[];for(const t of e.getNodes("point"))i.push({x:t.getIntAttribute("x"),y:t.getIntAttribute("y")});return i}getStringList(t){const e=this.getNode(t),i=[];for(const t of e.getNodes("s"))i.push(t.getTextContent());return i}getStringTable(t){const e=this.getNode(t),i=[];for(const t of e.getNodes("row")){const e=[];for(const i of t.getNodes("col"))e.push(i.getTextContent());i.push(e)}return i}getScripts(t){const e=this.getNode(t),i=new nt;for(const t of e.getNodes("path")){const e=[];for(const i of t.getNodes("pv"))e.push({pvName:i.getTextContent(),trigger:i.getBooleanAttribute("trig")});const s=t.getStringAttribute("pathString");"EmbeddedJs"===s?i.scripts.push({embedded:!0,text:t.getString("scriptText"),checkConnect:t.getBooleanAttribute("checkConnect"),skipFirstExecution:t.getBooleanAttribute("sfe",!1),inputs:e}):"EmbeddedPy"===s?console.warn("Unsupported EmbeddedPy script"):i.scripts.push({embedded:!1,path:s,checkConnect:t.getBooleanAttribute("checkConnect"),skipFirstExecution:t.getBooleanAttribute("sfe",!1),inputs:e})}return i}getScaleOptions(t){const e=this.getNode(t);return new ot(e.getBoolean("width_scalable"),e.getBoolean("height_scalable"),e.getBoolean("keep_wh_ratio"))}getAutoScaleWidgets(t){const e=this.getNode(t);return new rt(e.getBoolean("auto_scale_widgets"),e.getInt("min_width"),e.getInt("min_height"))}getColorMap(t){const e=this.getNode(t);if(!e.hasNode("e"))return new Z(e.getInt("map"),e.getBoolean("interpolate"),e.getBoolean("autoscale"));{const t=new Z(0,e.getBoolean("interpolate"),e.getBoolean("autoscale"));for(const i of e.getNodes("e")){const e=Number(i.getTextContent()),s=i.getIntAttribute("red"),r=i.getIntAttribute("green"),o=i.getIntAttribute("blue");t.addMapping(e,s,r,o)}}}getRules(t){const e=this.getNode(t),i=new st;for(const t of e.getNodes("rule")){const e=[];for(const i of t.getNodes("pv"))e.push({pvName:i.getTextContent(),trigger:i.getBooleanAttribute("trig")});const s=[];for(const e of t.getNodes("exp")){e.getNode("value").hasNode("color")?s.push({type:"color",expression:e.getStringAttribute("bool_exp"),outputValue:e.getColor("value")}):s.push({type:"string",expression:e.getStringAttribute("bool_exp"),outputValue:e.getString("value")})}i.rules.push({name:t.getStringAttribute("name"),propertyName:t.getStringAttribute("prop_id"),outputExpression:t.getBooleanAttribute("out_exp"),inputs:e,expressions:s})}return i}getMacros(t){const e=this.getNode(t),i=new it;i.includeParentMacros=e.getBoolean("include_parent_macros");for(const t of e.getNodes())"include_parent_macros"!==t.name&&i.set(t.name,e.getString(t.name));return i}getActions(t){const e=this.getNode(t),i=new j;i.hookFirstActionToClick=e.getBooleanAttribute("hook"),i.hookAllActionsToClick=e.getBooleanAttribute("hook_all",!1);for(const t of e.getNodes("action")){const e=t.getStringAttribute("type");if("OPEN_DISPLAY"===e){const e=new G(t.getString("path"));t.hasNode("mode")&&(e.mode=t.getInt("mode")),e.description=t.getString("description"),i.add(e)}else if("OPEN_FILE"===e){const e=new z;e.path=t.getString("path"),e.description=t.getString("description"),i.add(e)}else if("EXECUTE_CMD"===e){const e=new q;e.command=t.getString("command"),e.commandDirectory=t.getString("command_directory"),e.waitTime=t.getInt("wait_time"),e.description=t.getString("description"),i.add(e)}else if("EXECUTE_JAVASCRIPT"===e){const e=new U(t.getBoolean("embedded"));e.embedded?e.text=t.getString("scriptText"):e.path=t.getString("path"),e.description=t.getString("description"),i.add(e)}else if("WRITE_PV"===e){const e=new Y(t.getString("pv_name"),t.getString("value"));e.confirmMessage=t.getString("confirm_message",""),e.description=t.getString("description"),i.add(e)}else if("PLAY_SOUND"===e){const e=new X;e.path=t.getString("path"),e.description=t.getString("description"),i.add(e)}else if("OPEN_WEBPAGE"===e){const e=new K;e.hyperlink=t.getString("hyperlink"),e.description=t.getString("description"),i.add(e)}else console.warn(`Unsupported action type ${e}`),i.add(null)}return i}parseColorNode(t){const e=t.getIntAttribute("red"),s=t.getIntAttribute("green"),r=t.getIntAttribute("blue");return new i(e,s,r)}findChild(t){for(let e=0;e<this.node.childNodes.length;e++){const i=this.node.childNodes[e];if(i.nodeName===t)return i}throw new Error(`No child node named ${t} could be found`)}}class at{constructor(e,i){this.name=e,this.pvEngine=i,this._writable=!1,this._severity=t.AlarmSeverity.NONE,this._precision=3,this._disconnected=!1,this.navigable=!1}get units(){return this._units}set units(t){this._units=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 alarmName(){var t,e,i,s;const r=this.toNumber();return null==r?"NONE":r<=(null!==(t=this.lowerAlarmLimit)&&void 0!==t?t:NaN)?"LOLO":r>=(null!==(e=this.upperAlarmLimit)&&void 0!==e?e:NaN)?"HIHI":r<=(null!==(i=this.lowerWarningLimit)&&void 0!==i?i:NaN)?"LOW":r>=(null!==(s=this.upperWarningLimit)&&void 0!==s?s:NaN)?"HIGH":"NONE"}toNumber(){return null===this.value?null:"number"==typeof this.value?this.value:"boolean"==typeof this.value?this.value?1:0:void 0!==typeof this.indexValue?this.indexValue:void 0}formatValue(t,e){return null===this.value?"":"string"==typeof this.value?this.value:"number"==typeof this.value?this.formatNumber(t,this.value,e):this.value instanceof Date?this.value.toISOString().replace("T"," ").replace("Z",""):String(this.value)}formatNumber(t,e,i){var s;if(null==e||null==e)return"";switch(t){case 0:case 1:return-1===i&&(i=null!==(s=this.precision)&&void 0!==s?s:-1),-1===i?String(e):e.toFixed(i);case 2:return e.toExponential().replace("e+","E").toUpperCase();case 3:return"0x"+e.toString(16).toUpperCase();default:return console.warn(`Unexpected format type ${t}`),String(e)}}setSample(t){this._time=t.time,this._value=t.value,this._indexValue=t.valueIndex,this._severity=t.severity,this.pvEngine.requestRepaint()}addListener(t){this.pvEngine.addListener(this.name,t)}removeListener(t){this.pvEngine.addListener(this.name,t)}toString(){if(void 0!==this.value)return String(this.value)}}var lt,dt;t.AlarmSeverity=void 0,(lt=t.AlarmSeverity||(t.AlarmSeverity={})).NONE="NONE",lt.MINOR="MINOR",lt.MAJOR="MAJOR",lt.INVALID="INVALID",lt.UNDEFINED="UNDEFINED";class ct{constructor(){this.BLACK=i.BLACK,this.BLUE=i.BLUE,this.CYAN=i.CYAN,this.DARK_GRAY=i.DARK_GRAY,this.GRAY=i.GRAY,this.GREEN=i.GREEN,this.LIGHT_BLUE=i.LIGHT_BLUE,this.ORANGE=i.ORANGE,this.PINK=i.PINK,this.PURPLE=i.PURPLE,this.RED=i.RED,this.WHITE=i.WHITE,this.YELLOW=i.YELLOW}getColorFromRGB(t,e,s){return new i(t,e,s)}getFont(t,e,i){return new et(t,e,i,!1)}}class pt{constructor(t){this.display=t}writeInfo(t){this.display.getConsoleHandler().writeInfo(t)}writeError(t){this.display.getConsoleHandler().writeError(t)}writeWarning(t){this.display.getConsoleHandler().writeWarning(t)}}class ut{createDoubleArray(t){return Array(t).fill(0)}createIntArray(t){return Array(t).fill(0)}toJavaDoubleArray(t){return[...t]}toJavaIntArray(t){return[...t]}}class gt{constructor(t){this._pv=t}getName(){return this._pv.name}getValue(){return this._pv.value}setValue(t){this._pv.pvEngine.setValue(new Date,this._pv.name,t)}isConnected(){return!this._pv.disconnected}isWriteAllowed(){return this._pv.writable}}class mt{constructor(t){this.widget=t}executeAction(t){this.widget.executeAction(t)}getPVByName(t){const e=this.widget.display.getPV(t);return e?new gt(e):null}getPV(t="pv_name"){const e=this.getPropertyValue(t);return e?this.getPVByName(e):null}getVar(t){var e;return null!==(e=this.widget.vars.get(t))&&void 0!==e?e:null}setVar(t,e){this.widget.vars.set(t,e)}getPropertyValue(t){const e=this.widget.properties.getProperty(t);return e?e.value:null}setPropertyValue(t,e){const i=this.widget.properties.getProperty(t);if(!i)throw new Error(`Cannot set value of unknown property ${t}`);if(i instanceof C)e=void 0!==e?String(e):e,this.widget.properties.setValue(t,e);else if(i instanceof E){let i=0;switch(e){case"GrayScale":i=1;break;case"JET":i=2;break;case"ColorSpectrum":i=3;break;case"Hot":i=4;break;case"Cool":i=5;break;case"Shaded":i=6}const s=new Z(i,!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)}setVisible(t){this.setPropertyValue("visible",t)}getValue(){var t;return null!==(t=this.widget.value)&&void 0!==t?t:null}setValue(t){this.widget.value=t}setValueInUIThread(t){this.setValue(t)}}class ft extends mt{constructor(t){super(t),this.table=t,this.spreadSheetTable=this.table.spreadsheet}getTable(){return this.spreadSheetTable}}class xt extends mt{constructor(t){super(t),this.xyGraph=t}clearGraph(){this.xyGraph.clearGraph()}getXBuffer(t){return this.xyGraph.getTrace(t).snapshot().map((t=>t.x))}getYBuffer(t){return this.xyGraph.getTrace(t).snapshot().map((t=>t.y))}}function wt(t){switch(t.widgetType){case"Table":return new ft(t);case"XY Graph":return new xt(t);default:return new mt(t)}}class yt{constructor(t){this.display=t}isActive(){return!0}getWidget(t){const e=this.display.findWidgetByName(t);if(e)return wt(e)}}class vt{constructor(t){this.display=t}readTextFile(t){const e=this.display.resolvePath(t);var i=new XMLHttpRequest;if(i.open("GET",e,!1),i.send(null),200===i.status)return i.responseText;throw Error(`Cannot open ${e}`)}}class bt{fullScreen(){document.documentElement.requestFullscreen()}openConfirmDialog(t){return confirm(t)}openInformationDialog(t){alert(t)}openWarningDialog(t){alert(t)}openErrorDialog(t){alert(t)}openPasswordDialog(t,e){let i=prompt(t);if(i)return i===e}}class Tt{constructor(t){this.table=t,this.columnCount=0,this.cells=[],this.dirty=!1}isEmpty(){return!this.cells.length}refresh(){this.dirty=!0}getCells(){return this.cells}getContent(){const t=[];for(const e of this.cells)t.push(e.map((t=>t.text||"")));return t}setContent(t){this.cells.length=0;for(let e=0;e<t.length;e++)0===e&&(this.columnCount=t[e].length),this.cells.push(t[e].map((t=>({text:t}))));this.dirty=!0}getColumnCount(){return this.columnCount}getRowCount(){return this.cells.length}getCellText(t,e){var i,s;const r=this.cells[t];return r&&null!==(s=null===(i=r[e])||void 0===i?void 0:i.text)&&void 0!==s?s:null}setColumnsCount(t){if(t<this.columnCount)for(const e of this.cells)e.length=t;if(t>this.columnCount){const e=t-this.columnCount;for(const t of this.cells)for(let i=0;i<e;i++)t.push({text:""})}this.columnCount=t,this.dirty=!0}appendRow(){const t=[];for(let e=0;e<this.columnCount;e++)t[e]={text:""};return this.cells.push(t),this.dirty=!0,this.cells.length-1}deleteRow(t){this.cells.splice(t,1),this.dirty=!0}deleteColumn(t){for(const e of this.cells)e.splice(t,1);this.columnCount--,this.dirty=!0}insertRow(t){const e=[];for(let t=0;t<this.columnCount;t++)e.push({text:""});this.cells.splice(t,0,e),this.dirty=!0}insertColumn(t){for(const e of this.cells)e.splice(t,0,{text:""});this.columnCount++,this.dirty=!0}getCell(t,e){var i,s;this.cells[t]=null!==(i=this.cells[t])&&void 0!==i?i:[];const r=null!==(s=this.cells[t][e])&&void 0!==s?s:{};return this.cells[t][e]=r,r}setCellText(t,e,i){this.getCell(t,e).text=i,this.dirty=!0}setRowBackground(t,e){const i=this.cells[t];for(const t of i)t.backgroundColor=e;this.dirty=!0}setRowForeground(t,e){const i=this.cells[t];for(const t of i)t.foregroundColor=e;this.dirty=!0}setCellBackground(t,e,i){this.getCell(t,e).backgroundColor=i,this.dirty=!0}setCellForeground(t,e,i){this.getCell(t,e).foregroundColor=i,this.dirty=!0}setColumnCellEditorData(t,e){}}!function(t){var e;(e=t.lang||(t.lang={})).Runnable=function(t){this.run=t.run},e.Thread=function(t){this.runnable=t},e.Thread.prototype.start=function(){this.runnable.run()},e.Thread.sleep=function(t){const e=Date.now();let i=0;for(;Date.now()<e+t;)i++;i||console.trace("Should not happen")}}(dt||(dt={}));class St{type(t){switch(t){case"java.lang.Runnable":return dt.lang.Runnable;case"java.lang.Thread":return dt.lang.Thread;case"org.csstudio.swt.widgets.natives.SpreadSheetTable":return Tt;default:throw new Error("Unexpected class name: "+t)}}to(t,e){return t}}class Vt{openInformation(t,e,i){alert(i)}openConfirm(t,e,i){return confirm(i)}openError(t,e,i){alert(i)}}const At=["yyyy","MM","dd","HH","mm","ss","nnnnnnnnn"];class Ct{constructor(t){this.pvEngine=t}getDouble(t){return parseFloat(t.getValue())}getLong(t){return parseInt(t.getValue(),10)}getString(t){return t._pv.formatValue(0,-1)}getStringArray(t){const e=t.getValue();return Array.isArray(e)?e.map((t=>String(t))):[String(e)]}getTimeInMilliseconds(t){var e;const i=t._pv.time;return null!==(e=null==i?void 0:i.getTime())&&void 0!==e?e:0}getTimeString(t,e="yyyy-MM-dd HH:mm:ss.nnnnnnnnn"){const i=t._pv.time;if(i){let t=e;for(const e of At)t=t.replace(e,this.formatDate(i,e));return t}return null}getSeverity(e){switch(e._pv.severity){case t.AlarmSeverity.NONE:return 0;case t.AlarmSeverity.MAJOR:return 1;case t.AlarmSeverity.MINOR:return 2;default:return-1}}getSeverityString(t){return String(t._pv.severity)}getStatus(t){return t._pv.alarmName}formatDate(t,e){if("yyyy"===e)return String(t.getUTCFullYear());if("MM"===e){const e=t.getUTCMonth()+1;return e<10?"0"+e:""+e}if("dd"===e){const e=t.getUTCDate();return e<10?"0"+e:""+e}if("HH"===e){const e=t.getUTCHours();return e<10?"0"+e:""+e}if("mm"===e){const e=t.getUTCMinutes();return e<10?"0"+e:""+e}if("ss"===e){const e=t.getUTCSeconds();return e<10?"0"+e:""+e}if("nnnnnnnnn"===e){const e=t.getUTCMilliseconds();return e<10?"00"+e:e<100?"0"+e:""+e}throw new Error(`Unexpected format '${e}'`)}}class _t{constructor(t){this.display=t}openOPI(t,e,i,s){if(0!==i)throw new Error(`Unsupported target ${i}`);{const t={path:e,replace:0===i};this.display.fireEvent("opendisplay",t)}}closeCurrentOPI(){this.display.fireEvent("closedisplay",{})}}let Lt,Pt,kt;class Mt{constructor(t,e,i=[]){this.scriptText=e,Lt||(Lt=document.createElement("iframe"),Lt.id="script-e",Lt.style.display="none",document.body.appendChild(Lt),Pt=Lt.contentWindow,kt=Pt.eval,!kt&&Pt.execScript&&(Pt.execScript.call(Pt,"null"),kt=Pt.eval)),this.scriptText=e.replace(/importClass\([^\)]*\)\s*\;?/gi,"").replace(/importPackage\([^\)]*\)\s*\;?/gi,"").trim(),this.context=Object.assign({display:new yt(t.display),pvs:i.map((t=>new gt(t))),triggerPV:null,widget:wt(t),ColorFontUtil:new ct,ConsoleUtil:new pt(t.display),DataUtil:new ut,FileUtil:new vt(t.display),GUIUtil:new bt,Java:new St,java:dt,MessageDialog:new Vt,PVUtil:new Ct(t.display.pvEngine),ScriptUtil:new _t(t.display)},t.display.pvEngine.scriptLibraries)}run(t){if(this.context.triggerPV=null,t)for(const e of this.context.pvs)e._pv===t&&(this.context.triggerPV=e);const e=[];for(const t in Lt.contentWindow)e.push(t);try{for(const t in this.context)this.context.hasOwnProperty(t)&&(Pt[t]=this.context[t]);kt.call(Pt,this.scriptText);const t={};for(const i in Pt)-1===e.indexOf(i)&&(t[i]=Pt[i]);this.context=t}finally{for(const t in Pt)-1===e.indexOf(t)&&delete Pt[t]}}}const Rt="actions",Et="background_color",Wt="backcolor_alarm_sensitive",Bt="border_alarm_sensitive",It="border_color",Ot="border_width",Ht="border_style",Nt="enabled",Ft="foreground_color",Dt="forecolor_alarm_sensitive",$t="height",jt="name",Gt="pv_name",zt="pv_value",Ut="rules",qt="scale_options",Yt="scripts",Xt="text",Kt="tooltip",Zt="transparent",Jt="visible",Qt="widget_type",te="width",ee="wuid";class ie{constructor(t,e){this.display=t,this.parent=e,this.x=0,this.y=0,this.width=0,this.height=0,this.fillRoundRectangleBackgroundBorder=!0,this.vars=new Map,this.properties=new V(this,[new B(Rt,new j),new k(Wt,!1),new M(Et,i.TRANSPARENT),new k(Bt,!1),new M(It),new L(Ht),new L(Ot),new k(Nt,!0),new k(Dt,!1),new M(Ft),new L($t),new C(jt),new C(Gt),new _(zt,Gt),new F(Ut,new st),new O(Yt),new C(Xt,""),new C(Kt,""),new k(Zt,!1),new k(Jt),new C(Qt),new L(te),new C(ee),new L("x"),new L("y"),new D(qt)])}parseNode(t){this.properties.loadXMLValues(t);for(const t of this.properties.all())if(t instanceof R){const e=t.value;e.preload().then((()=>this.requestRepaint())).catch((()=>console.warn(`Failed to load font '${e.getFontString()}'.`)))}this.pvName&&this.display.pvEngine.createPV(this.pvName);for(const t of this.scripts.scripts)t.embedded?this.display.pvEngine.createScript(this,t,t.text):fetch(this.display.resolvePath(t.path),{credentials:"same-origin"}).then((e=>{e.ok&&e.text().then((e=>{this.display.pvEngine.createScript(this,t,e)}))}));for(const t of this.rules.rules)this.properties.getProperty(t.propertyName)?this.display.pvEngine.createRule(this,t):console.warn(`Cannot create rule for unsupported property ${t.propertyName}`);this.actions.isClickable()&&(this.holderRegion={id:`${this.wuid}-holder`},this.tooltip&&(this.holderRegion.tooltip=()=>this.tooltip),this.actions.isClickable()&&(this.holderRegion.click=()=>{for(const t of this.actions.getClickActions())this.executeAction(t)},this.holderRegion.cursor="pointer")),this.init()}drawHolder(e){var i,s;const{scale:r}=this;let o=[0,0,0,0];const n=this.borderAlarmSensitive&&((null===(i=this.pv)||void 0===i?void 0:i.severity)===t.AlarmSeverity.MINOR||(null===(s=this.pv)||void 0===s?void 0:s.severity)===t.AlarmSeverity.MAJOR);if(!n)switch(this.borderStyle){case 0:break;case 1:case 8:case 9:case 10:case 11:o=[this.borderWidth,this.borderWidth,this.borderWidth,this.borderWidth];break;case 2:case 3:o=[1*r,1*r,1*r,1*r];break;case 4:case 5:case 6:o=[2*r,2*r,2*r,2*r];break;case 7:o=[2*r,2*r,1*r,1*r];break;case 12:o=[17*r,1*r,1*r,1*r];break;case 13:o=[16*r,16*r,16*r,16*r];break;case 14:const t=2*this.borderWidth;o=[t,t,t,t]}this.x=this.holderX+o[1],this.y=this.holderY+o[0],this.width=this.holderWidth-o[1]-o[3],this.height=this.holderHeight-o[0]-o[2],n||(this.beforeDrawBorder(e),this.drawBorderStyle(e)),this.holderRegion&&e.addHitRegion(this.holderRegion).addRect(this.holderX,this.holderY,this.holderWidth,this.holderHeight)}beforeDrawBorder(t){}drawBorderStyle(t){const{scale:e}=this;if(0===this.borderStyle);else if(1===this.borderStyle)t.strokeRect({x:this.holderX,y:this.holderY,width:this.holderWidth,height:this.holderHeight,color:this.borderColor,lineWidth:this.borderWidth,crispen:!0});else if(2===this.borderStyle){const s=1*e,r=this.holderY+s/2,o=this.holderX+s/2,n=this.holderY+this.holderHeight-s+s/2,h=this.holderX+this.holderWidth-s+s/2;t.strokePath({color:i.BLACK,path:new T(h,n).lineTo(h,r).moveTo(h,n).lineTo(o,n)}),t.strokePath({color:i.WHITE,path:new T(o,r).lineTo(h-s,r).moveTo(o,r).lineTo(o,n-s)})}else if(3===this.borderStyle){const s=1*e,r=this.holderY+s/2,o=this.holderX+s/2,n=this.holderY+this.holderHeight-s+s/2,h=this.holderX+this.holderWidth-s+s/2;t.strokePath({color:i.WHITE,path:new T(h,n).lineTo(h,r).moveTo(h,n).lineTo(o,n)}),t.strokePath({color:i.BLACK,path:new T(o,r).lineTo(h-s,r).moveTo(o,r).lineTo(o,n-s)})}else if(4===this.borderStyle)this.drawShadowBorder(t,i.BUTTON_LIGHTEST,i.BUTTON_DARKER,i.BUTTON_DARKER,i.BUTTON_LIGHTEST);else if(5===this.borderStyle)this.drawShadowBorder(t,i.BUTTON_DARKER,i.BUTTON_LIGHTEST,i.BUTTON_LIGHTEST,i.BUTTON_DARKER);else if(6===this.borderStyle)this.drawShadowBorder(t,i.BUTTON_DARKEST,i.BUTTON_DARKER,i.BUTTON,i.BUTTON_LIGHTEST);else if(7===this.borderStyle)this.drawShadowBorder(t,i.BUTTON_LIGHTEST,i.BUTTON_LIGHTEST,i.BUTTON_DARKEST,i.BUTTON_DARKER);else if(8===this.borderStyle)this.drawDashedBorder(t,[2*e,2*e]);else if(9===this.borderStyle)this.drawDashedBorder(t,[6*e,2*e]);else if(10===this.borderStyle)this.drawDashedBorder(t,[6*e,2*e,2*e,2*e]);else if(11===this.borderStyle)this.drawDashedBorder(t,[6*e,2*e,2*e,2*e,2*e,2*e]);else if(12===this.borderStyle)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+8*e,baseline:"middle",align:"left",font:et.ARIAL_11.scale(e),color:i.BLACK,text:this.name}),t.strokeRect({x:this.holderX,y:this.holderY,width:this.holderWidth,height:this.holderHeight,color:i.BLACK,crispen:!0});else if(13===this.borderStyle){const i=t.measureText(this.name,et.ARIAL_11.scale(e)),s=1;let r=l(this.holderX+8*e,this.holderY+8*e,this.holderWidth-16*e-s,this.holderHeight-16*e-s,s);this.transparent||(t.fillRect(Object.assign(Object.assign({},c(r,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:et.ARIAL_11.scale(e),color:this.borderColor,text:this.name}),t.strokePath({color:this.backgroundColor.darker(),path:new T(r.x,r.y).lineTo(r.x+8*e,r.y).moveTo(r.x+8*e+i.width,r.y).lineTo(r.x+r.width,r.y).lineTo(r.x+r.width,r.y+r.height).lineTo(r.x,r.y+r.height).lineTo(r.x,r.y)}),r=l(this.holderX+8*e+s,this.holderY+8*e+s,this.holderWidth-16*e-s,this.holderHeight-16*e-s,s),t.strokePath({color:this.backgroundColor.brighter(),path:new T(r.x,r.y).lineTo(r.x+8*e-s,r.y).moveTo(r.x+8*e-s+i.width,r.y).lineTo(r.x+r.width,r.y).lineTo(r.x+r.width,r.y+r.height).lineTo(r.x,r.y+r.height).lineTo(r.x,r.y)})}else if(14===this.borderStyle){const i=l(this.holderX,this.holderY,this.holderWidth,this.holderHeight,this.borderWidth);this.fillRoundRectangleBackgroundBorder&&t.fillRect(Object.assign(Object.assign({},i),{rx:4*e,ry:4*e,color:this.backgroundColor})),this.borderWidth&&t.strokeRect(Object.assign(Object.assign({},i),{rx:4*e,ry:4*e,color:this.borderColor,lineWidth:this.borderWidth}))}else 15===this.borderStyle||console.warn(`Unsupported border style: ${this.borderStyle}`)}drawDecoration(e){var s,r,o;if(this.display.editMode)return;const{scale:n}=this;if(!this.pvName||this.pv&&!this.pv.disconnected)this.pv&&void 0===this.pv.value&&e.strokeRect(Object.assign(Object.assign({},this.bounds),{dash:[2*n,2*n],lineWidth:2*n,color:i.PINK,crispen:!0}));else{const t=1*n;e.fillRect({x:this.holderX-t/2,y:this.holderY-t/2,width:this.holderWidth+t,height:this.holderHeight+t,color:i.PURPLE,opacity:.4}),e.strokeRect({x:this.holderX-t/2,y:this.holderY-t/2,width:this.holderWidth+t,height:this.holderHeight+t,color:i.PURPLE})}if(this.borderAlarmSensitive){let h;8===this.borderStyle?h=[2*n,2*n]:9===this.borderStyle?h=[6*n,2*n]:10===this.borderStyle?h=[6*n,2*n,2*n,2*n]:11===this.borderStyle&&(h=[6*n,2*n,2*n,2*n,2*n,2*n]),(null===(s=this.pv)||void 0===s?void 0:s.severity)===t.AlarmSeverity.MAJOR?e.strokeRect(Object.assign(Object.assign({},this.bounds),{lineWidth:2*n,color:i.RED,crispen:!0,dash:h})):(null===(r=this.pv)||void 0===r?void 0:r.severity)===t.AlarmSeverity.MINOR?e.strokeRect(Object.assign(Object.assign({},this.bounds),{lineWidth:2*n,color:i.ORANGE,crispen:!0,dash:h})):(null===(o=this.pv)||void 0===o?void 0:o.severity)===t.AlarmSeverity.INVALID&&e.strokeRect(Object.assign(Object.assign({},this.bounds),{lineWidth:2*n,color:i.PINK,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("x"),y:this.properties.getValue("y"),width:this.properties.getValue(te),height:this.properties.getValue($t)}}get area(){return{x:this.x,y:this.y,width:this.width,height:this.height}}drawShadowBorder(t,e,i,s,r){const o=1*this.scale,n=this.holderY+o/2,h=this.holderX+o/2,a=this.holderY+this.holderHeight-o+o/2,l=this.holderX+this.holderWidth-o+o/2;t.strokePath({color:e,path:new T(l,a).lineTo(l,n).moveTo(l,a).lineTo(h,a)}),t.strokePath({color:i,path:new T(l-o,a-o).lineTo(l-o,n+o).moveTo(l-o,a-o).lineTo(h+o,a-o)}),t.strokePath({color:s,path:new T(h,n).lineTo(l-o,n).moveTo(h,n).lineTo(h,a-o)}),t.strokePath({color:r,path:new T(h+o,n+o).lineTo(l-o-o,n+o).moveTo(h+o,n+o).lineTo(h+o,a-o-o)})}drawDashedBorder(t,e){const i=l(this.holderX,this.holderY,this.holderWidth,this.holderHeight,this.borderWidth);t.strokePath({color:this.borderColor,lineWidth:this.borderWidth,dash:e,path:new T(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()})}executeAction(t){const e=this.actions.getAction(t);if(e)switch(e.type){case"OPEN_DISPLAY":const t={path:e.path,replace:0===e.mode};this.display.fireEvent("opendisplay",t);break;case"EXECUTE_JAVASCRIPT":if(e.embedded){new Mt(this.display.instance,e.text).run()}else fetch(this.display.resolvePath(e.path),{credentials:"same-origin"}).then((t=>{t.ok&&t.text().then((t=>{new Mt(this.display.instance,t).run()}))}));break;case"WRITE_PV":if(e.pvName){const t=this.expandMacro(e.pvName);this.display.pvEngine.createPV(t),this.display.pvEngine.setValue(new Date,t,e.value)}break;case"PLAY_SOUND":if(e.path){new Audio(this.display.resolvePath(e.path)).play()}break;case"OPEN_WEBPAGE":e.hyperlink&&(window.location.href=e.hyperlink);break;default:throw new Error(`Unsupported command ${e.type}`)}}expandMacro(t){var e;if(-1===t.indexOf("$"))return t;for(const i of this.properties.all())if(i instanceof _){const s=this.properties.getProperty(i.pvPropertyName);let r="";const o=null==s?void 0:s.value;if(o){const t=this.display.getPV(o);r=null!==(e=null==t?void 0:t.value)&&void 0!==e?e:""}t=(t=t.replace(`$(${i.name})`,r)).replace(`\${${i.name}}`,r)}else t=(t=t.replace(`$(${i.name})`,i.value||"")).replace(`\${${i.name}}`,i.value||"");return this.parent?this.parent.expandContainerMacros(t):t}get pv(){if(this.pvName)return this.display.getPV(this.pvName)}isMinorSeverity(){var e;return(null===(e=this.pv)||void 0===e?void 0:e.severity)===t.AlarmSeverity.MINOR}isMajorSeverity(){var e;return(null===(e=this.pv)||void 0===e?void 0:e.severity)===t.AlarmSeverity.MAJOR}get alarm(){var e,i;return(null===(e=this.pv)||void 0===e?void 0:e.severity)===t.AlarmSeverity.MINOR||(null===(i=this.pv)||void 0===i?void 0:i.severity)===t.AlarmSeverity.MAJOR}get alarmSensitiveBackgroundColor(){if(this.backgroundAlarmSensitive){if(this.isMajorSeverity())return i.RED;if(this.isMinorSeverity())return i.ORANGE}return this.backgroundColor}get alarmSensitiveForegroundColor(){if(this.foregroundAlarmSensitive){if(this.isMajorSeverity())return i.RED;if(this.isMinorSeverity())return i.ORANGE}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){const i=this.display.measureAbsoluteArea(this);return this.display.copyCanvas(i).toDataURL(t,e)}get wuid(){return this.properties.getValue(ee)}get name(){return this.properties.getValue(jt)}get holderX(){return this.scale*this.properties.getValue("x")}get holderY(){return this.scale*this.properties.getValue("y")}get holderWidth(){return this.scale*this.properties.getValue(te)}get holderHeight(){return this.scale*this.properties.getValue($t)}get borderAlarmSensitive(){return this.properties.getValue(Bt)}get backgroundAlarmSensitive(){return this.properties.getValue(Wt)}get foregroundAlarmSensitive(){return this.properties.getValue(Dt)}get pvName(){return this.properties.getValue(Gt,!0)}get pvValue(){return this.properties.getValue(zt,!0)}get borderColor(){return this.properties.getValue(It)}get borderStyle(){return this.properties.getValue(Ht)}get borderWidth(){return this.scale*this.properties.getValue(Ot)}get backgroundColor(){return this.properties.getValue(Et)}get enabled(){return this.properties.getValue(Nt)}get foregroundColor(){return this.properties.getValue(Ft)}get tooltip(){const t=this.properties.getProperty(Kt);if(t.rawValue)return this.expandMacro(t.rawValue)}get transparent(){return this.properties.getValue(Zt)}get visible(){return this.properties.getValue(Jt)}get actions(){return this.properties.getValue(Rt)}get scripts(){return this.properties.getValue(Yt)}get rules(){return this.properties.getValue(Ut)}get scaleOptions(){return this.properties.getValue(qt)}get widgetType(){return this.properties.getValue(Qt,!0)}get text(){if(this.display.editMode){return(this.properties.getProperty(Xt).rawValue||"").split(" ").join(" ")}return this.properties.getValue(Xt).split(" ").join(" ")}init(){}hide(){}destroy(){}}const se="macros";class re extends ie{constructor(t,e){super(t,e),this._widgets=[],this._connections=[],this.relativeScale=1,this.properties.add(new I(se))}expandContainerMacros(t){for(const e in this.macros.macros)t=(t=t.replace(`$(${e})`,this.macros.macros[e])).replace(`\${${e}}`,this.macros.macros[e]);return this.parent&&this.macros.includeParentMacros&&(t=this.parent.expandContainerMacros(t)),t}findWidget(t){for(const e of this.widgets){if(e.wuid===t)return e;if(e instanceof re){const i=e.findWidget(t);if(i)return i}}}findWidgetByName(t){for(const e of this.widgets){if(e.name===t)return e;if(e instanceof re){const i=e.findWidgetByName(t);if(i)return i}}for(const e of this.connections)if(e.name===t)return e}hide(){for(const t of this.widgets)t.hide()}destroy(){for(const t of this.widgets)t.destroy()}get widgets(){return this._widgets}get connections(){return this._connections}get macros(){return this.properties.getValue(se)}}const oe="arrow_length",ne="arrows",he="fill_arrow",ae="name",le="line_color",de="line_style",ce="line_width",pe="src_wuid",ue="src_term",ge="tgt_wuid",me="tgt_term",fe="router",xe="points",we="LEFT",ye="UP",ve="DOWN",be="RIGHT";class Te extends ie{constructor(t){super(t),this.properties.clear(),this.properties.add(new L(oe)),this.properties.add(new L(ne)),this.properties.add(new k(he)),this.properties.add(new C(ae)),this.properties.add(new M(le)),this.properties.add(new L(de)),this.properties.add(new L(ce)),this.properties.add(new C(pe)),this.properties.add(new C(ue)),this.properties.add(new C(ge)),this.properties.add(new C(me)),this.properties.add(new L(fe)),this.properties.add(new W(xe)),this.properties.add(new C("wuid"))}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):0===this.router?this.drawManhattanConnection(t):1===this.router&&this.drawDirectConnection(t))}drawPath(t){const e=this.getPosition(this.sourceWidget,this.sourceTerm),i=this.getPosition(this.targetWidget,this.targetTerm),s=[e,...this.points,i],r=T.fromPoints(s).translate(.5*this.scale,.5*this.scale);t.strokePath({path:r,lineWidth:this.lineWidth,color:this.lineColor,dash:this.getDashArray()}),this.drawStartArrow(t,s[1],s[0]),this.drawStopArrow(t,s[s.length-2],s[s.length-1])}drawManhattanConnection(t){const e=this.getManhattanAnchor(this.sourceWidget,this.sourceTerm),i=this.getManhattanAnchor(this.targetWidget,this.targetTerm),s=this.route(e,i),r=T.fromPoints(s);this.lineWidth&&t.strokePath({lineWidth:this.lineWidth,color:this.lineColor,path:r,dash:this.getDashArray()}),this.drawStartArrow(t,s[s.length-2],s[s.length-1]),this.drawStopArrow(t,s[1],s[0])}getDashArray(){const{scale:t}=this;if(this.lineWidth){if(0===this.lineStyle)return[];if(1===this.lineStyle)return[6*t,2*t];if(2===this.lineStyle)return[2*t,2*t];if(3===this.lineStyle)return[6*t,2*t,2*t,2*t];if(4===this.lineStyle)return[6*t,2*t,2*t,2*t,2*t,2*t];console.warn(`Unsupported connection line style ${this.lineStyle}`)}}drawDirectConnection(t){const e=this.getPosition(this.sourceWidget,this.sourceTerm),i=this.getPosition(this.targetWidget,this.targetTerm);this.lineWidth&&t.strokePath({path:new T(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=ye;break;case"BOTTOM":case"BOTTOM_LEFT":case"BOTTOM_RIGHT":i=ve;break;case"LEFT":i=we;break;case"RIGHT":i=be}const s=t.bounds,r=this.getPosition(t,e),o=r.x-s.x,n=s.x+s.width-r.x,h=r.y-s.y,a=s.y+s.height-r.y;return i=Math.min(o,n)<Math.min(h,a)?o<n?we:be:h<a?ye:ve,{x:r.x,y:r.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:const i=parseInt(e,10);let s=t.properties.getProperty("points");if(s){let t=s.value;return t=y(t,this.scale),t[i]}throw Error(`Unexpected term ${e}`)}}route(t,e){let i,s,r=t.x-e.x,o=t.y-e.y,n={x:0,y:0},h=[];const{tolxtol:a,tol:l,minDist:d}=this;if(r*r<a&&o*o<a)return[{x:e.x,y:e.y}];t.direction===we?r>0&&o*o<l&&e.direction===be?(n=e,i=e.direction):(r<0?n={x:t.x-d,y:t.y}:o>0&&e.direction===ve||o<0&&e.direction===ye?n={x:e.x,y:t.y}:t.direction===e.direction?(s=Math.min(t.x,e.x)-d,n={x:s,y:t.y}):n={x:t.x-r/2,y:t.y},i=o>0?ye:ve):t.direction===be?r<0&&o*o<l&&e.direction===we?(n=e,i=e.direction):(r>0?n={x:t.x+d,y:t.y}:o>0&&e.direction===ve||o<0&&e.direction===ye?n={x:e.x,y:t.y}:t.direction===e.direction?(s=Math.max(t.x,e.x)+d,n={x:s,y:t.y}):n={x:t.x-r/2,y:t.y},i=o>0?ye:ve):t.direction===ve?r*r<l&&o<0&&e.direction===ye?(n=e,i=e.direction):(o>0?n={x:t.x,y:t.y+d}:r>0&&e.direction===be||r<0&&e.direction===we?n={x:t.x,y:e.y}:t.direction===e.direction?(s=Math.max(t.y,e.y)+d,n={x:t.x,y:s}):n={x:t.x,y:t.y-o/2},i=r>0?we:be):t.direction===ye&&(r*r<l&&o>0&&e.direction===ve?(n=e,i=e.direction):(o<0?n={x:t.x,y:t.y-d}:r>0&&e.direction===be||r<0&&e.direction===we?n={x:t.x,y:e.y}:t.direction===e.direction?(s=Math.min(t.y,e.y)-d,n={x:t.x,y:s}):n={x:t.x,y:t.y-o/2},i=r>0?we:be));const c=Object.assign(Object.assign({},n),{direction:i});return h=h.concat(this.route(c,e)),h.push(t),h}drawStartArrow(t,e,i){const s=t.ctx;if(1===this.arrows||3===this.arrows){const t=this.calculateArrowPoints(e,i);if(t[2]=i,this.fillArrow){s.fillStyle=this.lineColor.toString(),s.beginPath();for(let e=0;e<t.length;e++)0===e?s.moveTo(t[e].x,t[e].y):s.lineTo(t[e].x,t[e].y);s.fill()}else s.strokeStyle=this.lineColor.toString(),s.lineWidth=this.lineWidth,s.beginPath(),s.moveTo(i.x,i.y),s.lineTo(t[0].x,t[0].y),s.moveTo(i.x,i.y),s.lineTo(t[1].x,t[1].y),s.stroke()}}drawStopArrow(t,e,i){const s=t.ctx;if(2===this.arrows||3===this.arrows){const t=this.calculateArrowPoints(e,i);if(t[2]=i,this.fillArrow){s.fillStyle=this.lineColor.toString(),s.beginPath();for(let e=0;e<t.length;e++)0===e?s.moveTo(t[e].x,t[e].y):s.lineTo(t[e].x,t[e].y);s.fill()}else s.strokeStyle=this.lineColor.toString(),s.lineWidth=this.lineWidth,s.beginPath(),s.moveTo(i.x,i.y),s.lineTo(t[0].x,t[0].y),s.moveTo(i.x,i.y),s.lineTo(t[1].x,t[1].y),s.stroke()}}calculateArrowPoints(t,e){const i=x(e,t),s=Math.PI/10,r=new w(this.arrowLength,i.theta-s),o=new w(this.arrowLength,i.theta+s),n=new w(Math.floor(this.arrowLength*Math.cos(s)),i.theta);return[u(r.toPoint(),e.x,e.y),u(o.toPoint(),e.x,e.y),u(n.toPoint(),e.x,e.y)]}get minDist(){return 20*this.scale}get tol(){return.1*this.scale}get tolxtol(){return.01*this.scale}get name(){return this.properties.getValue(ae)}get arrows(){return this.properties.getValue(ne)}get fillArrow(){return this.properties.getValue(he)}get arrowLength(){return this.scale*this.properties.getValue(oe)}get lineColor(){return this.properties.getValue(le)}get lineStyle(){return this.properties.getValue(de)}get lineWidth(){return this.scale*this.properties.getValue(ce)}get router(){return this.properties.getValue(fe)}get sourceTerm(){return this.properties.getValue(ue)}get sourceWuid(){return this.properties.getValue(pe)}get targetTerm(){return this.properties.getValue(me)}get targetWuid(){return this.properties.getValue(ge)}get points(){return y(this.properties.getValue(xe),this.scale)}}let Se=0;const Ve="auto_scale_widgets";class Ae extends re{constructor(t,e){super(t,e),this.properties.add(new $(Ve))}parseNode(t){super.parseNode(t);const e=Se++;this.macros.set("DID",`DID_${e}`);const i=this.properties.getValue("name");this.macros.set("DNAME",i);for(const e of t.getNodes("widget")){const t=e.getString("widget_type"),i=this.display.createWidget(t,this);i&&(i.parseNode(e),this.widgets.push(i))}for(const e of t.getNodes("connection")){const t=new Te(this.display);t.parseNode(e),this.connections.push(t)}}draw(t){for(const e of this.widgets.filter((t=>t.visible)))e.drawHolder(t),e.draw(t),e.drawDecoration(t);for(const e of this.connections)e.draw(t);for(const e of this.widgets.filter((t=>t.visible)))e.drawOverlay(t)}measureContentBounds(t){let e=0,i=0,s=0,r=0;for(const o of this.widgets.filter((t=>t.visible))){const n=t?o.bounds:o.unscaledBounds;e=Math.min(e,n.x),i=Math.min(i,n.y),s=Math.max(s,n.x+n.width),r=Math.max(r,n.y+n.height)}return{x:e,y:i,width:s-e,height:r-i}}get autoScaleWidgets(){return this.properties.getValue(Ve)}}let Ce=0;const _e="group_name",Le="opi_file",Pe="resize_behaviour";class ke extends re{constructor(t,e){super(t,e),this.properties.add(new C(_e)),this.properties.add(new C(Le)),this.properties.add(new L(Pe,0))}parseNode(t){super.parseNode(t);const e=Ce++;this.macros.set("LCID",`LCID_${e}`)}init(){this.opiFile&&(this.resolvedOpiFile=this.display.resolvePath(this.opiFile),fetch(this.resolvedOpiFile,{credentials:"same-origin"}).then((t=>{t.ok&&t.text().then((t=>{this.linkedDisplay=new Ae(this.display,this);const e=ht.parseFromXML(t);this.linkedDisplay.parseNode(e),this.requestRepaint()}))})))}draw(t){this.transparent||t.fillRect(Object.assign(Object.assign({},this.area),{color:this.backgroundColor}));const e=this.getLinkedWidget();if(this.linkedDisplay&&e)if(t.fillRect(Object.assign(Object.assign({},this.area),{color:this.linkedDisplay.backgroundColor})),0===this.resizeBehavior){const e=this.linkedDisplay.measureContentBounds(!1);let{width:i,height:s}=e;const r=this.display.scale;i*=r,s*=r;const o=i/s;let n=this.width,h=n/o,a=n/i;h>this.height&&(h=this.height,n=h*o,a=h/i),this.linkedDisplay.relativeScale=a;const l=t.createChild(Math.ceil(n),Math.ceil(h));l.translate(e.x,e.y),this.linkedDisplay.draw(l),t.copy(l,this.x,this.y)}else if(1===this.resizeBehavior)console.warn("Unsupported resize behavior of LinkingContainer",this.resizeBehavior);else if(2===this.resizeBehavior){const e=this.linkedDisplay.measureContentBounds(!0),i=t.createChild(e.width,e.height);i.translate(e.x,e.y),this.linkedDisplay.draw(i),t.copy(i,this.x,this.y)}else 3===this.resizeBehavior&&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(Le)}get groupName(){return this.properties.getValue(_e)}get resizeBehavior(){return this.properties.getValue(Pe)}}class Me{constructor(t){this.display=t}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 ke){const e=i.resolvedOpiFile,s=e.lastIndexOf("/")+1;return`${e.substring(0,s)}${t}`}i=i.parent}}return`${this.display.relPrefix}${t}`}}class Re{constructor(t,e){this.pvName=t,this.formula=e,this.pvValues=new Map}updateDataSource(t,e){this.pvValues.set(t,e)}clearState(){this.pvValues.clear()}getPVNames(){const t=this.formula.expression,e=[];return this.getExpressionParameters(t,e),e}getExpressionParameters(t,e){switch(t.type){case"ParameterLiteral":-1===e.indexOf(t.value)&&e.push(t.value);break;case"ConditionalExpression":this.getExpressionParameters(t.consequent,e),t.alternate&&this.getExpressionParameters(t.alternate,e);break;case"BinaryExpression":case"LogicalExpression":this.getExpressionParameters(t.left,e),this.getExpressionParameters(t.right,e);break;case"UnaryExpression":this.getExpressionParameters(t.argument,e);break;case"CallExpression":for(const i of t.arguments)this.getExpressionParameters(i,e)}}execute(){const t=this.formula.expression;return this.executeExpression(t)}executeExpression(t){switch(t.type){case"BooleanLiteral":case"ConstantLiteral":case"NumericLiteral":case"StringLiteral":return t.value;case"ParameterLiteral":const e=this.pvValues.get(t.value);return e?e.value:void 0;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){const 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){const 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){const e=this.executeExpression(t.test),i=this.executeExpression(t.consequent);if(void 0===t.alternate)return e?i:null;{const s=this.executeExpression(t.alternate);return e?i:s}}executeUnaryExpression(t){const 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){const e=t.callee.name,i=[];for(const e of t.arguments)i.push(this.executeExpression(e));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 180*i[0]/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){const e=this.pvValues.get(t);if(e)return e.acquisitionStatus}}function Ee(t,e,i,s){var r=Error.call(this,t);return Object.setPrototypeOf&&Object.setPrototypeOf(r,Ee.prototype),r.expected=e,r.found=i,r.location=s,r.name="SyntaxError",r}function We(t,e,i){return i=i||" ",t.length>e?t:(e-=t.length,t+(i+=i.repeat(e)).slice(0,e))}function Be(t,e){var i,s,r,o,n={},h=(e=void 0!==e?e:{}).grammarSource,a={Start:kt},l=kt,d=".",c='"',p="'",u="-",g="+",m=",",f="<=",x=">=",w="==",y="!=",v="&&",b="||",T=/^[a-zA-Z]/,S=/^[a-zA-Z0-9_]/,V=/^[0-9]/,A=/^[1-9]/,C=/^[^\n\r\f"]/,_=/^[^\n\r\f']/,L=Vt("=",!1),P=Vt(" ",!1),k=Vt("\t",!1),M=Vt("false",!0),R=Vt("true",!0),E=Vt("PI",!0),W=Vt("E",!0),B=Ct("identifier"),I=At([["a","z"],["A","Z"]],!1,!1),O=Vt("_",!1),H=At([["a","z"],["A","Z"],["0","9"],"_"],!1,!1),N=Ct("boolean"),F=Ct("constant"),D=Ct("number"),$=Vt(".",!1),j=Vt("0",!1),G=At([["0","9"]],!1,!1),z=At([["1","9"]],!1,!1),U=Ct("string"),q=Vt('"',!1),Y=At(["\n","\r","\f",'"'],!0,!1),X=Ct("parameter"),K=Vt("'",!1),Z=At(["\n","\r","\f","'"],!0,!1),J=Vt("(",!1),Q=Vt(")",!1),tt=Vt("-",!1),et=Vt("+",!1),it=Vt(",",!1),st=Vt("*",!1),rt=Vt("/",!1),ot=Vt("^",!1),nt=Vt("%",!1),ht=Vt("<=",!1),at=Vt(">=",!1),lt=Vt("<",!1),dt=Vt(">",!1),ct=Vt("==",!1),pt=Vt("!=",!1),ut=Vt("&&",!1),gt=Vt("||",!1),mt=function(){return{type:"NumericLiteral",value:parseFloat(t.substring(yt,wt))}},ft=function(t,e){return function(t,e,i){return[t].concat(function(t,e){return t.map((function(t){return t[e]}))}(e,i))}(t,e,3)},xt=function(t,e){return function(t,e){return e.reduce((function(t,e){return{type:"BinaryExpression",operator:e[1],left:t,right:e[3]}}),t)}(t,e)},wt=0,yt=0,vt=[{line:1,column:1}],bt=0,Tt=[],St=0;if("startRule"in e){if(!(e.startRule in a))throw new Error("Can't start parsing from rule \""+e.startRule+'".');l=a[e.startRule]}function Vt(t,e){return{type:"literal",text:t,ignoreCase:e}}function At(t,e,i){return{type:"class",parts:t,inverted:e,ignoreCase:i}}function Ct(t){return{type:"other",description:t}}function _t(e){var i,s=vt[e];if(s)return s;for(i=e-1;!vt[i];)i--;for(s={line:(s=vt[i]).line,column:s.column};i<e;)10===t.charCodeAt(i)?(s.line++,s.column=1):s.column++,i++;return vt[e]=s,s}function Lt(t,e){var i=_t(t),s=_t(e);return{source:h,start:{offset:t,line:i.line,column:i.column},end:{offset:e,line:s.line,column:s.column}}}function Pt(t){wt<bt||(wt>bt&&(bt=wt,Tt=[]),Tt.push(t))}function kt(){var e,i,s;return e=wt,61===t.charCodeAt(wt)?(i="=",wt++):(i=n,0===St&&Pt(L)),i!==n?(Mt(),s=function(){var t,e;t=wt,(e=Gt())!==n&&(yt=t,e={type:"Formula",expression:e});return t=e}(),s!==n?(Mt(),yt=e,e=s):(wt=e,e=n)):(wt=e,e=n),e}function Mt(){var t,e;for(t=[],e=Rt();e!==n;)t.push(e),e=Rt();return t}function Rt(){var e;return 32===t.charCodeAt(wt)?(e=" ",wt++):(e=n,0===St&&Pt(P)),e===n&&(9===t.charCodeAt(wt)?(e="\t",wt++):(e=n,0===St&&Pt(k))),e}function Et(){var e,i;return e=wt,i=function(){var e,i,s,r;if(St++,e=wt,i=function(){var e;T.test(t.charAt(wt))?(e=t.charAt(wt),wt++):(e=n,0===St&&Pt(I));e===n&&(95===t.charCodeAt(wt)?(e="_",wt++):(e=n,0===St&&Pt(O)));return e}(),i!==n){for(s=[],r=Wt();r!==n;)s.push(r),r=Wt();yt=e,e={type:"Symbol",name:i+s.join("")}}else wt=e,e=n;St--,e===n&&(i=n,0===St&&Pt(B));return e}(),i!==n&&(yt=e,i=i),e=i}function Wt(){var e;return S.test(t.charAt(wt))?(e=t.charAt(wt),wt++):(e=n,0===St&&Pt(H)),e}function Bt(){var e;return(e=function(){var e,i;St++,e=wt,i=function(){var e;return"true"===t.substr(wt,4).toLowerCase()?(e=t.substr(wt,4),wt+=4):(e=n,0===St&&Pt(R)),e}(),i!==n&&(yt=e,i={type:"BooleanLiteral",value:!0});(e=i)===n&&(e=wt,i=function(){var e;return"false"===t.substr(wt,5).toLowerCase()?(e=t.substr(wt,5),wt+=5):(e=n,0===St&&Pt(M)),e}(),i!==n&&(yt=e,i={type:"BooleanLiteral",value:!1}),e=i);St--,e===n&&(i=n,0===St&&Pt(N));return e}())===n&&(e=function(){var e,i;St++,e=wt,i=function(){var e;return"pi"===t.substr(wt,2).toLowerCase()?(e=t.substr(wt,2),wt+=2):(e=n,0===St&&Pt(E)),e}(),i!==n&&(yt=e,i={type:"ConstantLiteral",value:Math.PI});(e=i)===n&&(e=wt,i=function(){var e;return"e"===t.substr(wt,1).toLowerCase()?(e=t.charAt(wt),wt++):(e=n,0===St&&Pt(W)),e}(),i!==n&&(yt=e,i={type:"ConstantLiteral",value:Math.E}),e=i);St--,e===n&&(i=n,0===St&&Pt(F));return e}())===n&&(e=function(){var e,i,s,r,o;if(St++,e=wt,(i=It())!==n)if(46===t.charCodeAt(wt)?(s=d,wt++):(s=n,0===St&&Pt($)),s!==n){for(r=[],o=Ot();o!==n;)r.push(o),o=Ot();yt=e,e=mt()}else wt=e,e=n;else wt=e,e=n;if(e===n){if(e=wt,46===t.charCodeAt(wt)?(i=d,wt++):(i=n,0===St&&Pt($)),i!==n){if(s=[],(r=Ot())!==n)for(;r!==n;)s.push(r),r=Ot();else s=n;s!==n?(yt=e,e=mt()):(wt=e,e=n)}else wt=e,e=n;e===n&&(e=wt,(i=It())!==n&&(yt=e,i=mt()),e=i)}St--,e===n&&(i=n,0===St&&Pt(D));return e}())===n&&(e=function(){var e,i,s,r;St++,e=wt,34===t.charCodeAt(wt)?(i=c,wt++):(i=n,0===St&&Pt(q));if(i!==n){for(s=[],C.test(t.charAt(wt))?(r=t.charAt(wt),wt++):(r=n,0===St&&Pt(Y));r!==n;)s.push(r),C.test(t.charAt(wt))?(r=t.charAt(wt),wt++):(r=n,0===St&&Pt(Y));34===t.charCodeAt(wt)?(r=c,wt++):(r=n,0===St&&Pt(q)),r!==n?(yt=e,e={type:"StringLiteral",value:s.join("")}):(wt=e,e=n)}else wt=e,e=n;St--,e===n&&(i=n,0===St&&Pt(U));return e}())===n&&(e=function(){var e,i,s,r;St++,e=wt,39===t.charCodeAt(wt)?(i=p,wt++):(i=n,0===St&&Pt(K));if(i!==n){for(s=[],_.test(t.charAt(wt))?(r=t.charAt(wt),wt++):(r=n,0===St&&Pt(Z));r!==n;)s.push(r),_.test(t.charAt(wt))?(r=t.charAt(wt),wt++):(r=n,0===St&&Pt(Z));39===t.charCodeAt(wt)?(r=p,wt++):(r=n,0===St&&Pt(K)),r!==n?(yt=e,e={type:"ParameterLiteral",value:s.join("")}):(wt=e,e=n)}else wt=e,e=n;St--,e===n&&(i=n,0===St&&Pt(X));return e}()),e}function It(){var e,i,s,r;if(48===t.charCodeAt(wt)?(e="0",wt++):(e=n,0===St&&Pt(j)),e===n)if(e=wt,i=function(){var e;A.test(t.charAt(wt))?(e=t.charAt(wt),wt++):(e=n,0===St&&Pt(z));return e}(),i!==n){for(s=[],r=Ot();r!==n;)s.push(r),r=Ot();e=i=[i,s]}else wt=e,e=n;return e}function Ot(){var e;return V.test(t.charAt(wt))?(e=t.charAt(wt),wt++):(e=n,0===St&&Pt(G)),e}function Ht(){var e,i,s;return e=function(){var e,i,s,r;return(e=Bt())===n&&(e=wt,40===t.charCodeAt(wt)?(i="(",wt++):(i=n,0===St&&Pt(J)),i!==n?(Mt(),(s=Gt())!==n?(Mt(),41===t.charCodeAt(wt)?(r=")",wt++):(r=n,0===St&&Pt(Q)),r!==n?(yt=e,e=s):(wt=e,e=n)):(wt=e,e=n)):(wt=e,e=n)),e}(),e===n&&(e=wt,i=function(){var e;45===t.charCodeAt(wt)?(e=u,wt++):(e=n,0===St&&Pt(tt));e===n&&(43===t.charCodeAt(wt)?(e=g,wt++):(e=n,0===St&&Pt(et)));return e}(),i!==n?(Mt(),(s=Ht())!==n?(Mt(),yt=e,e={type:"UnaryExpression",operator:i,argument:s}):(wt=e,e=n)):(wt=e,e=n)),e}function Nt(){var e,i,s;return e=wt,(i=Et())!==n?(Mt(),s=function(){var e,i,s,r;e=wt,40===t.charCodeAt(wt)?(i="(",wt++):(i=n,0===St&&Pt(J));i!==n?(Mt(),s=wt,r=function(){var e,i,s,r,o,h,a,l;if(e=wt,(i=Gt())!==n){for(s=[],r=wt,o=Mt(),44===t.charCodeAt(wt)?(h=m,wt++):(h=n,0===St&&Pt(it)),h!==n?(a=Mt(),(l=Gt())!==n?r=o=[o,h,a,l]:(wt=r,r=n)):(wt=r,r=n);r!==n;)s.push(r),r=wt,o=Mt(),44===t.charCodeAt(wt)?(h=m,wt++):(h=n,0===St&&Pt(it)),h!==n?(a=Mt(),(l=Gt())!==n?r=o=[o,h,a,l]:(wt=r,r=n)):(wt=r,r=n);yt=e,e=ft(i,s)}else wt=e,e=n;return e}(),r!==n?s=r=[r,Mt()]:(wt=s,s=n),s===n&&(s=null),41===t.charCodeAt(wt)?(r=")",wt++):(r=n,0===St&&Pt(Q)),r!==n?(yt=e,a=0,e=null!==(o=(h=s)?h[a]:null)?o:[]):(wt=e,e=n)):(wt=e,e=n);var o,h,a;return e}(),s!==n?(yt=e,e={type:"CallExpression",callee:i,arguments:s}):(wt=e,e=n)):(wt=e,e=n),e===n&&(e=Ht()),e}function Ft(){var e,i,s,r,o,h,a,l;if(e=wt,(i=Nt())!==n){for(s=[],r=wt,o=Mt(),42===t.charCodeAt(wt)?(h="*",wt++):(h=n,0===St&&Pt(st)),h===n&&(47===t.charCodeAt(wt)?(h="/",wt++):(h=n,0===St&&Pt(rt)),h===n&&(94===t.charCodeAt(wt)?(h="^",wt++):(h=n,0===St&&Pt(ot)),h===n&&(37===t.charCodeAt(wt)?(h="%",wt++):(h=n,0===St&&Pt(nt))))),h!==n?(a=Mt(),(l=Nt())!==n?r=o=[o,h,a,l]:(wt=r,r=n)):(wt=r,r=n);r!==n;)s.push(r),r=wt,o=Mt(),42===t.charCodeAt(wt)?(h="*",wt++):(h=n,0===St&&Pt(st)),h===n&&(47===t.charCodeAt(wt)?(h="/",wt++):(h=n,0===St&&Pt(rt)),h===n&&(94===t.charCodeAt(wt)?(h="^",wt++):(h=n,0===St&&Pt(ot)),h===n&&(37===t.charCodeAt(wt)?(h="%",wt++):(h=n,0===St&&Pt(nt))))),h!==n?(a=Mt(),(l=Nt())!==n?r=o=[o,h,a,l]:(wt=r,r=n)):(wt=r,r=n);yt=e,e=xt(i,s)}else wt=e,e=n;return e}function Dt(){var e,i,s,r,o,h,a,l;if(e=wt,(i=Ft())!==n){for(s=[],r=wt,o=Mt(),43===t.charCodeAt(wt)?(h=g,wt++):(h=n,0===St&&Pt(et)),h===n&&(45===t.charCodeAt(wt)?(h=u,wt++):(h=n,0===St&&Pt(tt))),h!==n?(a=Mt(),(l=Ft())!==n?r=o=[o,h,a,l]:(wt=r,r=n)):(wt=r,r=n);r!==n;)s.push(r),r=wt,o=Mt(),43===t.charCodeAt(wt)?(h=g,wt++):(h=n,0===St&&Pt(et)),h===n&&(45===t.charCodeAt(wt)?(h=u,wt++):(h=n,0===St&&Pt(tt))),h!==n?(a=Mt(),(l=Ft())!==n?r=o=[o,h,a,l]:(wt=r,r=n)):(wt=r,r=n);yt=e,e=xt(i,s)}else wt=e,e=n;return e}function $t(){var e,i,s,r,o,h,a,l;if(e=wt,(i=Dt())!==n){for(s=[],r=wt,o=Mt(),t.substr(wt,2)===f?(h=f,wt+=2):(h=n,0===St&&Pt(ht)),h===n&&(t.substr(wt,2)===x?(h=x,wt+=2):(h=n,0===St&&Pt(at)),h===n&&(60===t.charCodeAt(wt)?(h="<",wt++):(h=n,0===St&&Pt(lt)),h===n&&(62===t.charCodeAt(wt)?(h=">",wt++):(h=n,0===St&&Pt(dt))))),h!==n?(a=Mt(),(l=Dt())!==n?r=o=[o,h,a,l]:(wt=r,r=n)):(wt=r,r=n);r!==n;)s.push(r),r=wt,o=Mt(),t.substr(wt,2)===f?(h=f,wt+=2):(h=n,0===St&&Pt(ht)),h===n&&(t.substr(wt,2)===x?(h=x,wt+=2):(h=n,0===St&&Pt(at)),h===n&&(60===t.charCodeAt(wt)?(h="<",wt++):(h=n,0===St&&Pt(lt)),h===n&&(62===t.charCodeAt(wt)?(h=">",wt++):(h=n,0===St&&Pt(dt))))),h!==n?(a=Mt(),(l=Dt())!==n?r=o=[o,h,a,l]:(wt=r,r=n)):(wt=r,r=n);yt=e,e=xt(i,s)}else wt=e,e=n;return e}function jt(){var e,i,s,r,o,h,a,l;if(e=wt,(i=$t())!==n){for(s=[],r=wt,o=Mt(),t.substr(wt,2)===w?(h=w,wt+=2):(h=n,0===St&&Pt(ct)),h===n&&(t.substr(wt,2)===y?(h=y,wt+=2):(h=n,0===St&&Pt(pt))),h!==n?(a=Mt(),(l=$t())!==n?r=o=[o,h,a,l]:(wt=r,r=n)):(wt=r,r=n);r!==n;)s.push(r),r=wt,o=Mt(),t.substr(wt,2)===w?(h=w,wt+=2):(h=n,0===St&&Pt(ct)),h===n&&(t.substr(wt,2)===y?(h=y,wt+=2):(h=n,0===St&&Pt(pt))),h!==n?(a=Mt(),(l=$t())!==n?r=o=[o,h,a,l]:(wt=r,r=n)):(wt=r,r=n);yt=e,e=xt(i,s)}else wt=e,e=n;return e}function Gt(){var e,i,s,r,o,h,a,l;if(e=wt,(i=jt())!==n){for(s=[],r=wt,o=Mt(),t.substr(wt,2)===v?(h=v,wt+=2):(h=n,0===St&&Pt(ut)),h===n&&(t.substr(wt,2)===b?(h=b,wt+=2):(h=n,0===St&&Pt(gt))),h!==n?(a=Mt(),(l=jt())!==n?r=o=[o,h,a,l]:(wt=r,r=n)):(wt=r,r=n);r!==n;)s.push(r),r=wt,o=Mt(),t.substr(wt,2)===v?(h=v,wt+=2):(h=n,0===St&&Pt(ut)),h===n&&(t.substr(wt,2)===b?(h=b,wt+=2):(h=n,0===St&&Pt(gt))),h!==n?(a=Mt(),(l=jt())!==n?r=o=[o,h,a,l]:(wt=r,r=n)):(wt=r,r=n);yt=e,e=function(t,e){return e.reduce((function(t,e){return{type:"LogicalExpression",operator:e[1],left:t,right:e[3]}}),t)}(i,s)}else wt=e,e=n;return e}if((i=l())!==n&&wt===t.length)return i;throw i!==n&&wt<t.length&&Pt({type:"end"}),s=Tt,r=bt<t.length?t.charAt(bt):null,o=bt<t.length?Lt(bt,bt+1):Lt(bt,bt),new Ee(Ee.buildMessage(s,r),s,r,o)}!function(t,e){function i(){this.constructor=t}i.prototype=e.prototype,t.prototype=new i}(Ee,Error),Ee.prototype.format=function(t){var e="Error: "+this.message;if(this.location){var i,s=null;for(i=0;i<t.length;i++)if(t[i].source===this.location.source){s=t[i].text.split(/\r\n|\n|\r/g);break}var r=this.location.start,o=this.location.source+":"+r.line+":"+r.column;if(s){var n=this.location.end,h=We("",r.line.toString().length),a=s[r.line-1],l=r.line===n.line?n.column:a.length+1;e+="\n --\x3e "+o+"\n"+h+" |\n"+r.line+" | "+a+"\n"+h+" | "+We("",r.column-1)+We("",l-r.column,"^")}else e+="\n at "+o}return e},Ee.buildMessage=function(t,e){var i={literal:function(t){return'"'+r(t.text)+'"'},class:function(t){var e=t.parts.map((function(t){return Array.isArray(t)?o(t[0])+"-"+o(t[1]):o(t)}));return"["+(t.inverted?"^":"")+e+"]"},any:function(){return"any character"},end:function(){return"end of input"},other:function(t){return t.description}};function s(t){return t.charCodeAt(0).toString(16).toUpperCase()}function r(t){return t.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,(function(t){return"\\x0"+s(t)})).replace(/[\x10-\x1F\x7F-\x9F]/g,(function(t){return"\\x"+s(t)}))}function o(t){return t.replace(/\\/g,"\\\\").replace(/\]/g,"\\]").replace(/\^/g,"\\^").replace(/-/g,"\\-").replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,(function(t){return"\\x0"+s(t)})).replace(/[\x10-\x1F\x7F-\x9F]/g,(function(t){return"\\x"+s(t)}))}function n(t){return i[t.type](t)}return"Expected "+function(t){var e,i,s=t.map(n);if(s.sort(),s.length>0){for(e=1,i=1;e<s.length;e++)s[e-1]!==s[e]&&(s[i]=s[e],i++);s.length=i}switch(s.length){case 1:return s[0];case 2:return s[0]+" or "+s[1];default:return s.slice(0,-1).join(", ")+", or "+s[s.length-1]}}(t)+" but "+function(t){return t?'"'+r(t)+'"':"end of input"}(e)+" found."};class Ie{compile(t){const e=Be(t,{});return new Re(t,e)}execute(t){return this.compile(t).execute()}}class Oe{constructor(){this.pvs=new Map}canProvide(t){return t.startsWith("=")}startProviding(t){for(const e of t)this.pvs.set(e.name,new He(e))}stopProviding(t){for(const e of t)this.pvs.delete(e.name)}isNavigable(){return!1}shutdown(){}}class He{constructor(t){this.pv=t;const e=new Ie;this.compiledFormula=e.compile(t.name);for(const e of this.compiledFormula.getPVNames()){const i=t.pvEngine.createPV(e);this.compiledFormula.updateDataSource(i.name,{value:i.value,acquisitionStatus:"good"}),t.pvEngine.addListener(e,(()=>{this.compiledFormula.updateDataSource(e,{value:t.pvEngine.getValue(e),acquisitionStatus:"good"}),this.trigger()}))}this.trigger()}trigger(){const t=this.compiledFormula.execute();this.pv.pvEngine.setValue(new Date,this.pv.name,t)}}class Ne extends at{constructor(t,e,i){super(t,e),this.initializer=i,this.writable=!0}}const Fe=/(loc\:\/\/[^\(]+)(\((.*)\))?/;function De(t){if(!t.startsWith("loc://"))return t;const e=t.match(Fe);return e?e[1]:t}class $e{constructor(t){this.display=t,this.rules=[],this.scripts=[],this.pvs=new Map,this.providers=[],this.scriptLibraries={},this.listeners=new Map}init(){for(const t of this.listeners.entries()){const e=this.pvs.get(t[0]);if(e&&null!==e.value&&void 0!==e.value)for(const e of t[1])e()}}clearState(){this.disconnectAll(),this.rules=[],this.scripts=[],this.listeners.clear()}getPVNames(){return[...this.pvs.keys()]}hasPV(t){const e=De(t);return this.pvs.has(e)}getPV(t){const e=De(t);return this.pvs.get(e)}disconnectAll(){for(const t of this.providers){const e=[];for(const i of this.pvs.values())t.canProvide(i.name)&&e.push(i);e.length&&t.stopProviding(e)}this.pvs.clear()}createPV(t){if(t.startsWith("loc://"))return this.createLocalPV(t);let e=this.pvs.get(t);if(e)return e;e=new at(t,this),this.pvs.set(t,e);for(const i of this.providers)if(i.canProvide(t))return e.navigable=i.isNavigable(),i.startProviding([e]),e;return console.warn(`No provider for PV ${t}`),e.disconnected=!0,e}requestRepaint(){this.display.requestRepaint()}createLocalPV(t){const e=t.match(Fe);let i;if(e&&(t=e[1],void 0!==e[3])){const t=e[3];i=t.startsWith('"')&&t.endsWith('"')?t.substring(1,t.length-1):-1!==t.indexOf(",")?t.split(",").map((t=>Number(t.trim()))):Number(t)}let s=this.pvs.get(t),r=!1;if(s){const e=s;void 0===e.initializer||void 0===i||this.initializerEquals(e.initializer,i)?void 0===e.initializer&&void 0!==i&&(r=!0):console.warn(`PV ${t} is defined with different initializers: ${e.initializer} !== ${i}`)}return s||(s=new Ne(t,this,i),this.pvs.set(t,s),r=!0),r&&void 0!==i&&this.setValue(new Date,t,i),s}initializerEquals(t,e){if(Array.isArray(t)&&Array.isArray(e)){if(t.length!==e.length)return!1;for(let i=0;i<t.length;i++)if(t[i]!==e[i])return!1;return!0}return t===e}getValue(t){const e=De(t),i=this.pvs.get(e);if(i)return i.value}setValue(e,i,s,r=t.AlarmSeverity.NONE){const o=De(i),n=this.pvs.get(o);if(!n)throw new Error(`Cannot set value of unknown PV ${i}`);n.setSample({time:e,value:s,severity:r});for(const t of this.listeners.get(i)||[])t()}setValues(t){const e=[];for(const i of t.keys()){const s=this.pvs.get(i);if(s){s.setSample(t.get(i));for(const t of this.listeners.get(i)||[])e.push(t)}else console.warn(`Received an update for unknown pv ${i}`)}for(const t of e)t()}createScript(t,e,i){const s=[];for(const i of e.inputs){const e=t.expandMacro(i.pvName);s.push(this.createPV(e))}const r=new je(t,e,i,s);this.scripts.push(r);for(let i=0;i<e.inputs.length;i++){const o=e.inputs[i],n=s[i];if(o.trigger){const i=t.expandMacro(o.pvName);this.addListener(i,(()=>{if(e.checkConnect)for(let t=0;t<e.inputs.length;t++){const i=s[t],r=e.inputs[t].trigger,o=null!==i.value&&void 0!==i.value;if(i.disconnected||r&&!o)return}r.scriptEngine.run(n)}),!1)}}}createRule(t,e){const i=[];for(const s of e.inputs){const e=t.expandMacro(s.pvName);i.push(this.createPV(e))}const s=new Ge(t,e,i);this.rules.push(s);const r=()=>s.scriptEngine.run();for(const i of e.inputs)if(i.trigger){const e=t.expandMacro(i.pvName);this.addListener(e,r,!1)}}addProvider(t){this.providers.push(t)}addScriptLibrary(t,e){this.scriptLibraries[t]=e}addListener(t,e,i=!0){const s=De(t),r=this.listeners.get(s);if(r?r.push(e):this.listeners.set(s,[e]),i){const t=this.pvs.get(s);t&&null!==t.value&&void 0!==t.value&&e()}}removeListener(t,e){const i=De(t),s=this.listeners.get(i);if(s){const t=s.indexOf(e);-1!==t&&s.splice(t,1)}}}class je{constructor(t,e,i,s){this.widget=t,this.script=e,this.text=i,this.scriptEngine=new Mt(t,i,s)}}class Ge{constructor(t,e,i){this.widget=t,this.rule=e;let s="";const r=t.properties.getProperty(e.propertyName);if(!r)throw new Error(`Cannot create rule for unsupported property ${e.propertyName}`);if(e.expressions.length){let t=!1,o=!1,n=!1,h=!1;for(const i of e.expressions)i.expression.match(/pv[0-9]+/)&&(t=!0),e.outputExpression&&i.outputValue.toString().match(/pv[0-9]+/)&&(t=!0),-1!==i.expression.indexOf("pvInt")&&(o=!0),e.outputExpression&&-1!==i.outputValue.toString().indexOf("pvInt")&&(o=!0),-1!==i.expression.indexOf("pvStr")&&(n=!0),e.outputExpression&&-1!==i.outputValue.toString().indexOf("pvStr")&&(n=!0),-1!==i.expression.indexOf("pvSev")&&(h=!0),e.outputExpression&&-1!==i.outputValue.toString().indexOf("pvSev")&&(h=!0);for(let e=0;e<i.length;e++)t&&(s+=`var pv${e} = PVUtil.getDouble(pvs[${e}]);\n`),o&&(s+=`var pvInt${e} = PVUtil.getLong(pvs[${e}]);\n`),n&&(s+=`var pvStr${e} = PVUtil.getString(pvs[${e}]);\n`),h&&(s+=`var pvSev${e} = PVUtil.getSeverity(pvs[${e}]);\n`);for(let t=0;t<e.expressions.length;t++){const i=e.expressions[t].expression,o=e.expressions[t].outputValue;if(t>0&&(s+="else "),s+=`if (${i}) widget.setPropertyValue("${e.propertyName}", `,e.outputExpression)s+=`${o});\n`;else{s+=`${this.printScriptValue(r,o)});\n`}}const a=r.value,l=this.printScriptValue(r,a);s+=`else widget.setPropertyValue("${e.propertyName}", `,s+=`${l});\n`}this.scriptEngine=new Mt(t,s,i)}printScriptValue(t,e){return null==e?"null":t.printScriptValue(e)}}class ze{constructor(t,e,i){this.pv=t,this.interval=e,void 0!==i&&t.pvEngine.setValue(new Date,t.name,i),this.interval>0&&(this.timer=window.setInterval((()=>{this.generateSample(new Date)}),e))}emit(e,i){let s=t.AlarmSeverity.NONE;void 0!==this.pv.lowerAlarmLimit&&i<this.pv.lowerAlarmLimit||void 0!==this.pv.upperAlarmLimit&&i>this.pv.upperAlarmLimit?s=t.AlarmSeverity.MAJOR:(void 0!==this.pv.lowerWarningLimit&&i<this.pv.lowerWarningLimit||void 0!==this.pv.upperWarningLimit&&i>this.pv.upperWarningLimit)&&(s=t.AlarmSeverity.MINOR),this.pv.pvEngine.setValue(e,this.pv.name,i,s)}stop(){window.clearInterval(this.timer)}}class Ue extends ze{constructor(t,e){super(t,-1,e)}generateSample(){}}class qe extends ze{constructor(t,e,i,s){super(t,s),this.min=e,this.max=i;const r=this.max-this.min;t.units="x",t.lowerDisplayLimit=e,t.lowerAlarmLimit=e+.1*r,t.lowerWarningLimit=e+.2*r,t.upperWarningLimit=e+.8*r,t.upperAlarmLimit=e+.9*r,t.upperDisplayLimit=i}generateSample(t){const e=Math.random()*(this.max-this.min)+this.min;this.emit(t,e)}}class Ye extends ze{constructor(t,e,i,s){super(t,s),this.avg=e,this.stddev=i,t.units="x",t.lowerDisplayLimit=e-4*i,t.lowerAlarmLimit=e-2*i,t.lowerWarningLimit=e-i,t.upperWarningLimit=e+i,t.upperAlarmLimit=e+2*i,t.upperDisplayLimit=e+4*i}generateSample(t){let e,i,s;do{e=2*Math.random()-1,i=2*Math.random()-1,s=e*e+i*i}while(s>=1||0===s);const r=e*Math.sqrt(-2*Math.log(s)/s);this.emit(t,this.avg+r*this.stddev)}}class Xe extends ze{constructor(t,e,i,s,r){super(t,r),this.min=e,this.max=i,this.samplesPerCycle=s,this.currentValue=0;const o=this.max-this.min;t.units="x",t.lowerDisplayLimit=e,t.lowerAlarmLimit=e+.1*o,t.lowerWarningLimit=e+.2*o,t.upperWarningLimit=e+.8*o,t.upperAlarmLimit=e+.9*o,t.upperDisplayLimit=i}generateSample(t){const e=this.max-this.min,i=Math.sin(2*this.currentValue*Math.PI/this.samplesPerCycle)*e/2+this.min+e/2;this.currentValue++,this.emit(t,i)}}class Ke extends ze{constructor(t,e,i,s,r){super(t,r),this.min=e,this.max=i,this.inc=s,this.currentValue=0,this.currentValue=s>=0?e-s:i-s;const o=this.max-this.min;t.units="x",t.lowerDisplayLimit=e,t.lowerAlarmLimit=e+.1*o,t.lowerWarningLimit=e+.2*o,t.upperWarningLimit=e+.8*o,t.upperAlarmLimit=e+.9*o,t.upperDisplayLimit=i}generateSample(t){this.currentValue=this.currentValue+this.inc,this.currentValue>this.max&&(this.currentValue=this.min),this.currentValue<this.min&&(this.currentValue=this.max),this.emit(t,this.currentValue)}}const Ze=/sim\:\/\/([a-zA-Z]+)(\((.*)\))?/;class Je{constructor(){this.pvs=new Map}canProvide(t){return t.startsWith("sim://")}startProviding(t){for(const e of t){const t=new Qe(e);this.pvs.set(e.name,t)}}stopProviding(t){for(const e of t){const t=this.pvs.get(e.name);t&&(t.fn.stop(),this.pvs.delete(e.name))}}isNavigable(){return!1}shutdown(){for(const t of this.pvs.values())t.fn.stop()}}class Qe{constructor(t){this.pv=t;const e=t.name.match(Ze);if(e){const t=e[3]?e[3].split(","):[];for(let e=0;e<t.length;e++)t[e]=t[e].trim();this.fn=this.createGenerator(e[1],t)}else console.warn(`Unexpected pattern for PV ${t.name}`),this.fn=new Ue(t,void 0)}createGenerator(t,e){switch(t){case"const":const i=this.saferEval(e[0]);return new Ue(this.pv,i);case"gaussianNoise":return this.createGaussianNoise(e);case"noise":return this.createNoise(e);case"ramp":return this.createRamp(e);case"sine":return this.createSine(e);default:return console.warn(`Unexpected function ${t} for PV ${this.pv.name}`),new Ue(this.pv,void 0)}}saferEval(t){return Function('"use strict";return ('+t+")")()}createNoise(t){if(0===t.length)return new qe(this.pv,-5,5,1e3);{const e=parseFloat(t[0]),i=parseFloat(t[1]),s=1e3*parseFloat(t[2]);return new qe(this.pv,e,i,s)}}createGaussianNoise(t){if(0===t.length)return new Ye(this.pv,0,1,100);{const e=parseFloat(t[0]),i=parseFloat(t[1]),s=1e3*parseFloat(t[2]);return new Ye(this.pv,e,i,s)}}createRamp(t){let e;if(0===t.length)e=new Ke(this.pv,-5,5,1,1e3);else if(3===t.length){const i=parseFloat(t[0]),s=parseFloat(t[1]),r=1e3*parseFloat(t[2]);e=new Ke(this.pv,i,s,1,r)}else{if(4!==t.length)return console.warn(`Unexpected ramp arguments for PV ${this.pv.name}`),new Ue(this.pv,void 0);{const i=parseFloat(t[0]),s=parseFloat(t[1]),r=parseFloat(t[2]),o=1e3*parseFloat(t[3]);e=new Ke(this.pv,i,s,r,o)}}return e}createSine(t){let e;if(0===t.length)e=new Xe(this.pv,-5,5,10,1e3);else if(3===t.length){const i=parseFloat(t[0]),s=parseFloat(t[1]),r=1e3*parseFloat(t[2]);e=new Xe(this.pv,i,s,10,r)}else{if(4!==t.length)return console.warn(`Unexpected sine arguments for PV ${this.pv.name}`),new Ue(this.pv,void 0);{const i=parseFloat(t[0]),s=parseFloat(t[1]),r=parseFloat(t[2]),o=1e3*parseFloat(t[3]);e=new Xe(this.pv,i,s,r,o)}}return e}}const ti="font",ei="push_action_index",ii="release_action_index",si="toggle_button",ri="image";class oi extends ie{constructor(t,e){super(t,e),this.pushed=!1,this.imageLoaded=!1,this.properties.add(new R(ti)),this.properties.add(new k(si)),this.properties.add(new L(ei)),this.properties.add(new L(ii)),this.properties.add(new C(ri))}init(){this.image&&(this.imageElement=new Image,this.imageElement.onload=()=>{this.imageLoaded=!0,this.requestRepaint()},this.imageElement.src=this.resolvePath(this.image)),this.areaRegion={id:`${this.wuid}-area`,mouseDown:()=>{this.toggleButton||(this.pushed=!0,this.requestRepaint())},mouseOut:()=>{this.pushed=!1,this.requestRepaint()},mouseUp:()=>{this.toggleButton||(this.pushed=!1,this.requestRepaint())},click:()=>{this.executeAction(this.pushed?this.releaseActionIndex:this.pushActionIndex),this.toggleButton&&(this.pushed=!this.pushed)},tooltip:()=>this.tooltip,cursor:"pointer"}}draw(t){const e=t.ctx,{scale:s}=this;t.fillRect(Object.assign(Object.assign({},this.area),{color:this.backgroundColor}));t.addHitRegion(this.areaRegion).addRect(this.x,this.y,this.width,this.height);const r=1*s,o=this.holderY+r/2,n=this.holderX+r/2,h=this.holderY+this.holderHeight-r+r/2,a=this.holderX+this.holderWidth-r+r/2;t.strokePath({lineWidth:r,color:this.pushed?i.BUTTON_LIGHTEST:i.BLACK,path:new T(a,h).lineTo(a,o).moveTo(a,h).lineTo(n,h)}),t.strokePath({lineWidth:r,color:this.pushed?this.backgroundColor:i.BUTTON_DARKER,path:new T(a-r,h-r).lineTo(a-r,o+r).moveTo(a-r,h-r).lineTo(n+r,h-r)}),t.strokePath({lineWidth:r,color:this.pushed?i.BLACK:i.BUTTON_LIGHTEST,path:new T(n,o).lineTo(a-r,o).moveTo(n,o).lineTo(n,h-r)}),t.strokePath({lineWidth:r,color:this.pushed?i.BUTTON_DARKER:this.backgroundColor,path:new T(n+r,o+r).lineTo(a-r-r,o+r).moveTo(n+r,o+r).lineTo(n+r,h-r-r)});const l=this.text.split("\n");let d,c;if(e.fillStyle=this.foregroundColor.toString(),e.font=this.font.getFontString(),this.imageElement&&this.imageLoaded){const t=e.measureText(l[0]).width,i=this.font.height,r=this.imageElement.naturalHeight*s,o=this.imageElement.naturalWidth*s,n=(this.height-r)/i,h=5*s;if((this.width-o)/t>n){e.textBaseline="middle",e.textAlign="left",d=this.x+(this.width-t)/2+h,c=this.y+this.height/2;const i=this.x+(this.width-t)/2-o,s=this.y+(this.height-r)/2;e.drawImage(this.imageElement,i,s,o,r)}else{e.textAlign="center",e.textBaseline="top";const t=i+r;d=this.x+this.width/2,c=this.y+(this.height-t)/2+r;const s=this.x+(this.width-o)/2,n=this.y+(this.height-t)/2;e.drawImage(this.imageElement,s,n,o,r)}this.pushed&&(d+=1*s,c+=1*s),e.fillText(l[0],d,c)}else{e.textAlign="start",e.textBaseline="top";let t=0;for(const i of l){const s=e.measureText(i).width;t=Math.max(t,s)}d=this.x+(this.width-t)/2;const i=l.length*this.font.height+(l.length-1)*this.font.height*.2;c=this.y+(this.height-i)/2;for(const t of l){let i=d,r=c;this.pushed&&(i+=1*s,r+=1*s),e.fillText(t,i,r),c+=1.2*this.font.height}}}get font(){return this.properties.getValue(ti).scale(this.scale)}get image(){return this.properties.getValue(ri)}get toggleButton(){return this.properties.getValue(si)}get pushActionIndex(){return this.properties.getValue(ei)}get releaseActionIndex(){return this.properties.getValue(ii)}get backgroundColor(){const t=this.properties.getProperty("background_color");return t&&t.value!==i.TRANSPARENT?t.value:i.BUTTON}}const ni="data_type",hi="effect_3d",ai="font",li="off_color",di="off_label",ci="off_state",pi="on_color",ui="on_label",gi="on_state",mi="push_action_index",fi="released_action_index",xi="show_led",wi="show_boolean_label",yi="square_button",vi="toggle_button";class bi extends ie{constructor(t,e){super(t,e),this.hovered=!1,this.manualToggleState=!1,this.properties.add(new L("bit")),this.properties.add(new L(ni)),this.properties.add(new k(yi)),this.properties.add(new k(xi)),this.properties.add(new k(hi)),this.properties.add(new M(pi)),this.properties.add(new C(ui)),this.properties.add(new C(gi)),this.properties.add(new M(li)),this.properties.add(new C(di)),this.properties.add(new C(ci)),this.properties.add(new R(ai)),this.properties.add(new k(vi)),this.properties.add(new L(mi)),this.properties.add(new L(fi)),this.properties.add(new k(wi))}init(){this.areaRegion={id:`${this.wuid}-area`,mouseDown:()=>{this.toggleButton&&this.booleanValue?this.toggleOff():this.toggleOn(),this.requestRepaint()},mouseEnter:()=>{this.hovered=!0,this.requestRepaint()},mouseUp:()=>{this.booleanValue&&!this.toggleButton&&(this.toggleOff(),this.requestRepaint())},mouseOut:()=>{this.booleanValue&&!this.toggleButton&&this.toggleOff(),this.hovered=!1,this.requestRepaint()},tooltip:()=>this.tooltip,cursor:"pointer"}}toggleOn(){if(this.manualToggleState=!0,this.pv&&this.pv.writable)if(0===this.dataType)if(this.bit<0)this.display.pvEngine.setValue(new Date,this.pv.name,1);else{const t=this.pv.value|1<<this.bit;this.display.pvEngine.setValue(new Date,this.pv.name,t)}else this.display.pvEngine.setValue(new Date,this.pv.name,this.onState);this.executeAction(this.pushActionIndex)}toggleOff(){if(this.manualToggleState=!1,this.pv&&this.pv.writable)if(0===this.dataType)if(this.bit<0)this.display.pvEngine.setValue(new Date,this.pv.name,0);else{const t=this.pv.value&~(1<<this.bit);this.display.pvEngine.setValue(new Date,this.pv.name,t)}else this.display.pvEngine.setValue(new Date,this.pv.name,this.offState);void 0!==this.releaseActionIndex&&this.executeAction(this.releaseActionIndex)}get booleanValue(){var t,e;return this.pv&&void 0!==this.pv.value?0===this.dataType?this.bit<0?Boolean(null===(t=this.pv)||void 0===t?void 0:t.toNumber()):((null===(e=this.pv)||void 0===e?void 0:e.value)>>this.bit&1)>0:1===this.dataType&&this.pv.toString()===this.onState:this.manualToggleState}draw(t){const e=this.booleanValue;this.squareButton?this.drawSquare(t,e):this.drawEllipse(t,e),this.width>this.height?this.drawHorizontal(t,e):this.drawVertical(t,e),this.showBooleanLabel&&t.fillText({x:this.x+this.width/2,y:this.y+this.height/2,font:this.font,color:this.foregroundColor,align:"center",baseline:"middle",text:e?this.onLabel:this.offLabel})}drawSquare(t,e){t.fillRect({x:this.x,y:this.y,width:this.width,height:this.height,color:i.DARK_GRAY});t.addHitRegion(this.areaRegion).addRect(this.x,this.y,this.width,this.height);const s=2*this.scale,r=e?i.DARK_GRAY:i.WHITE,o=e?i.WHITE:i.DARK_GRAY;this.effect3d&&(t.fillPath({color:r,path:new T(this.x,this.y).lineTo(this.x,this.y+this.height).lineTo(this.x+s,this.y+this.height-s).lineTo(this.x+s,this.y+s).lineTo(this.x+this.width-s,this.y+s).lineTo(this.x+this.width,this.y).closePath()}),t.fillPath({color:o,path:new T(this.x,this.y+this.height).lineTo(this.x+this.width,this.y+this.height).lineTo(this.x+this.width,this.y).lineTo(this.x+this.width-s,this.y+s).lineTo(this.x+this.width-s,this.y+this.height-s).lineTo(this.x+s,this.y+this.height-s).closePath()}));let n=this.backgroundColor;this.hovered&&(n=this.backgroundColor.mixWith(i.WHITE,.5)),t.fillRect({x:this.x+s,y:this.y+s,width:this.width-s-s,height:this.height-s-s,color:n})}drawEllipse(t,e){const{scale:s}=this;if(this.effect3d){const r=this.width/2,o=this.height/2,n=Math.sqrt(r*r+o*o),h=this.x+r+(o-r-n)/2-1*s,a=this.y+o-(o-r+n)/2-1*s,l=this.x+r+(o-r+n)/2+5*s,d=this.y+o-(o-r-n)/2+5*s,c=t.createLinearGradient(h,a,l,d);e?(c.addColorStop(0,i.DARK_GRAY.toString()),c.addColorStop(1,i.WHITE.toString())):(c.addColorStop(0,i.WHITE.toString()),c.addColorStop(1,i.DARK_GRAY.toString())),t.ctx.fillStyle=c}else t.ctx.fillStyle=e?i.WHITE.toString():i.DARK_GRAY.toString();const r=this.x+this.width/2,o=this.y+this.height/2,n=this.width/2,h=this.height/2;t.ctx.beginPath(),t.ctx.ellipse(r,o,n,h,0,0,2*Math.PI),t.ctx.fill();t.addHitRegion(this.areaRegion).addEllipse(r,o,n,h,0,0,2*Math.PI),this.hovered?t.ctx.fillStyle=this.backgroundColor.mixWith(i.WHITE,.5).toString():t.ctx.fillStyle=this.backgroundColor.toString(),t.ctx.beginPath(),t.ctx.ellipse(r,o,n-2*s,h-2*s,0,0,2*Math.PI),t.ctx.fill()}drawHorizontal(t,e){const{scale:i}=this;if(this.showLed){let s;this.squareButton?(s=Math.floor(.3*(this.width+this.height)/2),s>Math.min(this.width,this.height)&&(s=Math.min(this.width,this.height)-2*i)):(s=Math.floor(.25*(this.width+this.height)/2),s>Math.min(this.width,this.height)&&(s=Math.min(this.width,this.height)-8*i));const r={x:Math.floor(this.x+.79999*this.width-s/2),y:Math.floor(this.y+this.height/2-s/2),width:s,height:s},o=r.x+r.width/2,n=r.y+r.height/2,h=r.width/2,a=r.height/2,l=e?this.onColor:this.offColor;if(t.fillEllipse({cx:o,cy:n,rx:h,ry:a,color:l}),this.effect3d){const e=t.createLinearGradient(r.x,r.y,r.x+r.width,r.y+r.height);e.addColorStop(0,"white"),e.addColorStop(1,l.withAlpha(0).toString()),t.ctx.beginPath(),t.ctx.ellipse(o,n,h,a,0,0,2*Math.PI),t.ctx.fillStyle=e,t.ctx.fill()}}}drawVertical(t,e){const{scale:s}=this;if(this.showLed){let r;this.squareButton?(r=Math.floor(.3*(this.width+this.height)/2),r>Math.min(this.width,this.height)&&(r=Math.min(this.width,this.height)-2*s)):(r=Math.floor(.25*(this.width+this.height)/2),r>Math.min(this.width,this.height)&&(r=Math.min(this.width,this.height)-8*s));const o={x:Math.floor(this.x+this.width/2-r/2),y:Math.floor(this.y+(1-.79999)*this.height-r/2),width:r,height:r},n=e?this.onColor:this.offColor,h=o.x+o.width/2,a=o.y+o.height/2,l=o.width/2,d=o.height/2;if(t.fillEllipse({cx:h,cy:a,rx:l,ry:d,color:n}),this.effect3d){const e=t.createLinearGradient(o.x,o.y,o.x+o.width,o.y+o.height);e.addColorStop(0,i.WHITE.toString()),e.addColorStop(1,n.withAlpha(0).toString()),t.ctx.beginPath(),t.ctx.ellipse(h,a,l,d,0,0,2*Math.PI),t.ctx.fillStyle=e,t.ctx.fill()}}}get bit(){return this.properties.getValue("bit")}get dataType(){return this.properties.getValue(ni)}get toggleButton(){return this.properties.getValue(vi)}get pushActionIndex(){return this.properties.getValue(mi)}get releaseActionIndex(){return this.properties.getValue(fi)}get squareButton(){return this.properties.getValue(yi)}get showLed(){return this.properties.getValue(xi)}get showBooleanLabel(){return this.properties.getValue(wi)}get effect3d(){return this.properties.getValue(hi)}get onColor(){return this.properties.getValue(pi)}get onLabel(){return this.properties.getValue(ui)}get onState(){return this.properties.getValue(gi)}get offColor(){return this.properties.getValue(li)}get offLabel(){return this.properties.getValue(di)}get offState(){return this.properties.getValue(ci)}get font(){return this.properties.getValue(ai).scale(this.scale)}}const Ti="data_type",Si="effect_3d",Vi="off_color",Ai="off_label",Ci="off_state",_i="on_color",Li="on_label",Pi="on_state",ki="push_action_index",Mi="released_action_index",Ri="toggle_button";class Ei extends ie{constructor(t,e){super(t,e),this.manualToggleState=!1,this.properties.add(new L("bit")),this.properties.add(new L(Ti)),this.properties.add(new k(Si)),this.properties.add(new M(_i)),this.properties.add(new C(Li)),this.properties.add(new C(Pi)),this.properties.add(new M(Vi)),this.properties.add(new C(Ai)),this.properties.add(new C(Ci)),this.properties.add(new L(ki)),this.properties.add(new L(Mi)),this.properties.add(new k(Ri))}init(){this.shaftRegion={id:`${this.wuid}-shaft`,mouseDown:()=>{this.toggleButton&&this.booleanValue?this.toggleOff():this.toggleOn(),this.requestRepaint()},mouseUp:()=>{this.booleanValue&&!this.toggleButton&&(this.toggleOff(),this.requestRepaint())},mouseOut:()=>{this.booleanValue&&!this.toggleButton&&(this.toggleOff(),this.requestRepaint())},tooltip:()=>this.tooltip,cursor:"pointer"}}toggleOn(){if(this.manualToggleState=!0,this.pv&&this.pv.writable)if(0===this.dataType)if(this.bit<0)this.display.pvEngine.setValue(new Date,this.pv.name,1);else{const t=this.pv.value|1<<this.bit;this.display.pvEngine.setValue(new Date,this.pv.name,t)}else this.display.pvEngine.setValue(new Date,this.pv.name,this.onState);this.executeAction(this.pushActionIndex)}toggleOff(){if(this.manualToggleState=!1,this.pv&&this.pv.writable)if(0===this.dataType)if(this.bit<0)this.display.pvEngine.setValue(new Date,this.pv.name,0);else{const t=this.pv.value&~(1<<this.bit);this.display.pvEngine.setValue(new Date,this.pv.name,t)}else this.display.pvEngine.setValue(new Date,this.pv.name,this.offState);void 0!==this.releaseActionIndex&&this.executeAction(this.releaseActionIndex)}get booleanValue(){var t,e;return this.pv&&void 0!==this.pv.value?0===this.dataType?this.bit<0?Boolean(null===(t=this.pv)||void 0===t?void 0:t.toNumber()):((null===(e=this.pv)||void 0===e?void 0:e.value)>>this.bit&1)>0:1===this.dataType&&this.pv.toString()===this.onState:this.manualToggleState}draw(t){const e=this.booleanValue;this.width>this.height?this.drawHorizontal(t,e):this.drawVertical(t,e)}drawHorizontal(t,e){let i=this.width,s=this.height;s>i/2?s=Math.floor(this.width/2):i=Math.floor(2*this.height);const r={x:Math.floor(63/218*i),y:0,width:s/2,height:s/2};this.drawPedestal(t,r,e);const o=Math.floor(35/218*i),n=Math.floor(45/105*s),h=Math.floor(43/218*i),a=Math.floor(35/105*s),l=Math.floor(1/7*r.width);if(e){const e={x:2*r.x+r.width-o,y:r.height/2-n/2,width:o,height:n},i={x:r.x+r.width/2-h/2+l,y:r.y+r.height/2-a/2,width:h,height:a};this.drawHorizontalBar(t,i,e,!0)}else{const e={x:0,y:r.height/2-n/2,width:o,height:n},i={x:r.x+r.width/2-h/2-l,y:r.y+r.height/2-a/2,width:h,height:a};this.drawHorizontalBar(t,i,e,!1)}}drawVertical(t,e){let i=this.width,s=this.height;i>s/2?i=Math.floor(this.height/2):s=Math.floor(2*this.width);const r={x:0,y:Math.floor(63/218*s),width:i/2,height:i/2};this.drawPedestal(t,r,e);const o=Math.floor(45/105*i),n=Math.floor(35/218*s),h=Math.floor(35/105*i),a=Math.floor(43/218*s);if(e){const e={x:r.width/2-o/2,y:0,width:o,height:n},i={x:r.x+r.width/2-h/2,y:r.y+r.height/2-a/2,width:h,height:a};i.y-=Math.floor(1/7*r.height),this.drawVerticalBar(t,i,e,!0)}else{const e=r.y+r.height/2+a/2+2*this.scale,i={x:r.width/2-o/2,y:r.y+r.height/2-a/2+e-n,width:o,height:n},s={x:r.x+r.width/2-h/2,y:r.y+r.height/2-a/2,width:h,height:a};s.y+=Math.floor(1/7*r.height),this.drawVerticalBar(t,s,i,!1)}}drawPedestal(t,e,s){let r=this.x+e.x+e.width/2,o=this.y+e.y+e.height/2,n=e.width/2,h=e.height/2;if(t.ctx.fillStyle=this.effect3d?i.WHITE.toString():i.GRAY.toString(),t.ctx.beginPath(),t.ctx.ellipse(r,o,n,h,0,0,2*Math.PI),t.ctx.fill(),this.effect3d){const i=t.createLinearGradient(this.x+e.x,this.y+e.y,this.x+e.x+e.width,this.y+e.y+e.height);s?(i.addColorStop(0,`rgba(255,255,255,${10/255})`),i.addColorStop(1,`rgba(0,0,0,${100/255})`)):(i.addColorStop(0,"rgba(0,0,0,0)"),i.addColorStop(1,`rgba(0,0,0,${150/255})`)),t.ctx.fillStyle=i,t.ctx.fill()}}drawHorizontalBar(t,e,i,s){let r=(s?0:10)/255,o=(s?150:220)/255;const n=t.createLinearGradient(this.x+i.x,this.y+i.y,this.x+i.x,this.y+i.y+i.height);n.addColorStop(0,`rgba(0,0,0,${r})`),n.addColorStop(1,`rgba(0,0,0,${o})`);const h=t.addHitRegion(this.shaftRegion);let a=this.x+e.x+e.width/2,l=this.y+e.y+e.height/2,d=e.width/2,c=e.height/2;t.ctx.beginPath(),t.ctx.ellipse(a,l,d,c,0,0,2*Math.PI),h.addEllipse(a,l,d,c,0,0,2*Math.PI),t.ctx.fillStyle=s?this.onColor.toString():this.offColor.toString(),t.ctx.fill(),this.effect3d&&(t.ctx.fillStyle=n,t.ctx.fill());const p=[Math.round(this.x+i.x+i.width/2),Math.round(this.y+i.y),Math.round(this.x+i.x+i.width/2),Math.round(this.y+i.y+i.height),Math.round(this.x+e.x+e.width/2),Math.round(this.y+e.y+e.height),Math.round(this.x+e.x+e.width/2),Math.round(this.y+e.y)];if(t.ctx.beginPath(),t.ctx.moveTo(p[0],p[1]),t.ctx.lineTo(p[2],p[3]),t.ctx.lineTo(p[4],p[5]),t.ctx.lineTo(p[6],p[7]),t.ctx.closePath(),h.addPath(new T(p[0],p[1]).lineTo(p[2],p[3]).lineTo(p[4],p[5]).lineTo(p[6],p[7]).closePath()),t.ctx.fillStyle=s?this.onColor.toString():this.offColor.toString(),t.ctx.fill(),this.effect3d&&(t.ctx.fillStyle=n,t.ctx.fill()),a=this.x+i.x+i.width/2,l=this.y+i.y+i.height/2,d=i.width/2,c=i.height/2,t.ctx.beginPath(),t.ctx.ellipse(a,l,d,c,0,0,2*Math.PI),h.addEllipse(a,l,d,c,0,0,2*Math.PI),t.ctx.fillStyle=s?this.onColor.toString():this.offColor.toString(),t.ctx.fill(),this.effect3d){const{scale:e}=this,s=Math.sqrt(d*d+c*c),n=c-d,h=this.x+i.x+d+(n-s)/2-1*e,a=this.x+i.y+c-(n+s)/2-1*e,l=this.x+i.x+d+(n+s)/2+5*e,p=this.x+i.y+c-(n-s)/2+5*e,u=t.createLinearGradient(h,a,l,p);u.addColorStop(0,`rgba(0,0,0,${r})`),u.addColorStop(1,`rgba(0,0,0,${o})`),t.ctx.fillStyle=u,t.ctx.fill()}}drawVerticalBar(t,e,i,s){const r=t.createLinearGradient(this.x+i.x,this.y+i.y,this.x+i.x+i.width,this.y+i.y);r.addColorStop(0,`rgba(0,0,0,${10/255})`),r.addColorStop(1,`rgba(0,0,0,${s?210/255:160/255})`);const o=t.addHitRegion(this.shaftRegion);let n=this.x+e.x+e.width/2,h=this.y+e.y+e.height/2;t.ctx.beginPath(),t.ctx.ellipse(n,h,e.width/2,e.height/2,0,0,2*Math.PI),o.addEllipse(n,h,e.width/2,e.height/2,0,0,2*Math.PI),t.ctx.fillStyle=s?this.onColor.toString():this.offColor.toString(),t.ctx.fill(),this.effect3d&&(t.ctx.fillStyle=r,t.ctx.fill());const a=[Math.round(this.x+i.x),Math.round(this.y+i.y+i.height/2),Math.round(this.x+i.x+i.width),Math.round(this.y+i.y+i.height/2),Math.round(this.x+e.x+e.width),Math.round(this.y+e.y+e.height/2),Math.round(this.x+e.x),Math.round(this.y+e.y+e.height/2)];t.ctx.beginPath(),t.ctx.moveTo(a[0],a[1]),t.ctx.lineTo(a[2],a[3]),t.ctx.lineTo(a[4],a[5]),t.ctx.lineTo(a[6],a[7]),t.ctx.closePath(),o.addPath(new T(a[0],a[1]).lineTo(a[2],a[3]).lineTo(a[4],a[5]).lineTo(a[6],a[7]).closePath()),t.ctx.fillStyle=s?this.onColor.toString():this.offColor.toString(),t.ctx.fill(),this.effect3d&&(t.ctx.fillStyle=r,t.ctx.fill()),n=this.x+i.x+i.width/2,h=this.y+i.y+i.height/2;const l=i.width/2,d=i.height/2;if(t.ctx.beginPath(),t.ctx.ellipse(n,h,l,d,0,0,2*Math.PI),o.addEllipse(n,h,l,d,0,0,2*Math.PI),t.ctx.fillStyle=s?this.onColor.toString():this.offColor.toString(),t.ctx.fill(),this.effect3d){const e=t.createLinearGradient(this.x+i.x,this.y+i.y,this.x+i.width,this.y+i.height);e.addColorStop(0,`rgba(0,0,0,${(s?5:10)/255})`),e.addColorStop(1,`rgba(0,0,0,${(s?180:160)/255})`),t.ctx.fillStyle=e,t.ctx.fill()}}get bit(){return this.properties.getValue("bit")}get dataType(){return this.properties.getValue(Ti)}get toggleButton(){return this.properties.getValue(Ri)}get pushActionIndex(){return this.properties.getValue(ki)}get releaseActionIndex(){return this.properties.getValue(Mi)}get effect3d(){return this.properties.getValue(Si)}get onColor(){return this.properties.getValue(_i)}get onLabel(){return this.properties.getValue(Li)}get onState(){return this.properties.getValue(Pi)}get offColor(){return this.properties.getValue(Vi)}get offLabel(){return this.properties.getValue(Ai)}get offState(){return this.properties.getValue(Ci)}}const Wi="enabled",Bi="font",Ii="label",Oi="selected_color",Hi=new i(130,130,130),Ni=new i(94,151,230);class Fi extends ie{constructor(t,e){super(t,e),this.hovered=!1,this.manualToggleState=!1,this.properties.add(new L("bit")),this.properties.add(new k(Wi)),this.properties.add(new R(Bi)),this.properties.add(new C(Ii)),this.properties.add(new M(Oi,new i(64,64,64)))}init(){this.areaRegion={id:`${this.wuid}-area`,mouseDown:()=>{this.booleanValue?this.toggleOff():this.toggleOn(),this.requestRepaint()},mouseEnter:()=>{this.hovered=!0,this.requestRepaint()},mouseOut:()=>{this.hovered=!1,this.requestRepaint()},tooltip:()=>this.tooltip,cursor:"pointer"}}toggleOn(){if(this.manualToggleState=!0,this.pv&&this.pv.writable)if(this.bit<0)this.display.pvEngine.setValue(new Date,this.pv.name,1);else{const t=this.pv.value|1<<this.bit;this.display.pvEngine.setValue(new Date,this.pv.name,t)}}toggleOff(){if(this.manualToggleState=!1,this.pv&&this.pv.writable)if(this.bit<0)this.display.pvEngine.setValue(new Date,this.pv.name,0);else{const t=this.pv.value&~(1<<this.bit);this.display.pvEngine.setValue(new Date,this.pv.name,t)}}get booleanValue(){var t,e;return this.pv&&void 0!==this.pv.value?this.bit<0?Boolean(null===(t=this.pv)||void 0===t?void 0:t.toNumber()):((null===(e=this.pv)||void 0===e?void 0:e.value)>>this.bit&1)>0:this.manualToggleState}draw(t){t.addHitRegion(this.areaRegion).addRect(this.x,this.y,this.width,this.height);const e=this.booleanValue,{boxSize:s,gap:r,scale:o}=this;let n=this.backgroundColor;this.hovered&&(n=n.mixWith(Ni,.7));const h={x:this.x,y:this.y+this.height/2-s/2,width:s,height:s},a=t.createLinearGradient(h.x,h.y+1*o,h.x,h.y+h.height);a.addColorStop(0,i.WHITE.toString()),a.addColorStop(1,n.toString()),t.fillRect(Object.assign(Object.assign({},h),{rx:2*o,ry:2*o,gradient:a})),t.strokeRect({x:h.x+.5*o,y:h.y+.5*o,width:h.width-1*o,height:h.height-1*o,rx:2*o,ry:2*o,color:Hi}),e&&t.strokePath({lineWidth:3*o,color:this.selectedColor,path:new T(h.x+3*o,h.y+Math.floor(.45*s)).lineTo(h.x+Math.floor(.45*s),h.y+3*s/4-1*o).lineTo(h.x+s-2*o,h.y+3*o)}),this.enabled?t.fillText({x:h.x+h.width+r,y:h.y+h.height/2,align:"left",baseline:"middle",color:this.foregroundColor,font:this.font,text:this.label}):(t.fillText({x:h.x+h.width+r+1*o,y:h.y+h.height/2+1*o,align:"left",baseline:"middle",color:i.BUTTON_LIGHTEST,font:this.font,text:this.label}),t.fillText({x:h.x+h.width+r,y:h.y+h.height/2,align:"left",baseline:"middle",color:i.BUTTON_DARKER,font:this.font,text:this.label}))}get boxSize(){return 16*this.scale}get gap(){return 4*this.scale}get bit(){return this.properties.getValue("bit")}get enabled(){return this.properties.getValue(Wi)}get selectedColor(){return this.properties.getValue(Oi)}get font(){return this.properties.getValue(Bi).scale(this.scale)}get label(){return this.properties.getValue(Ii)}}const Di="enabled",$i="font",ji="horizontal",Gi="items",zi="items_from_pv",Ui="selected_color";class qi extends ie{constructor(t,e){super(t,e),this.itemRegions=[],this.properties.add(new k(Di)),this.properties.add(new R($i)),this.properties.add(new k(ji)),this.properties.add(new H(Gi,[])),this.properties.add(new k(zi)),this.properties.add(new M(Ui))}init(){for(let t=0;t<this.items.length;t++)this.itemRegions.push({id:`${this.wuid}-item-${t}`,cursor:"pointer",mouseDown:()=>{this.pushedItem=t,this.requestRepaint()},mouseOut:()=>{this.pushedItem=void 0,this.requestRepaint()},mouseUp:()=>{this.pushedItem=void 0,this.requestRepaint()},click:()=>{this.writeValue(this.items[t]),this.requestRepaint()},tooltip:()=>this.tooltip})}draw(t){this.horizontal?this.drawHorizontal(t):this.drawVertical(t)}drawHorizontal(t){const e=this.area.width/this.items.length;let i=this.area.x;for(let s=0;s<this.items.length;s++){const r={x:i,y:this.area.y,width:e,height:this.area.height};i+=e,this.drawButton(t,r,s)}}drawVertical(t){const e=this.area.height/this.items.length;let i=this.area.y;for(let s=0;s<this.items.length;s++){const r={x:Math.round(this.area.x),y:Math.round(i),width:Math.round(this.area.width),height:Math.round(e)};i+=e,this.drawButton(t,r,s)}}drawButton(t,e,s){var r;const o=(null===(r=this.pv)||void 0===r?void 0:r.value)===this.items[s],n=o||s===this.pushedItem;t.fillRect(Object.assign(Object.assign({},e),{color:o?this.selectedColor:this.backgroundColor}));t.addHitRegion(this.itemRegions[s]).addRect(e.x,e.y,e.width,e.height);const h=1*this.scale,a=e.y+h/2,l=e.x+h/2,d=e.y+e.height-h+h/2,c=e.x+e.width-h+h/2;t.strokePath({lineWidth:h,color:n?i.BUTTON_LIGHTEST:i.BLACK,path:new T(c,d).lineTo(c,a).moveTo(c,d).lineTo(l,d)}),t.strokePath({lineWidth:h,color:n?this.backgroundColor:i.BUTTON_DARKER,path:new T(c-h,d-h).lineTo(c-h,a+h).moveTo(c-h,d-h).lineTo(l+h,d-h)}),t.strokePath({lineWidth:h,color:n?i.BLACK:i.BUTTON_LIGHTEST,path:new T(l,a).lineTo(c-h,a).moveTo(l,a).lineTo(l,d-h)}),t.strokePath({lineWidth:h,color:n?i.BUTTON_DARKER:this.backgroundColor,path:new T(l+h,a+h).lineTo(c-h-h,a+h).moveTo(l+h,a+h).lineTo(l+h,d-h-h)}),t.fillText({x:e.x+e.width/2,y:e.y+e.height/2,text:this.items[s],align:"center",baseline:"middle",color:this.foregroundColor,font:this.font})}writeValue(t){this.pv&&this.pv.writable&&this.display.pvEngine.setValue(new Date,this.pv.name,t)}get enabled(){return this.properties.getValue(Di)}get font(){return this.properties.getValue($i).scale(this.scale)}get horizontal(){return this.properties.getValue(ji)}get items(){return this.properties.getValue(Gi)}get itemsFromPV(){return this.properties.getValue(zi)}get selectedColor(){return this.properties.getValue(Ui)}}const Yi="enabled",Xi="font",Ki="items",Zi="items_from_pv",Ji=new i(0,0,0,.1);class Qi extends ie{constructor(t,e){super(t,e),this.properties.add(new k(Yi)),this.properties.add(new R(Xi)),this.properties.add(new H(Ki,[])),this.properties.add(new k(Zi))}init(){this.areaRegion={id:`${this.wuid}-area`,tooltip:()=>this.tooltip},this.selectEl=document.createElement("select"),this.selectEl.style.display="block",this.selectEl.style.position="absolute",this.selectEl.style.boxSizing="border-box",this.selectEl.style.opacity="0",this.selectEl.addEventListener("change",(()=>{var t,e;this.writeValue(null!==(e=null===(t=this.selectEl)||void 0===t?void 0:t.value)&&void 0!==e?e:"")}));const t=document.createElement("option");t.disabled=!0,t.value="",t.defaultSelected=!0,t.text=" -- select an option -- ",this.selectEl.add(t);for(let t=0;t<this.items.length;t++){const e=document.createElement("option");e.value=this.items[t],e.text=this.items[t],this.selectEl.add(e)}this.display.rootPanel.appendChild(this.selectEl)}draw(t){var e,i;let s=this.display.measureAbsoluteArea(this);this.selectEl.style.display="block",this.selectEl.style.left=`${s.x}px`,this.selectEl.style.top=`${s.y}px`,this.selectEl.style.width=`${s.width}px`,this.selectEl.style.height=`${s.height}px`,s=c(this.bounds,2*this.scale),t.fillRect(Object.assign(Object.assign({},s),{color:this.backgroundColor})),t.strokeRect(Object.assign(Object.assign({},s),{color:Ji,crispen:!0}));t.addHitRegion(this.areaRegion).addRect(s.x,s.y,s.width,s.height),(null===(e=this.pv)||void 0===e?void 0:e.value)&&-1!==this.items.indexOf(this.pv.value)&&t.fillText({x:5*this.scale+s.x,y:s.y+s.height/2,align:"left",baseline:"middle",color:this.foregroundColor,font:this.font,text:null===(i=this.pv)||void 0===i?void 0:i.value});const{selectorWidth:r}=this,o=Math.min(s.height,r/2),n={x:s.x+s.width-r-5*this.scale+r/2,y:s.y+(s.height-o)/2+o};t.fillPath({color:this.foregroundColor,path:new T(n.x,n.y).lineTo(n.x-o,n.y-o).lineTo(n.x+o,n.y-o).closePath()})}writeValue(t){this.pv&&this.pv.writable&&this.display.pvEngine.setValue(new Date,this.pv.name,t)}hide(){this.selectEl&&(this.selectEl.style.display="none")}destroy(){this.selectEl&&(this.display.rootPanel.removeChild(this.selectEl),this.selectEl=void 0)}get selectorWidth(){return 8*this.scale}get enabled(){return this.properties.getValue(Yi)}get font(){return this.properties.getValue(Xi).scale(this.scale)}get items(){return this.properties.getValue(Ki)}get itemsFromPV(){return this.properties.getValue(Zi)}}const ts="data_type",es="effect_3d",is="font",ss="off_image",rs="off_label",os="off_state",ns="on_image",hs="on_label",as="on_state",ls="push_action_index",ds="released_action_index",cs="show_boolean_label",ps="toggle_button";class us extends ie{constructor(t,e){super(t,e),this.onImageLoaded=!1,this.offImageLoaded=!1,this.manualToggleState=!1,this.properties.add(new L("bit")),this.properties.add(new L(ts)),this.properties.add(new k(es)),this.properties.add(new C(ns)),this.properties.add(new C(hs)),this.properties.add(new C(as)),this.properties.add(new C(ss)),this.properties.add(new C(rs)),this.properties.add(new C(os)),this.properties.add(new R(is)),this.properties.add(new k(ps)),this.properties.add(new L(ls)),this.properties.add(new L(ds)),this.properties.add(new k(cs))}init(){this.onImageElement=new Image,this.onImageElement.onload=()=>{this.onImageLoaded=!0,this.requestRepaint()},this.offImageElement=new Image,this.offImageElement.onload=()=>{this.offImageLoaded=!0,this.requestRepaint()},this.onImage&&(this.onImageElement.src=this.resolvePath(this.onImage)),this.offImage&&(this.offImageElement.src=this.resolvePath(this.offImage)),this.areaRegion={id:`${this.wuid}-area`,mouseDown:()=>{this.toggleButton&&this.booleanValue?this.toggleOff():this.toggleOn(),this.requestRepaint()},mouseUp:()=>{this.booleanValue&&!this.toggleButton&&(this.toggleOff(),this.requestRepaint())},mouseOut:()=>{this.booleanValue&&!this.toggleButton&&(this.toggleOff(),this.requestRepaint())},tooltip:()=>this.tooltip,cursor:"pointer"}}toggleOn(){if(this.manualToggleState=!0,this.pv&&this.pv.writable)if(0===this.dataType)if(this.bit<0)this.display.pvEngine.setValue(new Date,this.pv.name,1);else{const t=this.pv.value|1<<this.bit;this.display.pvEngine.setValue(new Date,this.pv.name,t)}else this.display.pvEngine.setValue(new Date,this.pv.name,this.onState);this.executeAction(this.pushActionIndex)}toggleOff(){if(this.manualToggleState=!1,this.pv&&this.pv.writable)if(0===this.dataType)if(this.bit<0)this.display.pvEngine.setValue(new Date,this.pv.name,0);else{const t=this.pv.value&~(1<<this.bit);this.display.pvEngine.setValue(new Date,this.pv.name,t)}else this.display.pvEngine.setValue(new Date,this.pv.name,this.offState);void 0!==this.releaseActionIndex&&this.executeAction(this.releaseActionIndex)}get booleanValue(){var t,e;return this.pv&&void 0!==this.pv.value?0===this.dataType?this.bit<0?Boolean(null===(t=this.pv)||void 0===t?void 0:t.toNumber()):((null===(e=this.pv)||void 0===e?void 0:e.value)>>this.bit&1)>0:1===this.dataType&&this.pv.toString()===this.onState:this.manualToggleState}draw(t){let e=this.bounds;this.borderAlarmSensitive&&(e=c(e,2*this.scale,2*this.scale));const i=this.booleanValue;i?this.onImageLoaded&&t.ctx.drawImage(this.onImageElement,e.x,e.y,e.width,e.height):this.offImageLoaded&&t.ctx.drawImage(this.offImageElement,e.x,e.y,e.width,e.height);t.addHitRegion(this.areaRegion).addRect(e.x,e.y,e.width,e.height),this.showBooleanLabel&&t.fillText({x:this.x+this.width/2,y:this.y+this.height/2,font:this.font,color:this.foregroundColor,align:"center",baseline:"middle",text:i?this.onLabel:this.offLabel})}get bit(){return this.properties.getValue("bit")}get dataType(){return this.properties.getValue(ts)}get toggleButton(){return this.properties.getValue(ps)}get pushActionIndex(){return this.properties.getValue(ls)}get releaseActionIndex(){return this.properties.getValue(ds)}get showBooleanLabel(){return this.properties.getValue(cs)}get effect3d(){return this.properties.getValue(es)}get onImage(){return this.properties.getValue(ns)}get onLabel(){return this.properties.getValue(hs)}get onState(){return this.properties.getValue(as)}get offImage(){return this.properties.getValue(ss)}get offLabel(){return this.properties.getValue(rs)}get offState(){return this.properties.getValue(os)}get font(){return this.properties.getValue(is).scale(this.scale)}}const gs="font",ms="label";class fs extends ie{constructor(t,e){super(t,e),this.properties.add(new R(gs)),this.properties.add(new C(ms))}init(){var t,e;this.areaRegion={id:`${this.wuid}-area`,tooltip:()=>this.tooltip,cursor:"pointer"},this.selectEl=document.createElement("select"),this.selectEl.style.display="block",this.selectEl.style.position="absolute",this.selectEl.style.boxSizing="border-box",this.selectEl.style.opacity="0",this.selectEl.addEventListener("change",(t=>{var e;const i=null===(e=this.selectEl)||void 0===e?void 0:e.value;if(i){this.selectEl.selectedIndex=0;const t=Number(i.substring("action-".length));this.executeAction(t)}}));const i=document.createElement("option");i.disabled=!0,i.value="",i.defaultSelected=!0,i.text=" -- select an option -- ",this.selectEl.add(i);const s=this.actions.actions;for(let i=0;i<s.length;i++){const r=document.createElement("option");r.value=`action-${i}`,r.text=null!==(e=null===(t=s[i])||void 0===t?void 0:t.toString())&&void 0!==e?e:"",this.selectEl.add(r)}this.display.rootPanel.appendChild(this.selectEl)}draw(t){const e=this.display.measureAbsoluteArea(this);this.selectEl.style.display="block",this.selectEl.style.left=`${e.x}px`,this.selectEl.style.top=`${e.y}px`,this.selectEl.style.width=`${e.width}px`,this.selectEl.style.height=`${e.height}px`;const i=t.ctx;t.fillRect(Object.assign(Object.assign({},this.area),{color:this.backgroundColor}));t.addHitRegion(this.areaRegion).addRect(this.x,this.y,this.width,this.height);const s=this.label.split("\n");i.fillStyle=this.foregroundColor.toString(),i.font=this.font.getFontString(),i.textBaseline="middle",i.textAlign="center";let r=this.x+this.width/2,o=this.y+this.height/2;i.fillText(s[0],r,o)}hide(){this.selectEl&&(this.selectEl.style.display="none")}destroy(){this.selectEl&&(this.display.rootPanel.removeChild(this.selectEl),this.selectEl=void 0)}get font(){return this.properties.getValue(gs).scale(this.scale)}get backgroundColor(){const t=this.properties.getProperty("background_color");return t&&t.value!==i.TRANSPARENT?t.value:i.BUTTON}get label(){return this.properties.getValue(ms)}}class xs extends oi{}const ws="enabled",ys="font",vs="horizontal",bs="items",Ts="items_from_pv",Ss="selected_color",Vs=new i(120,120,120),As=new i(94,151,230);class Cs extends ie{constructor(t,e){super(t,e),this.itemRegions=[],this.properties.add(new k(ws)),this.properties.add(new R(ys)),this.properties.add(new k(vs)),this.properties.add(new H(bs,[])),this.properties.add(new k(Ts)),this.properties.add(new M(Ss))}init(){for(let t=0;t<this.items.length;t++)this.itemRegions.push({id:`${this.wuid}-item-${t}`,cursor:"pointer",click:()=>{this.writeValue(this.items[t]),this.requestRepaint()},mouseEnter:()=>{this.hoveredItem=t,this.requestRepaint()},mouseOut:()=>{this.hoveredItem=void 0,this.requestRepaint()},tooltip:()=>this.tooltip})}draw(t){this.horizontal?this.drawHorizontal(t):this.drawVertical(t)}drawHorizontal(t){const e=this.area.width/this.items.length;let i=this.area.x;for(let s=0;s<this.items.length;s++){const r={x:i,y:this.area.y,width:e,height:this.area.height};i+=e,this.drawRadio(t,r,s)}}drawVertical(t){const e=this.area.height/this.items.length;let i=this.area.y;for(let s=0;s<this.items.length;s++){const r={x:this.area.x,y:i,width:this.area.width,height:e};i+=e,this.drawRadio(t,r,s)}}drawRadio(t,e,s){var r;const{radioRadius:o,dotRadius:n,gap:h}=this;let a=this.backgroundColor;s===this.hoveredItem&&(a=a.mixWith(As,.7));const l=t.createLinearGradient(e.x,e.y,e.x+e.width,e.y+e.height);l.addColorStop(0,i.WHITE.toString()),l.addColorStop(1,a.toString()),t.fillEllipse({cx:e.x+o,cy:e.y+e.height/2,rx:o,ry:o,gradient:l});const d=1*this.scale;t.strokeEllipse({cx:e.x+o,cy:e.y+e.height/2,rx:o,ry:o,color:Vs,lineWidth:d}),(null===(r=this.pv)||void 0===r?void 0:r.value)===this.items[s]&&t.fillEllipse({cx:e.x+o,cy:e.y+e.height/2,rx:n+d/2,ry:n+d/2,color:this.selectedColor});t.addHitRegion(this.itemRegions[s]).addRect(e.x,e.y,e.width,e.height),t.fillText({x:e.x+o+o+h,y:e.y+e.height/2,text:this.items[s],align:"left",baseline:"middle",color:this.foregroundColor,font:this.font})}writeValue(t){this.pv&&this.pv.writable&&this.display.pvEngine.setValue(new Date,this.pv.name,t)}get radioRadius(){return 7*this.scale}get dotRadius(){return 2*this.scale}get gap(){return 4*this.scale}get enabled(){return this.properties.getValue(ws)}get font(){return this.properties.getValue(ys).scale(this.scale)}get horizontal(){return this.properties.getValue(vs)}get items(){return this.properties.getValue(bs)}get itemsFromPV(){return this.properties.getValue(Ts)}get selectedColor(){return this.properties.getValue(Ss)}}const _s="enabled",Ls="font",Ps="maximum",ks="minimum",Ms="horizontal",Rs="step_increment",Es="page_increment",Ws="bar_length",Bs="show_value_tip",Is=new i(243,243,243),Os=new i(232,232,231),Hs=150;class Ns extends ie{constructor(t,e){super(t,e),this.decreasePressed=!1,this.increasePressed=!1,this.pageDecreasePressed=!1,this.pageIncreasePressed=!1,this.properties.add(new k(_s)),this.properties.add(new k(Ms)),this.properties.add(new k(Bs)),this.properties.add(new R(Ls)),this.properties.add(new P(Ps)),this.properties.add(new P(ks)),this.properties.add(new P(Rs)),this.properties.add(new P(Es)),this.properties.add(new P(Ws))}init(){this.decreaseRegion={id:`${this.wuid}-decrease`,mouseDown:()=>{this.decreasePressed=!0,this.stepDecreaseRepeatedly()},mouseUp:()=>{window.clearTimeout(this.actionTimeout),this.decreasePressed=!1,this.requestRepaint()},mouseOut:()=>{window.clearTimeout(this.actionTimeout),this.decreasePressed=!1,this.requestRepaint()},tooltip:()=>this.tooltip},this.increaseRegion={id:`${this.wuid}-increase`,mouseDown:()=>{this.increasePressed=!0,this.stepIncreaseRepeatedly()},mouseUp:()=>{window.clearTimeout(this.actionTimeout),this.increasePressed=!1,this.requestRepaint()},mouseOut:()=>{window.clearTimeout(this.actionTimeout),this.increasePressed=!1,this.requestRepaint()},tooltip:()=>this.tooltip},this.thumbRegion={id:`${this.wuid}-thumb`,mouseDown:()=>{this.grabStartValue=this.getCoercedValue()},grab:t=>{const e=this.horizontal?t.dx:t.dy,i=(this.maximum-this.minimum)*e/this.dragRange;this.setCoercedValue(this.grabStartValue+i),this.requestRepaint()},tooltip:()=>this.tooltip},this.pageDecreaseRegion={id:`${this.wuid}-page-decrease`,mouseDown:()=>{this.pageDecreasePressed=!0,this.pageDecreaseRepeatedly()},mouseUp:()=>{window.clearTimeout(this.actionTimeout),this.pageDecreasePressed=!1,this.requestRepaint()},mouseOut:()=>{window.clearTimeout(this.actionTimeout),this.pageDecreasePressed=!1,this.requestRepaint()},tooltip:()=>this.tooltip},this.pageIncreaseRegion={id:`${this.wuid}-page-increase`,mouseDown:()=>{this.pageIncreasePressed=!0,this.pageIncreaseRepeatedly()},mouseUp:()=>{window.clearTimeout(this.actionTimeout),this.pageIncreasePressed=!1,this.requestRepaint()},mouseOut:()=>{window.clearTimeout(this.actionTimeout),this.pageIncreasePressed=!1,this.requestRepaint()},tooltip:()=>this.tooltip}}draw(t){this.horizontal?this.drawHorizontal(t):this.drawVertical(t)}drawHorizontal(t){const{scale:e}=this,s=c(this.bounds,2*e);t.fillRect(Object.assign(Object.assign({},s),{color:Is}));const r=Math.min(s.height,s.width/2);this.drawLeftButton(t,{x:s.x,y:s.y,width:r,height:s.height}),this.drawRightButton(t,{x:s.x+s.width-r,y:s.y,width:r,height:s.height});const o=this.barLength,n=this.maximum+o,h=this.minimum,a=n-h,l=a-o,d=s.width-r-r,p=Math.floor(Math.max(6*e,d*o/a));this.dragRange=d-p;const u=this.getCoercedValue(),g=Math.floor((d-p)*(u-h)/l),m=d-g-p,f={x:s.x+r+g,y:s.y,width:p,height:s.height};t.fillRect(Object.assign(Object.assign({},f),{color:Os})),this.drawRaisedButtonBorder(t,f);t.addHitRegion(this.thumbRegion).addRect(f.x,f.y,f.width,f.height);const x={x:s.x+r,y:s.y,width:g,height:s.height};t.addHitRegion(this.pageDecreaseRegion).addRect(x.x,x.y,x.width,x.height),this.pageDecreasePressed&&t.fillRect(Object.assign(Object.assign({},x),{color:i.BLACK}));const w={x:s.x+r+g+p,y:s.y,width:m,height:s.height};t.addHitRegion(this.pageIncreaseRegion).addRect(w.x,w.y,w.width,w.height),this.pageIncreasePressed&&t.fillRect(Object.assign(Object.assign({},w),{color:i.BLACK}))}drawVertical(t){const{scale:e}=this,s=c(this.bounds,e);t.fillRect(Object.assign(Object.assign({},s),{color:Is}));const r=Math.min(s.width,s.height/2);this.drawUpButton(t,{x:s.x,y:s.y,width:s.width,height:r}),this.drawDownButton(t,{x:s.x,y:s.y+s.height-r,width:s.width,height:r});const o=this.barLength,n=this.maximum+o,h=this.minimum,a=n-h,l=a-o,d=s.height-r-r,p=Math.floor(Math.max(6*e,d*o/a));this.dragRange=d-p;const u=this.getCoercedValue(),g=Math.floor((d-p)*(u-h)/l),m=d-g-p,f={x:s.x,y:s.y+r+g,width:s.width,height:p};t.fillRect(Object.assign(Object.assign({},f),{color:Os})),this.drawRaisedButtonBorder(t,f);t.addHitRegion(this.thumbRegion).addRect(f.x,f.y,f.width,f.height);const x={x:s.x,y:s.y+r,width:s.width,height:g};t.addHitRegion(this.pageDecreaseRegion).addRect(x.x,x.y,x.width,x.height),this.pageDecreasePressed&&t.fillRect(Object.assign(Object.assign({},x),{color:i.BLACK}));const w={x:s.x,y:s.y+r+g+p,width:s.width,height:m};t.addHitRegion(this.pageIncreaseRegion).addRect(w.x,w.y,w.width,w.height),this.pageIncreasePressed&&t.fillRect(Object.assign(Object.assign({},w),{color:i.BLACK}))}drawLeftButton(t,e){t.fillRect(Object.assign(Object.assign({},e),{color:Os})),this.decreasePressed?this.drawPressedButtonBorder(t,e):this.drawRaisedButtonBorder(t,e);t.addHitRegion(this.decreaseRegion).addRect(e.x,e.y,e.width,e.height);const s=c(e,3*this.scale);let r=Math.min(s.height/2,s.width);s.x+=(s.width-r)/2,r=Math.max(r,1);const o={x:s.x,y:s.y+s.height/2};t.fillPath({color:i.BLACK,path:new T(o.x,o.y).lineTo(o.x+r,o.y-r).lineTo(o.x+r,o.y+r).closePath()})}drawRightButton(t,e){t.fillRect(Object.assign(Object.assign({},e),{color:Os})),this.increasePressed?this.drawPressedButtonBorder(t,e):this.drawRaisedButtonBorder(t,e);t.addHitRegion(this.increaseRegion).addRect(e.x,e.y,e.width,e.height);const s=c(e,3*this.scale);let r=Math.min(s.height/2,s.width);s.x+=(s.width-r)/2,r=Math.max(r,1);const o={x:s.x+r,y:s.y+s.height/2};t.fillPath({color:i.BLACK,path:new T(o.x,o.y).lineTo(o.x-r,o.y-r).lineTo(o.x-r,o.y+r).closePath()})}drawUpButton(t,e){t.fillRect(Object.assign(Object.assign({},e),{color:Os})),this.decreasePressed?this.drawPressedButtonBorder(t,e):this.drawRaisedButtonBorder(t,e);t.addHitRegion(this.decreaseRegion).addRect(e.x,e.y,e.width,e.height);const s=c(e,3*this.scale);let r=Math.min(s.height,s.width/2);s.y+=(s.height-r)/2,r=Math.max(r,1);const o={x:s.x+s.width/2,y:s.y};t.fillPath({color:i.BLACK,path:new T(o.x,o.y).lineTo(o.x-r,o.y+r).lineTo(o.x+r,o.y+r).closePath()})}drawDownButton(t,e){t.fillRect(Object.assign(Object.assign({},e),{color:Os})),this.increasePressed?this.drawPressedButtonBorder(t,e):this.drawRaisedButtonBorder(t,e);t.addHitRegion(this.increaseRegion).addRect(e.x,e.y,e.width,e.height);const s=c(e,3*this.scale);let r=Math.min(s.height,s.width/2);s.y+=(s.height-r)/2,r=Math.max(r,1);const o={x:s.x+s.width/2,y:s.y+r};t.fillPath({color:i.BLACK,path:new T(o.x,o.y).lineTo(o.x-r,o.y-r).lineTo(o.x+r,o.y-r).closePath()})}drawRaisedButtonBorder(t,e){this.drawButtonBorder(t,e,i.BUTTON_DARKEST,i.BUTTON_DARKER,i.BUTTON,i.BUTTON_LIGHTEST)}drawPressedButtonBorder(t,e){this.drawButtonBorder(t,e,i.BUTTON_LIGHTEST,i.BUTTON_LIGHTEST,i.BUTTON_DARKEST,i.BUTTON_DARKER)}drawButtonBorder(t,e,i,s,r,o){const n=1*this.scale,h=e.y+n/2,a=e.x+n/2,l=e.y+e.height-n+n/2,d=e.x+e.width-n+n/2;t.strokePath({color:i,path:new T(d,l).lineTo(d,h).moveTo(d,l).lineTo(a,l)}),t.strokePath({color:s,path:new T(d-n,l-n).lineTo(d-n,h+n).moveTo(d-n,l-n).lineTo(a+n,l-n)}),t.strokePath({color:r,path:new T(a,h).lineTo(d-n,h).moveTo(a,h).lineTo(a,l-n)}),t.strokePath({color:o,path:new T(a+n,h+n).lineTo(d-n-n,h+n).moveTo(a+n,h+n).lineTo(a+n,l-n-n)})}stepIncreaseRepeatedly(){window.clearTimeout(this.actionTimeout),this.stepIncrease(),this.requestRepaint(),this.actionTimeout=window.setTimeout((()=>this.stepIncreaseRepeatedly()),Hs)}stepDecreaseRepeatedly(){window.clearTimeout(this.actionTimeout),this.stepDecrease(),this.requestRepaint(),this.actionTimeout=window.setTimeout((()=>this.stepDecreaseRepeatedly()),Hs)}stepIncrease(){var t,e;const i=null!==(e=null===(t=this.pv)||void 0===t?void 0:t.value)&&void 0!==e?e:(this.maximum-this.minimum)/2;this.setCoercedValue(i+this.stepIncrement)}stepDecrease(){var t,e;const i=null!==(e=null===(t=this.pv)||void 0===t?void 0:t.value)&&void 0!==e?e:(this.maximum-this.minimum)/2;this.setCoercedValue(i-this.stepIncrement)}pageIncreaseRepeatedly(){window.clearTimeout(this.actionTimeout),this.pageIncrease(),this.requestRepaint(),this.actionTimeout=window.setTimeout((()=>this.pageIncreaseRepeatedly()),Hs)}pageDecreaseRepeatedly(){window.clearTimeout(this.actionTimeout),this.pageDecrease(),this.requestRepaint(),this.actionTimeout=window.setTimeout((()=>this.pageDecreaseRepeatedly()),Hs)}pageIncrease(){var t,e;const i=null!==(e=null===(t=this.pv)||void 0===t?void 0:t.value)&&void 0!==e?e:(this.maximum-this.minimum)/2;this.setCoercedValue(i+this.pageIncrement)}pageDecrease(){var t,e;const i=null!==(e=null===(t=this.pv)||void 0===t?void 0:t.value)&&void 0!==e?e:(this.maximum-this.minimum)/2;this.setCoercedValue(i-this.pageIncrement)}setCoercedValue(t){this.pv&&this.pv.writable&&(t=t<this.minimum?this.minimum:t>this.maximum?this.maximum:t,this.display.pvEngine.setValue(new Date,this.pv.name,t))}getCoercedValue(){var t,e;const i=null!==(e=null===(t=this.pv)||void 0===t?void 0:t.value)&&void 0!==e?e:(this.maximum-this.minimum)/2;return i<this.minimum?this.minimum:i>this.maximum?this.maximum:i}destroy(){window.clearTimeout(this.actionTimeout)}get enabled(){return this.properties.getValue(_s)}get horizontal(){return this.properties.getValue(Ms)}get showValueTip(){return this.properties.getValue(Bs)}get font(){return this.properties.getValue(Ls).scale(this.scale)}get minimum(){return this.properties.getValue(ks)}get maximum(){return this.properties.getValue(Ps)}get stepIncrement(){return this.properties.getValue(Rs)}get pageIncrement(){return this.properties.getValue(Es)}get barLength(){return this.properties.getValue(Ws)}}const Fs="confirm_message",Ds="font",$s="format_type",js="horizontal_alignment",Gs="multiline_input",zs="password_input",Us="precision",qs="precision_from_pv",Ys="vertical_alignment";class Xs extends ie{constructor(t,e){super(t,e),this.editing=!1,this.properties.add(new C(Fs)),this.properties.add(new R(Ds)),this.properties.add(new L($s)),this.properties.add(new L(js)),this.properties.add(new k(Gs)),this.properties.add(new k(zs,!1)),this.properties.add(new L(Us)),this.properties.add(new k(qs)),this.properties.add(new L(Ys,1))}init(){this.text&&(this.value=this.text),this.areaRegion={id:`${this.wuid}-area`,click:()=>{var t,e,i;if(this.pv&&!this.pv.writable)return;this.editing=!0;const s=this.display.measureAbsoluteArea(this);if(s.x-=2*this.scale,s.y-=2*this.scale,s.width+=2*this.scale,s.height+=2*this.scale,this.inputEl.value=null!==(i=null!==(e=null===(t=this.pv)||void 0===t?void 0:t.value)&&void 0!==e?e:this.value)&&void 0!==i?i:"",this.inputEl.style.display="block",this.inputEl.style.position="absolute",this.inputEl.style.boxSizing="border-box",this.inputEl.style.left=`${s.x}px`,this.inputEl.style.top=`${s.y}px`,this.inputEl.style.width=`${s.width}px`,this.inputEl.style.height=`${s.height}px`,this.inputEl.autocomplete="off",this.multilineInput){this.inputEl.style.resize="none"}else{const t=this.inputEl;this.passwordInput&&(t.type="password")}this.inputEl.focus(),this.inputEl.select()},tooltip:()=>this.tooltip,cursor:"text"},this.inputEl=document.createElement(this.multilineInput?"textarea":"input"),this.inputEl.style.display="none",this.inputEl.addEventListener("keyup",(t=>{var e;if("Enter"===t.key){if(!this.multilineInput||t.ctrlKey){const t=(null===(e=this.inputEl)||void 0===e?void 0:e.value)||"";!this.confirmMessage||confirm(this.confirmMessage)?(this.value=t,this.pv&&this.display.pvEngine.setValue(new Date,this.pv.name,t),this.inputEl.style.display="none",this.editing=!1,this.requestRepaint()):this.cancelInput()}}else"Escape"===t.key&&this.cancelInput()})),this.inputEl.addEventListener("blur",(t=>{this.cancelInput()})),this.display.rootPanel.appendChild(this.inputEl)}cancelInput(){this.inputEl.style.display="none",this.editing=!1,this.requestRepaint()}draw(t){if(this.editing)return;t.addHitRegion(this.areaRegion).addRect(this.x,this.y,this.width,this.height);const e=t.ctx;this.transparent?this.backgroundAlarmSensitive&&this.alarm&&t.fillRect(Object.assign(Object.assign({},this.area),{color:this.alarmSensitiveBackgroundColor})):t.fillRect(Object.assign(Object.assign({},this.area),{color:this.backgroundColor}));const i=document.createElement("canvas");i.width=this.area.width,i.height=this.area.height;const s=i.getContext("2d");s.fillStyle=this.alarmSensitiveForegroundColor.toString(),s.font=this.font.getFontString();let r=this.x;0===this.horizAlignment?s.textAlign="start":1===this.horizAlignment?(r+=this.width/2,s.textAlign="center"):2===this.horizAlignment&&(r+=this.width,s.textAlign="end");let o=this.y;0===this.vertAlignment?s.textBaseline="top":1===this.vertAlignment?(o+=this.height/2,s.textBaseline="middle"):2===this.vertAlignment&&(o+=this.height,s.textBaseline="bottom");let n=this.text;if(this.pv&&void 0!==this.pv.value){const t=this.precisionFromPV?this.pv.precision:this.precision;n=this.pv.formatValue(this.formatType,t)}s.fillText(n,r-this.area.x,o-this.area.y),e.drawImage(i,this.area.x,this.area.y)}hide(){this.editing=!1,this.inputEl&&(this.inputEl.style.display="none")}destroy(){this.inputEl&&(this.display.rootPanel.removeChild(this.inputEl),this.inputEl=void 0)}get value(){return this.text}set value(t){this.properties.setValue("text",t),this.requestRepaint()}get confirmMessage(){return this.properties.getValue(Fs)}get font(){return this.properties.getValue(Ds).scale(this.scale)}get formatType(){return this.properties.getValue($s)}get horizAlignment(){return this.properties.getValue(js)}get multilineInput(){return this.properties.getValue(Gs)}get passwordInput(){return this.properties.getValue(zs)}get precision(){return this.properties.getValue(Us)}get precisionFromPV(){return this.properties.getValue(qs)}get vertAlignment(){return this.properties.getValue(Ys)}}const Ks="alpha",Zs="fill",Js="line_width",Qs="line_style",tr="start_angle",er="total_angle";class ir extends ie{constructor(t,e){super(t,e),this.properties.add(new L(Ks,255)),this.properties.add(new L(Js)),this.properties.add(new L(tr)),this.properties.add(new L(er)),this.properties.add(new k(Zs)),this.properties.add(new L(Qs))}draw(t){t.ctx.globalAlpha=this.alpha/255,this.drawShape(t),t.ctx.globalAlpha=1}drawShape(t){const e=this.x+this.width/2,i=this.y+this.height/2,s=this.width/2,r=this.height/2,o=-m(this.startAngle),n=-m(this.totalAngle+this.startAngle);if(this.fill&&(t.ctx.fillStyle=this.alarmSensitiveBackgroundColor.toString(),t.ctx.beginPath(),t.ctx.moveTo(e,i),t.ctx.ellipse(e,i,s,r,0,o,n,!0),t.ctx.closePath(),t.ctx.fill()),this.lineWidth&&0!==this.totalAngle){let h;const{scale:a}=this;0===this.lineStyle?h=[]:1===this.lineStyle?h=[6*a,2*a]:2===this.lineStyle?h=[2*a,2*a]:console.warn(`Unsupported arc line style ${this.lineStyle}`),t.strokeEllipse({cx:e,cy:i,rx:s,ry:r,startAngle:o,endAngle:n,lineWidth:this.lineWidth,anticlockwise:!0,color:this.alarmSensitiveForegroundColor,dash:h})}}get alpha(){return this.properties.getValue(Ks)}get lineWidth(){return this.scale*this.properties.getValue(Js)}get lineStyle(){return this.properties.getValue(Qs)}get startAngle(){return this.properties.getValue(tr)}get totalAngle(){return this.properties.getValue(er)}get fill(){return this.properties.getValue(Zs)}}const sr="alpha",rr="bg_gradient_color",or="fg_gradient_color",nr="fill_level",hr="gradient",ar="horizontal_fill",lr="line_color",dr="line_width",cr="line_style";class pr extends ie{constructor(t,e){super(t,e),this.properties.add(new L(sr,255)),this.properties.add(new M(rr)),this.properties.add(new M(or)),this.properties.add(new k(hr)),this.properties.add(new L(dr)),this.properties.add(new P(nr)),this.properties.add(new k(ar)),this.properties.add(new M(lr)),this.properties.add(new L(cr))}draw(t){t.ctx.globalAlpha=this.alpha/255,this.drawBackground(t),this.fillLevel&&this.drawFill(t),t.ctx.globalAlpha=1}drawBackground(t){const e=this.x+this.width/2,i=this.y+this.height/2,s=this.width/2,r=this.height/2;if(!this.transparent){const o=this.alarmSensitiveBackgroundColor;if(this.gradient){const n=this.horizontalFill?this.x:this.x+this.width,h=this.horizontalFill?this.y+this.height:this.y,a=t.createLinearGradient(this.x,this.y,n,h);a.addColorStop(0,this.backgroundGradientStartColor.toString()),a.addColorStop(1,o.toString()),t.fillEllipse({cx:e,cy:i,rx:s,ry:r,gradient:a})}else t.fillEllipse({cx:e,cy:i,rx:s,ry:r,color:o})}this.lineWidth&&(0===this.lineStyle?t.strokeEllipse({cx:e,cy:i,rx:s,ry:r,color:this.lineColor,lineWidth:this.lineWidth}):1===this.lineStyle?t.strokeEllipse({cx:e,cy:i,rx:s,ry:r,color:this.lineColor,lineWidth:this.lineWidth,dash:[6*this.scale,2*this.scale]}):console.warn(`Unsupported ellipse line style ${this.lineStyle}`))}drawFill(t){const e=c(this,this.lineWidth);if(t.ctx.save(),this.horizontalFill){const i=e.width*(this.fillLevel/100);t.ctx.beginPath(),t.ctx.rect(e.x,e.y,i,e.height)}else{const i=e.height*(this.fillLevel/100),s=e.y+e.height-i;t.ctx.beginPath(),t.ctx.rect(e.x,s,e.width,e.height)}t.ctx.clip();const i=this.x+this.width/2,s=this.y+this.height/2,r=(this.width-this.lineWidth)/2,o=(this.height-this.lineWidth)/2,n=this.alarmSensitiveForegroundColor;if(this.gradient){const e=this.horizontalFill?this.x:this.x+this.width,h=this.horizontalFill?this.y+this.height:this.y,a=t.createLinearGradient(this.x,this.y,e,h);a.addColorStop(0,this.foregroundGradientStartColor.toString()),a.addColorStop(1,n.toString()),t.fillEllipse({cx:i,cy:s,rx:r,ry:o,gradient:a})}else t.fillEllipse({cx:i,cy:s,rx:r,ry:o,color:n});t.ctx.restore()}get alpha(){return this.properties.getValue(sr)}get lineWidth(){return this.scale*this.properties.getValue(dr)}get fillLevel(){return this.properties.getValue(nr)}get horizontalFill(){return this.properties.getValue(ar)}get lineColor(){return this.properties.getValue(lr)}get lineStyle(){return this.properties.getValue(cr)}get gradient(){return this.properties.getValue(hr)}get backgroundGradientStartColor(){return this.properties.getValue(rr)}get foregroundGradientStartColor(){return this.properties.getValue(or)}}const ur="image_file",gr="no_animation",mr="transparency";class fr extends ie{constructor(t,e){super(t,e),this.imageLoading=!1,this.imageLoaded=!1,this.properties.add(new C(ur)),this.properties.add(new C(gr)),this.properties.add(new k(mr,!0))}init(){this.imageElement=new Image(this.width,this.height),this.imageElement.onload=()=>{this.snapshotImage(this.imageElement),this.imageLoading=!1,this.imageLoaded=!0,this.requestRepaint()},this.triggerImageLoad()}draw(t){this.imageFile&&this.currentImageFile!==this.imageFile&&this.triggerImageLoad(),this.transparency||(t.ctx.fillStyle=this.backgroundColor.toString(),t.ctx.fillRect(this.x,this.y,this.width,this.height)),this.imageLoading&&this.imageSnapshot?t.ctx.drawImage(this.imageSnapshot,this.x,this.y,this.width,this.height):this.imageLoaded&&(this.noAnimation?t.ctx.drawImage(this.imageSnapshot,this.x,this.y,this.width,this.height):t.ctx.drawImage(this.imageElement,this.x,this.y,this.width,this.height))}triggerImageLoad(){this.imageLoading=!0,this.imageLoaded=!1,this.imageElement&&this.imageFile&&(this.currentImageFile=this.imageFile,this.imageElement.src=this.resolvePath(this.imageFile))}snapshotImage(t){const e=document.createElement("canvas"),i=e.getContext("2d");e.width=t.naturalWidth,e.height=t.naturalHeight,i.drawImage(t,0,0),this.imageSnapshot=e}get transparency(){return this.properties.getValue(mr)}get imageFile(){return this.properties.getValue(ur)}get noAnimation(){return this.properties.getValue(gr)}}const xr="font",wr="horizontal_alignment",yr="vertical_alignment",vr="wrap_words";class br extends ie{constructor(t,e){super(t,e),this.properties.add(new R(xr)),this.properties.add(new L(wr)),this.properties.add(new L(yr)),this.properties.add(new k(vr))}draw(t){const e=t.ctx;this.transparent||t.fillRect({x:this.x,y:this.y,width:this.width,height:this.height,color:this.backgroundColor});const i=this.wrapText(t,this.text,this.width);e.fillStyle=this.foregroundColor.toString(),e.font=this.font.getFontString(),e.textAlign="start",e.textBaseline="top";let s=0;for(const t of i){const i=e.measureText(t).width;s=Math.max(s,i)}let r=this.x;1===this.horizAlignment?r=this.x+(this.width-s)/2:2===this.horizAlignment&&(r=this.x+(this.width-s));const o=i.length*this.font.height+(i.length-1)*this.font.height*.2;let n=this.y;1===this.vertAlignment?n+=(this.height-o)/2:2===this.vertAlignment&&(n+=this.height-o);for(const t of i)e.fillText(t,r,n),n+=1.2*this.font.height}wrapText(t,e,i){let s=[];for(const r of e.split("\n"))s=s.concat(this.wrapLine(t,r,i));return s}wrapLine(t,e,i){if(!e)return[""];const s=[];let r,o,n,h=0;for(;e.length;){for(o=e.length;t.measureText(e.substr(0,o),this.font).width>i;o--);if(r=e.substr(0,o),o!==e.length)for(n=0;-1!==r.indexOf(" ",n);n=r.indexOf(" ",n)+1);s.push(r.substr(0,n||r.length)),h=Math.max(h,t.measureText(s[s.length-1],this.font).width),e=e.substr(s[s.length-1].length,e.length)}return s}get font(){return this.properties.getValue(xr).scale(this.scale)}get horizAlignment(){return this.properties.getValue(wr)}get vertAlignment(){return this.properties.getValue(yr)}get wrapWords(){return this.properties.getValue(vr)}}const Tr="alpha",Sr="fill_level",Vr="horizontal_fill",Ar="line_color",Cr="line_style",_r="line_width",Lr="points";class Pr extends ie{constructor(t,e){super(t,e),this.properties.add(new L(Tr,255)),this.properties.add(new L(_r)),this.properties.add(new P(Sr)),this.properties.add(new k(Vr)),this.properties.add(new M(Ar)),this.properties.add(new L(Cr)),this.properties.add(new W(Lr,[]))}init(){this.addPropertyListener("x",((t,e)=>{const i=g(this.properties.getValue(Lr),t-e,0);this.properties.setValue(Lr,i),this.requestRepaint()})),this.addPropertyListener("y",((t,e)=>{const i=g(this.properties.getValue(Lr),0,t-e);this.properties.setValue(Lr,i),this.requestRepaint()}))}draw(t){const{scale:e}=this;t.ctx.globalAlpha=this.alpha/255;const i=T.fromPoints(this.points).closePath();if(!this.transparent){const e=this.alarmSensitiveBackgroundColor;t.fillPath({path:i,color:e})}this.lineWidth&&(0===this.lineStyle?t.strokePath({path:i,lineWidth:this.lineWidth,color:this.lineColor}):2===this.lineStyle?t.strokePath({path:i,lineWidth:this.lineWidth,color:this.lineColor,dash:[6*e,2*e]}):console.warn(`Unsupported polygon line style ${this.lineStyle}`)),this.fillLevel&&this.drawFill(t,i),t.ctx.globalAlpha=1}drawFill(t,e){let i=this.y,s=this.width,r=this.height;this.horizontalFill?s*=this.fillLevel/100:(r*=this.fillLevel/100,i+=r),t.ctx.save();let o=this.x-this.lineWidth/2,n=i-this.lineWidth/2,h=s+this.lineWidth,a=r+this.lineWidth;t.ctx.beginPath(),t.ctx.rect(o,n,h,a),t.ctx.clip();const l=this.alarmSensitiveForegroundColor;t.fillPath({path:e,color:l}),t.ctx.restore()}get alpha(){return this.properties.getValue(Tr)}get lineWidth(){return this.scale*this.properties.getValue(_r)}get fillLevel(){return this.properties.getValue(Sr)}get horizontalFill(){return this.properties.getValue(Vr)}get lineColor(){return this.properties.getValue(Ar)}get lineStyle(){return this.properties.getValue(Cr)}get points(){return y(this.properties.getValue(Lr),this.scale)}}const kr="alpha",Mr="arrows",Rr="arrow_length",Er="fill_arrow",Wr="fill_level",Br="horizontal_fill",Ir="line_width",Or="points";class Hr extends ie{constructor(t,e){super(t,e),this.properties.add(new L(kr,255)),this.properties.add(new L(Ir)),this.properties.add(new P(Wr)),this.properties.add(new k(Br)),this.properties.add(new W(Or,[])),this.properties.add(new L(Rr)),this.properties.add(new k(Er)),this.properties.add(new L(Mr))}draw(t){const e=t.ctx;e.globalAlpha=this.alpha/255,this.transparent&&(e.globalAlpha=0),this.drawShape(e,this.backgroundColor),this.fillLevel&&this.drawFill(e),e.globalAlpha=1}drawFill(t){let e=this.y,i=this.width,s=this.height;this.horizontalFill?i*=this.fillLevel/100:(s*=this.fillLevel/100,e+=s),t.save();let r=this.x-this.lineWidth/2,o=e-this.lineWidth/2,n=i+this.lineWidth,h=s+this.lineWidth;t.beginPath(),t.rect(r,o,n,h),t.clip(),this.drawShape(t,this.foregroundColor),t.restore()}drawShape(t,e){t.strokeStyle=e.toString(),t.lineWidth=this.lineWidth,t.beginPath();for(let e=0;e<this.points.length;e++)0===e?t.moveTo(this.points[e].x,this.points[e].y):t.lineTo(this.points[e].x,this.points[e].y);if(t.stroke(),this.points.length>=2){const i=this.points[0],s=this.points[this.points.length-1];if(2===this.arrows||3===this.arrows){const i=this.calculateArrowPoints(this.points[this.points.length-2],s);if(i[2]=s,this.fillArrow){t.fillStyle=e.toString(),t.beginPath();for(let e=0;e<i.length;e++)0===e?t.moveTo(i[e].x,i[e].y):t.lineTo(i[e].x,i[e].y);t.fill()}else t.strokeStyle=e.toString(),t.lineWidth=this.lineWidth,t.beginPath(),t.moveTo(s.x,s.y),t.lineTo(i[0].x,i[0].y),t.moveTo(s.x,s.y),t.lineTo(i[1].x,i[1].y),t.stroke()}if(1===this.arrows||3===this.arrows){const s=this.calculateArrowPoints(this.points[1],i);if(s[2]=i,this.fillArrow){t.fillStyle=e.toString(),t.beginPath();for(let e=0;e<s.length;e++)0===e?t.moveTo(s[e].x,s[e].y):t.lineTo(s[e].x,s[e].y);t.fill()}else t.strokeStyle=e.toString(),t.lineWidth=this.lineWidth,t.beginPath(),t.moveTo(i.x,i.y),t.lineTo(s[0].x,s[0].y),t.moveTo(i.x,i.y),t.lineTo(s[1].x,s[1].y),t.stroke()}}}calculateArrowPoints(t,e){const i=x(e,t),s=Math.PI/10,r=new w(this.arrowLength,i.theta-s),o=new w(this.arrowLength,i.theta+s),n=new w(Math.floor(this.arrowLength*Math.cos(s)),i.theta);return[u(r.toPoint(),e.x,e.y),u(o.toPoint(),e.x,e.y),u(n.toPoint(),e.x,e.y)]}get alpha(){return this.properties.getValue(kr)}get lineWidth(){return this.scale*this.properties.getValue(Ir)}get fillLevel(){return this.properties.getValue(Wr)}get horizontalFill(){return this.properties.getValue(Br)}get points(){return y(this.properties.getValue(Or),this.scale)}get arrows(){return this.properties.getValue(Mr)}get fillArrow(){return this.properties.getValue(Er)}get arrowLength(){return this.properties.getValue(Rr)}}const Nr="alpha",Fr="bg_gradient_color",Dr="fg_gradient_color",$r="fill_level",jr="gradient",Gr="horizontal_fill",zr="line_color",Ur="line_width",qr="line_style";class Yr extends ie{constructor(t,e){super(t,e),this.fillRoundRectangleBackgroundBorder=!1,this.properties.add(new L(Nr,255)),this.properties.add(new M(Fr)),this.properties.add(new M(Dr)),this.properties.add(new k(jr)),this.properties.add(new L(Ur)),this.properties.add(new P($r)),this.properties.add(new k(Gr)),this.properties.add(new M(zr)),this.properties.add(new L(qr))}draw(t){t.ctx.globalAlpha=this.alpha/255,this.drawBackground(t),this.fillLevel&&this.drawFill(t),t.ctx.globalAlpha=1}drawBackground(t){if(!this.transparent){const e=this.alarmSensitiveBackgroundColor;if(this.gradient){const i=this.horizontalFill?this.x:this.x+this.width,s=this.horizontalFill?this.y+this.height:this.y,r=t.createLinearGradient(this.x,this.y,i,s);r.addColorStop(0,this.backgroundGradientStartColor.toString()),r.addColorStop(1,e.toString()),t.fillRect(Object.assign(Object.assign({},this.area),{gradient:r}))}else t.fillRect(Object.assign(Object.assign({},this.area),{color:e}))}this.lineWidth&&(0===this.lineStyle?t.strokeRect(Object.assign(Object.assign({},this.area),{color:this.lineColor,lineWidth:this.lineWidth,crispen:!0})):1===this.lineStyle?t.strokeRect(Object.assign(Object.assign({},this.area),{color:this.lineColor,lineWidth:this.lineWidth,crispen:!0,dash:[6*this.scale,2*this.scale]})):console.warn(`Unsupported rectangle line style ${this.lineStyle}`))}drawFill(t){const e=c(this,this.lineWidth);if(t.ctx.save(),this.horizontalFill){const i=e.width*(this.fillLevel/100);t.ctx.beginPath(),t.ctx.rect(e.x,e.y,i,e.height)}else{const i=e.height*(this.fillLevel/100),s=e.y+e.height-i;t.ctx.beginPath(),t.ctx.rect(e.x,s,e.width,e.height)}t.ctx.clip();const i=this.alarmSensitiveForegroundColor;if(this.gradient){const s=this.horizontalFill?e.x:e.x+e.width,r=this.horizontalFill?e.y+e.height:e.y,o=t.createLinearGradient(e.x,e.y,s,r);o.addColorStop(0,this.foregroundGradientStartColor.toString()),o.addColorStop(1,i.toString()),t.fillRect(Object.assign(Object.assign({},e),{gradient:o}))}else t.fillRect(Object.assign(Object.assign({},e),{color:i}));t.ctx.restore()}get alpha(){return this.properties.getValue(Nr)}get lineWidth(){return this.scale*this.properties.getValue(Ur)}get fillLevel(){return this.properties.getValue($r)}get horizontalFill(){return this.properties.getValue(Gr)}get lineColor(){return this.properties.getValue(zr)}get lineStyle(){return this.properties.getValue(qr)}get gradient(){return this.properties.getValue(jr)}get backgroundGradientStartColor(){return this.properties.getValue(Fr)}get foregroundGradientStartColor(){return this.properties.getValue(Dr)}}const Xr="alpha",Kr="bg_gradient_color",Zr="corner_width",Jr="corner_height",Qr="fg_gradient_color",to="fill_level",eo="gradient",io="horizontal_fill",so="line_color",ro="line_width",oo="line_style";class no extends ie{constructor(t,e){super(t,e),this.fillRoundRectangleBackgroundBorder=!1,this.properties.add(new L(Xr,255)),this.properties.add(new M(Kr)),this.properties.add(new M(Qr)),this.properties.add(new k(eo)),this.properties.add(new L(ro)),this.properties.add(new P(to)),this.properties.add(new k(io)),this.properties.add(new M(so)),this.properties.add(new L(Zr)),this.properties.add(new L(Jr)),this.properties.add(new L(oo))}draw(t){t.ctx.globalAlpha=this.alpha/255,this.drawBackground(t),this.fillLevel&&this.drawFill(t),t.ctx.globalAlpha=1}drawBackground(t){if(!this.transparent){const e=this.alarmSensitiveBackgroundColor;if(this.gradient){const i=this.horizontalFill?this.x:this.x+this.width,s=this.horizontalFill?this.y+this.height:this.y,r=t.createLinearGradient(this.x,this.y,i,s);r.addColorStop(0,this.backgroundGradientStartColor.toString()),r.addColorStop(1,e.toString()),t.fillRect(Object.assign(Object.assign({},this.area),{rx:this.cornerWidth/2,ry:this.cornerHeight/2,gradient:r}))}else t.fillRect(Object.assign(Object.assign({},this.area),{rx:this.cornerWidth/2,ry:this.cornerHeight/2,color:e}))}this.lineWidth&&(0===this.lineStyle?t.strokeRect(Object.assign(Object.assign({},this.area),{rx:this.cornerWidth/2,ry:this.cornerHeight/2,color:this.lineColor,lineWidth:this.lineWidth,crispen:!0})):1===this.lineStyle?t.strokeRect(Object.assign(Object.assign({},this.area),{rx:this.cornerWidth/2,ry:this.cornerHeight/2,color:this.lineColor,lineWidth:this.lineWidth,crispen:!0,dash:[6*this.scale,2*this.scale]})):console.warn(`Unsupported RoundedRectangle line style ${this.lineStyle}`))}drawFill(t){const e=this.cornerWidth/2,i=this.cornerHeight/2,s=c(this,this.lineWidth);if(t.ctx.save(),this.horizontalFill){const e=s.width*(this.fillLevel/100);t.ctx.beginPath(),t.ctx.rect(s.x,s.y,e,s.height)}else{const e=s.height*(this.fillLevel/100),i=s.y+s.height-e;t.ctx.beginPath(),t.ctx.rect(s.x,i,s.width,s.height)}t.ctx.clip();const r=this.alarmSensitiveForegroundColor;if(this.gradient){const o=this.horizontalFill?s.x:s.x+s.width,n=this.horizontalFill?s.y+s.height:s.y,h=t.createLinearGradient(s.x,s.y,o,n);h.addColorStop(0,this.foregroundGradientStartColor.toString()),h.addColorStop(1,r.toString()),t.fillRect(Object.assign(Object.assign({},s),{rx:e,ry:i,gradient:h}))}else t.fillRect(Object.assign(Object.assign({},s),{rx:e,ry:i,color:r}));t.ctx.restore()}get alpha(){return this.properties.getValue(Xr)}get lineWidth(){return this.scale*this.properties.getValue(ro)}get fillLevel(){return this.properties.getValue(to)}get horizontalFill(){return this.properties.getValue(io)}get lineColor(){return this.properties.getValue(so)}get lineStyle(){return this.properties.getValue(oo)}get gradient(){return this.properties.getValue(eo)}get cornerWidth(){return this.scale*this.properties.getValue(Zr)}get cornerHeight(){return this.scale*this.properties.getValue(Jr)}get backgroundGradientStartColor(){return this.properties.getValue(Kr)}get foregroundGradientStartColor(){return this.properties.getValue(Qr)}}const ho="bitReverse",ao="effect_3d",lo="horizontal",co="led_border",po="led_border_color",uo="led_packed",go="numBits",mo="off_color",fo="on_color",xo="startBit",wo="square_led";class yo extends ie{constructor(t,e){super(t,e),this.properties.add(new k(ho)),this.properties.add(new k(ao)),this.properties.add(new k(lo)),this.properties.add(new L(go)),this.properties.add(new M(mo)),this.properties.add(new M(fo)),this.properties.add(new L(xo)),this.properties.add(new k(wo)),this.properties.add(new L(co,3)),this.properties.add(new M(po,i.DARK_GRAY)),this.properties.add(new k(uo,!1))}getLedColor(t){var e,i;let s=!1;if(void 0!==(null===(e=this.pv)||void 0===e?void 0:e.value))for(let e=this.startBit;e<this.startBit+this.numBits;e++){let r=0;if(r=this.bitReverse?e-this.startBit:this.numBits-1-(e-this.startBit),r===t){s=((null===(i=this.pv)||void 0===i?void 0:i.value)>>e&1)>0;break}}return s?this.onColor:this.offColor}draw(t){if(this.numBits<1)return;let e=this.bounds;this.borderAlarmSensitive&&(e=c(e,2*this.scale)),this.horizontal?this.drawHorizontal(t,e):this.drawVertical(t,e)}drawHorizontal(t,e){let i,s;this.ledPacked?(i=Math.floor((e.width-this.ledBorder)/this.numBits+this.ledBorder),s=i-this.ledBorder):(i=Math.floor(e.width/this.numBits),s=i);let r=0;r=i>e.height||this.squareLed?e.height:i;for(let o=0;o<this.numBits;o++)if(this.squareLed){const n={x:e.x+o*s,y:e.y,width:i,height:r};this.effect3d?this.drawSquare3d(t,n,o):this.drawSquare2d(t,n,o)}else{const n=Math.min(i,r),h={x:e.x+o*s,y:e.y,width:n,height:n};this.effect3d?this.drawCircle3d(t,h,o):this.drawCircle2d(t,h,o)}}drawVertical(t,e){let i,s;this.ledPacked?(i=Math.floor((e.height-this.ledBorder)/this.numBits+this.ledBorder),s=i-this.ledBorder):(i=Math.floor(e.height/this.numBits),s=i);let r=0;r=i>e.width||this.squareLed?e.width:i;for(let o=0;o<this.numBits;o++)if(this.squareLed){const n={x:e.x,y:e.y+o*s,width:r,height:i};this.effect3d?this.drawSquare3d(t,n,o):this.drawSquare2d(t,n,o)}else{const n=Math.min(r,i),h={x:e.x,y:e.y+o*s,width:n,height:n};this.effect3d?this.drawCircle3d(t,h,o):this.drawCircle2d(t,h,o)}}drawCircle2d(t,e,i){const s=e.x+e.width/2,r=e.y+e.height/2;let o=e.width/2,n=e.height/2;this.ledBorder>0&&(o-=this.ledBorder/2,n-=this.ledBorder/2),t.fillEllipse({cx:s,cy:r,rx:o,ry:n,color:this.getLedColor(i)}),t.strokeEllipse({cx:s,cy:r,rx:o,ry:n,color:this.ledBorderColor,lineWidth:this.ledBorder})}drawCircle3d(t,e,s){const r=e.x+e.width/2,o=e.y+e.height/2;let n=e.width/2,h=e.height/2;t.fillEllipse({cx:r,cy:o,rx:n,ry:h,color:i.WHITE});let a=t.createLinearGradient(e.x,e.y,e.x+e.width,e.y+e.height);a.addColorStop(0,this.ledBorderColor.toString()),a.addColorStop(1,this.ledBorderColor.withAlpha(0).toString()),t.fillEllipse({cx:r,cy:o,rx:n,ry:h,gradient:a});n=(e.width-2*this.ledBorder)/2,h=(e.height-2*this.ledBorder)/2,t.fillEllipse({cx:r,cy:o,rx:n,ry:h,color:this.getLedColor(s)}),a=t.createLinearGradient(e.x,e.y,e.x+e.width,e.y+e.height),a.addColorStop(0,i.WHITE.toString()),a.addColorStop(1,this.ledBorderColor.withAlpha(0).toString()),t.fillEllipse({cx:r,cy:o,rx:n,ry:h,gradient:a})}drawSquare2d(t,e,i){const s=l(e.x,e.y,e.width,e.height,this.ledBorder);t.fillRect(Object.assign(Object.assign({},s),{color:this.getLedColor(i)})),t.strokeRect(Object.assign(Object.assign({},s),{color:this.ledBorderColor,lineWidth:this.ledBorder}))}drawSquare3d(t,e,i){t.fillRect(Object.assign(Object.assign({},e),{color:this.ledBorderColor}));let s=t.createLinearGradient(e.x,e.y,e.x+e.width,e.y);s.addColorStop(0,"rgba(0,0,0,0.078)"),s.addColorStop(1,"rgba(0,0,0,0.39)"),t.fillPath({gradient:s,path:new T(e.x,e.y).lineTo(e.x+this.ledBorder,e.y+this.ledBorder).lineTo(e.x+this.ledBorder,e.y+e.height-this.ledBorder).lineTo(e.x,e.y+e.height)}),s=t.createLinearGradient(e.x,e.y,e.x,e.y+e.height),s.addColorStop(0,"rgba(0,0,0,0.078)"),s.addColorStop(1,"rgba(0,0,0,0.39)"),t.fillPath({gradient:s,path:new T(e.x,e.y).lineTo(e.x+this.ledBorder,e.y+this.ledBorder).lineTo(e.x+e.width-this.ledBorder,e.y+this.ledBorder).lineTo(e.x+e.width,e.y)}),s=t.createLinearGradient(e.x,e.y,e.x+e.width,e.y),s.addColorStop(0,"rgba(255,255,255,0.078)"),s.addColorStop(1,"rgba(255,255,255,0.39)"),t.fillPath({gradient:s,path:new T(e.x+e.width,e.y).lineTo(e.x+e.width-this.ledBorder,e.y+this.ledBorder).lineTo(e.x+e.width-this.ledBorder,e.y+e.height-this.ledBorder).lineTo(e.x+e.width,e.y+e.height)}),s=t.createLinearGradient(e.x,e.y,e.x,e.y+e.height),s.addColorStop(0,"rgba(255,255,255,0.078)"),s.addColorStop(1,"rgba(255,255,255,0.39)"),t.fillPath({gradient:s,path:new T(e.x,e.y+e.height).lineTo(e.x+this.ledBorder,e.y+e.height-this.ledBorder).lineTo(e.x+e.width-this.ledBorder,e.y+e.height-this.ledBorder).lineTo(e.x+e.width,e.y+e.height)});const r=e.x+this.ledBorder,o=e.y+this.ledBorder,n=e.width-2*this.ledBorder,h=e.height-2*this.ledBorder,a=this.getLedColor(i);t.fillRect({x:r,y:o,width:n,height:h,color:a}),s=t.createLinearGradient(e.x,e.y,e.x+e.width,e.y+e.height),s.addColorStop(0,"rgba(255,255,255,0.784)"),s.addColorStop(1,a.withAlpha(0).toString()),t.fillRect({x:r,y:o,width:n,height:h,gradient:s})}get bitReverse(){return this.properties.getValue(ho)}get horizontal(){return this.properties.getValue(lo)}get numBits(){return this.properties.getValue(go)}get startBit(){return this.properties.getValue(xo)}get ledPacked(){return this.properties.getValue(uo)}get ledBorder(){return this.scale*this.properties.getValue(co)}get ledBorderColor(){return this.properties.getValue(po)}get offColor(){return this.properties.getValue(mo)}get onColor(){return this.properties.getValue(fo)}get effect3d(){return this.properties.getValue(ao)}get squareLed(){return this.properties.getValue(wo)}}class vo{constructor(t){this.prefix="",this.suffix="",this.comma=0,this.minInt=1,this.minFrac=0,this.maxFrac=0;for(let e=0;e<t.length;e++)if("#"==t.charAt(e)||"0"==t.charAt(e)){this.prefix=t.substring(0,e),t=t.substring(e);break}this.suffix=t.replace(/[#]|[0]|[,]|[.]/g,"");const e=t.replace(/[^0#,.]/g,"");let i="",s="";const r=e.indexOf(".");-1!==r?(i=e.substring(0,r),s=e.substring(r+1)):i=e;const o=i.lastIndexOf(",");-1!==o&&(this.comma=i.length-1-o),i=i.replace(/[,]/g,""),s=s.replace(/[,]|[.]+/g,""),this.maxFrac=s.length;let n=i.replace(/[^0]/g,"");n.length>this.minInt&&(this.minInt=n.length),n=s.replace(/[^0]/g,""),this.minFrac=n.length}format(t){let e=this.formatBack(t).toLowerCase();if(isNaN(e)||0==e.length)return t;if(-1!=e.indexOf("e")){const t=Number(e);if(t===1/0||t===-1/0)return e;if(e=t+"",-1!==e.indexOf("e"))return e}let i=!1;"-"===e.charAt(0)?(i=!0,e=e.substring(1)):"+"===e.charAt(0)&&(e=e.substring(1));const s=e.indexOf(".");let r="",o="";-1!=s?(r=e.substring(0,s),o=e.substring(s+1)):r=e,o=o.replace(/[.]/,"");const n=this.suffix&&"%"===this.suffix.charAt(0);let h=this.minInt,a=this.minFrac,l=this.maxFrac;if(n&&(h-=2,a+=2,l+=2),o.length>l){let t=Number("0."+o);t=0==l?Math.round(t):t.toFixed(l),o=t.toString(10).substr(2);let e,i=t>=1?1:0,s=r.length-1;for(;i;){if(-1==s){r="1"+r;break}e=Number(r.charAt(s)),9===e?(e="0",i=1):(e=++e+"",i=0),r=r.substring(0,s)+e+r.substring(s+1,r.length),s--}}for(let t=o.length;t<a;t++)o+="0";for(;o.length>a&&"0"==o.charAt(o.length-1);)o=o.substring(0,o.length-1);for(let t=r.length;t<h;t++)r="0"+r;for(;r.length>h&&"0"==r.charAt(0);)r=r.substring(1);n&&(r+=o.substring(0,2),o=o.substring(2));let d,c=0;for(let t=r.length;t>0;t--)0!=c&&c%this.comma==0&&(r=r.substring(0,t)+","+r.substring(t),c=0),c++;return d=o.length>0?this.prefix+r+"."+o+this.suffix:this.prefix+r+this.suffix,i&&(d="-"+d),d}formatBack(t){if(!(t+=""))return"";if(!isNaN(t))return this.getNumericString(t);let e=t,i=!1;"-"===t.charAt(0)&&(e=e.substr(1),i=!0);const s=e.indexOf(this.prefix),r=""==this.suffix?e.length:e.indexOf(this.suffix,this.prefix.length+1);return 0==s&&r>0&&(e=e.substr(0,r),e=e.substr(this.prefix.length),e=e.replace(/,/g,""),i&&(e="-"+e),!isNaN(e))?this.getNumericString(e):t}getNumericString(t){const e=Number(t)+"";if(t.indexOf(".")>-1&&e.indexOf(".")<0){for(var i=t.indexOf(".")+1;i<t.length;i++)if("0"!==t.charAt(i))return t;return e}return t}}class bo{constructor(t,e,s){this.rampWidth=t,this.startAngle=e,this.endAngle=s,this.lolo=10,this.loloColor=i.RED,this.showLoLo=!0,this.lo=25,this.loColor=i.ORANGE,this.showLo=!0,this.hi=75,this.hiColor=i.ORANGE,this.showHi=!0,this.hihi=90,this.hihiColor=i.RED,this.showHiHi=!0,this.minimum=0,this.maximum=100,this.gradient=!0,this.logScale=!1,this.effect3d=!0,this.labelsOutside=!0,this.range={min:this.minimum,max:this.maximum},this.lengthInDegrees=0,this.radius=0}draw(t,e,i){if(this.labelsOutside){const t=9;this.radius=e.width/2-t}else this.radius=e.width/2-1;this.range=this.getRenderedRange(),this.endAngle-this.startAngle>0?this.lengthInDegrees=360-(this.endAngle-this.startAngle):this.lengthInDegrees=this.startAngle-this.endAngle,this.drawRamp(t,i)}drawRamp(t,e){const s=e.x+e.width/2,r=e.y+e.height/2,o=e.width/2,n=e.height/2;let h,a=360-this.endAngle;if(h=this.endAngle-this.startAngle>0?this.startAngle-90:this.startAngle+90,this.showLoLo){let e=h,i=360-this.getValuePosition(this.lolo,!0);t.strokeEllipse({cx:s,cy:r,rx:o-this.rampWidth/2,ry:n-this.rampWidth/2,lineWidth:this.rampWidth,startAngle:m(e),endAngle:m(i),color:this.loloColor})}if(this.showLo){let i;i=this.showLoLo?this.lolo:this.minimum;const h=360-this.getValuePosition(i,!0),a=360-this.getValuePosition(this.lo,!0);if(this.effect3d&&this.gradient&&this.showLoLo){const l=m(this.getValuePosition(i,!0)-2),d=f(e.width/2,l,e),c=m(this.getValuePosition(this.lo,!0)+2),p=f(e.width/2,c,e),u=t.createLinearGradient(d.x,d.y,p.x,p.y);u.addColorStop(0,this.loloColor.toString()),u.addColorStop(1,this.loColor.toString()),t.strokeEllipse({cx:s,cy:r,rx:o-this.rampWidth/2,ry:n-this.rampWidth/2,lineWidth:this.rampWidth,startAngle:m(h-1),endAngle:m(a+1),gradient:u})}else t.strokeEllipse({cx:s,cy:r,rx:o-this.rampWidth/2,ry:n-this.rampWidth/2,lineWidth:this.rampWidth,startAngle:m(h),endAngle:m(a),color:this.loColor})}let l=this.minimum;this.showLo?l=this.lo:this.showLoLo&&(l=this.lolo);let d=this.maximum;this.showHi?d=this.hi:this.showHiHi&&(d=this.hihi);const c=(l+d)/2;let p=360-this.getValuePosition(l,!0),u=360-this.getValuePosition(c,!0);if(this.effect3d&&this.gradient&&(this.showLoLo||this.showLo)){const h=m(this.getValuePosition(l,!0)-2),a=f(e.width/2,h,e),d=m(this.getValuePosition(c,!0)+2),g=f(e.width/2,d,e),x=t.createLinearGradient(a.x,a.y,g.x,g.y);x.addColorStop(0,(this.showLo?this.loColor:this.loloColor).toString()),x.addColorStop(1,i.GREEN.toString()),t.strokeEllipse({cx:s,cy:r,rx:o-this.rampWidth/2,ry:n-this.rampWidth/2,lineWidth:this.rampWidth,startAngle:m(p-1),endAngle:m(u+1),gradient:x})}else t.strokeEllipse({cx:s,cy:r,rx:o-this.rampWidth/2,ry:n-this.rampWidth/2,lineWidth:this.rampWidth,startAngle:m(p),endAngle:m(u),color:i.GREEN});if(p=360-this.getValuePosition(c,!0),u=360-this.getValuePosition(d,!0),this.effect3d&&this.gradient&&(this.showHi||this.showHiHi)){const h=m(this.getValuePosition(c,!0)-2),l=f(e.width/2,h,e),g=m(this.getValuePosition(d,!0)+2),x=f(e.width/2,g,e),w=t.createLinearGradient(l.x,l.y,x.x,x.y);w.addColorStop(0,i.GREEN.toString()),w.addColorStop(1,(this.showHi?this.hiColor:this.hihiColor).toString());const y=u!==a?1:0;t.strokeEllipse({cx:s,cy:r,rx:o-this.rampWidth/2,ry:n-this.rampWidth/2,lineWidth:this.rampWidth,startAngle:m(p-1),endAngle:m(u+y),gradient:w})}else t.strokeEllipse({cx:s,cy:r,rx:o-this.rampWidth/2,ry:n-this.rampWidth/2,lineWidth:this.rampWidth,startAngle:m(p),endAngle:m(u),color:i.GREEN});if(this.showHi){let i;i=this.showHiHi?this.hihi:this.maximum;const h=360-this.getValuePosition(this.hi,!0),l=360-this.getValuePosition(i,!0);if(this.effect3d&&this.gradient&&this.showHiHi){const d=m(this.getValuePosition(this.hi,!0)-2),c=f(e.width/2,d,e),p=m(this.getValuePosition(i,!0)+2),u=f(e.width/2,p,e),g=t.createLinearGradient(c.x,c.y,u.x,u.y);g.addColorStop(0,this.hiColor.toString()),g.addColorStop(1,this.hihiColor.toString());const x=l!==a?1:0;t.strokeEllipse({cx:s,cy:r,rx:o-this.rampWidth/2,ry:n-this.rampWidth/2,lineWidth:this.rampWidth,startAngle:m(h-1),endAngle:m(l+x),gradient:g})}else t.strokeEllipse({cx:s,cy:r,rx:o-this.rampWidth/2,ry:n-this.rampWidth/2,lineWidth:this.rampWidth,startAngle:m(h),endAngle:m(l),color:this.hiColor})}if(this.showHiHi){p=360-this.getValuePosition(this.hihi,!0),u=a;const e=this.gradient?1:0;t.strokeEllipse({cx:s,cy:r,rx:o-this.rampWidth/2,ry:n-this.rampWidth/2,lineWidth:this.rampWidth,startAngle:m(p-e),endAngle:m(u),color:this.hihiColor})}}getRadius(){return this.radius}getValuePosition(t,e=!1){let i;return e&&(t=this.getValueInRange(t)),i=this.logScale?this.startAngle-(Math.log10(t)-Math.log10(this.range.min))/(Math.log10(this.range.max)-Math.log10(this.range.min))*this.lengthInDegrees:this.startAngle-(t-this.range.min)/(this.range.max-this.range.min)*this.lengthInDegrees,i<0&&(i+=360),i}getValueInRange(t){return this.range.min<=t&&t<=this.range.max?t:t>this.range.max?this.range.max:this.range.min}getRenderedRange(){const t={min:this.minimum,max:this.maximum};return this.logScale&&(this.minimum<=0&&(t.min=.1),t.max<=this.minimum&&(t.max=t.min+100)),t}}const To=new i(100,100,100),So="color_hi",Vo="color_hihi",Ao="color_lo",Co="color_lolo",_o="effect_3d",Lo="font",Po="value_label_format",ko="level_hi",Mo="level_hihi",Ro="level_lo",Eo="level_lolo",Wo="limits_from_pv",Bo="log_scale",Io="minimum",Oo="maximum",Ho="needle_color",No="ramp_gradient",Fo="show_ramp";class Do extends ie{constructor(t,e){super(t,e),this.properties.add(new M(So)),this.properties.add(new M(Vo)),this.properties.add(new M(Ao)),this.properties.add(new M(Co)),this.properties.add(new k(_o)),this.properties.add(new R(Lo)),this.properties.add(new P(ko)),this.properties.add(new P(Mo)),this.properties.add(new P(Ro)),this.properties.add(new P(Eo)),this.properties.add(new k(Bo)),this.properties.add(new k(Wo)),this.properties.add(new P(Oo)),this.properties.add(new P(Io)),this.properties.add(new M(Ho)),this.properties.add(new k(No)),this.properties.add(new k(Fo,!0)),this.properties.add(new C(Po))}draw(t){var e,i;let s;s=this.limitsFromPv&&this.pv&&!this.pv.disconnected?{min:null!==(e=this.pv.lowerDisplayLimit)&&void 0!==e?e:this.minimum,lolo:this.pv.lowerAlarmLimit,lo:this.pv.lowerWarningLimit,hi:this.pv.upperWarningLimit,hihi:this.pv.upperAlarmLimit,max:null!==(i=this.pv.upperDisplayLimit)&&void 0!==i?i:this.maximum}:{min:this.minimum,lolo:this.levelLoLo,lo:this.levelLo,hi:this.levelHi,hihi:this.levelHiHi,max:this.maximum},this.logScale&&(s.min=Math.max(.1,s.min),s.max<=s.min&&(s.max=s.min+100));const r=Math.min(this.width,this.height),o=r;this.drawBackground(t,r,o),this.showRamp&&this.drawRamp(t,r,o,s),this.drawLabel(t,r,o),this.drawNeedle(t,r,o,s),this.drawNeedleCenter(t,r,o)}drawBackground(t,e,s){if(t.fillEllipse({cx:this.x+e/2,cy:this.y+s/2,rx:e/2,ry:s/2,color:i.GRAY}),this.effect3d){const r=t.createLinearGradient(this.x,this.y,this.x+this.width,this.y+this.height);r.addColorStop(0,To.toString()),r.addColorStop(1,i.WHITE.toString()),t.fillEllipse({cx:this.x+e/2,cy:this.y+s/2,rx:e/2,ry:s/2,gradient:r})}const r=(this.effect3d?2:1)*this.scale;if(t.fillEllipse({cx:this.x+e/2,cy:this.y+s/2,rx:e/2-r,ry:s/2-r,color:this.backgroundColor}),this.effect3d){const r=e/2,o=.95,n=.5,h=.85,a=m(0),l=m(35);let d={x:Math.floor(this.x+e/2-r*h*Math.cos(a)),y:Math.floor(this.y+s/2-r*o),width:Math.floor(2*r*h*Math.cos(a)),height:Math.floor(r*o+r*n)},c=t.createLinearGradient(d.x,d.y,d.x,d.y+d.height);c.addColorStop(0,i.WHITE.withAlpha(90/255).toString()),c.addColorStop(1,i.WHITE.withAlpha(0).toString()),t.fillEllipse({cx:d.x+d.width/2,cy:d.y+d.height/2,rx:d.width/2,ry:d.height/2,gradient:c}),d={x:Math.floor(this.x+e/2-r*h*Math.sin(l)),y:Math.floor(Math.ceil(this.y+s/2+r*n)),width:Math.floor(2*r*h*Math.sin(l)),height:Math.floor(Math.ceil(r*o-r*n))},c=t.createLinearGradient(d.x,d.y,d.x,d.y+d.height),c.addColorStop(0,i.WHITE.withAlpha(0).toString()),c.addColorStop(1,i.WHITE.withAlpha(40/255).toString()),t.fillEllipse({cx:d.x+d.width/2,cy:d.y+d.height/2,rx:d.width/2,ry:d.height/2,gradient:c})}}drawRamp(t,e,i,s){const r=c({x:this.x,y:this.y,width:e,height:i},e/4,i/4),o=Object.assign({},r);o.width=Math.min(r.width,r.height),o.height=r.width;const n=new bo(10*this.scale,225,315);n.lolo=s.lolo,n.loloColor=this.colorLoLo,n.lo=s.lo,n.loColor=this.colorLo,n.hi=s.hi,n.hiColor=this.colorHi,n.hihi=s.hihi,n.hihiColor=this.colorHiHi,n.minimum=s.min,n.maximum=s.max,n.effect3d=this.effect3d,n.gradient=this.rampGradient,n.logScale=this.logScale,n.draw(t,r,o)}drawLabel(t,e,i){var s;const r=et.ARIAL_12_BOLD.scale(this.scale);if(void 0!==(null===(s=this.pv)||void 0===s?void 0:s.value)){const s=this.formatLabelValue(this.pv.value),o=t.measureText(s,r);t.fillText({x:this.x+e/2-o.width/2,y:this.y+7*i/8-o.height/2,color:this.foregroundColor,align:"left",baseline:"top",font:r,text:s})}}drawNeedle(t,e,i,s){var r;const o=this.x+e/2,n=this.y+i/2;let h;if(void 0!==(null===(r=this.pv)||void 0===r?void 0:r.value)){const t=this.getValueInRange(this.pv.value,s);h=360-this.getValuePosition(t,s),s.max>s.min?t>s.max?h+=10:t<s.min&&(h-=10):t>s.min?h-=10:t<s.max&&(h+=10)}else h=360-this.getValuePosition((s.min+s.max)/2,s);const a=m(h),{scale:l}=this,{needleDiameter:c,majorTickLength:p,gapBetweenNeedleScale:u}=this,g=d(o,n-c/2+3*l,o,n,a),f=d(o+e/2-p-u,n,o,n,a),x=d(o,n+c/2-3*l,o,n,a);t.fillPath({color:this.needleColor,path:new T(g.x,g.y).lineTo(f.x,f.y).lineTo(x.x,x.y).closePath()})}drawNeedleCenter(t,e,s){const{needleDiameter:r}=this,o=this.x+e/2,n=this.y+s/2,h=r/2,a=r/2;if(this.effect3d){const e=t.createLinearGradient(o-h,n-a,o+h,n+a);e.addColorStop(0,i.WHITE.toString()),e.addColorStop(1,To.toString()),t.fillEllipse({cx:o,cy:n,rx:h,ry:a,gradient:e})}else t.fillEllipse({cx:o,cy:n,rx:h,ry:a,color:i.GRAY})}getValueInRange(t,e){return e.min<=t&&t<=e.max?t:t>e.max?e.max:e.min}getValuePosition(t,e){let i;return i=this.logScale?225-(Math.log10(t)-Math.log10(e.min))/(Math.log10(e.max)-Math.log10(e.min))*270:225-(t-e.min)/(e.max-e.min)*270,i<0&&(i+=360),i}formatLabelValue(t){return this.valueLabelFormat?new vo(this.valueLabelFormat).format(t):String(Number(t.toFixed(3)))}get needleDiameter(){return 16*this.scale}get majorTickLength(){return 8*this.scale}get minorTickLength(){return 5*this.scale}get gapBetweenNeedleScale(){return-1*this.scale}get colorLo(){return this.properties.getValue(Ao)}get colorLoLo(){return this.properties.getValue(Co)}get colorHi(){return this.properties.getValue(So)}get colorHiHi(){return this.properties.getValue(Vo)}get effect3d(){return this.properties.getValue(_o)}get font(){return this.properties.getValue(Lo).scale(this.scale)}get levelLo(){return this.properties.getValue(Ro)}get levelLoLo(){return this.properties.getValue(Eo)}get levelHi(){return this.properties.getValue(ko)}get levelHiHi(){return this.properties.getValue(Mo)}get limitsFromPv(){return this.properties.getValue(Wo)}get logScale(){return this.properties.getValue(Bo)}get minimum(){return this.properties.getValue(Io)}get maximum(){return this.properties.getValue(Oo)}get needleColor(){return this.properties.getValue(Ho)}get rampGradient(){return this.properties.getValue(No)}get showRamp(){return this.properties.getValue(Fo)}get valueLabelFormat(){return this.properties.getValue(Po)}}const $o="data_type",jo="off_image",Go="off_label",zo="font",Uo="on_image",qo="on_label",Yo="show_boolean_label";class Xo extends ie{constructor(t,e){super(t,e),this.onImageLoaded=!1,this.offImageLoaded=!1,this.properties.add(new L("bit")),this.properties.add(new L($o)),this.properties.add(new C(jo)),this.properties.add(new C(Go)),this.properties.add(new C(Uo)),this.properties.add(new C(qo)),this.properties.add(new R(zo)),this.properties.add(new k(Yo))}init(){this.onImageElement=new Image,this.onImageElement.onload=()=>{this.onImageLoaded=!0,this.requestRepaint()},this.offImageElement=new Image,this.offImageElement.onload=()=>{this.offImageLoaded=!0,this.requestRepaint()},this.onImage&&(this.onImageElement.src=this.resolvePath(this.onImage)),this.offImage&&(this.offImageElement.src=this.resolvePath(this.offImage))}get booleanValue(){var t,e,i;return this.bit<0?Boolean(null===(t=this.pv)||void 0===t?void 0:t.toNumber()):void 0!==(null===(e=this.pv)||void 0===e?void 0:e.value)&&((null===(i=this.pv)||void 0===i?void 0:i.value)>>this.bit&1)>0}get image(){return this.booleanValue?this.onImage:this.offImage}get label(){return this.booleanValue?this.onLabel:this.offLabel}draw(t){this.transparent||t.fillRect({x:this.x,y:this.y,width:this.width,height:this.height,color:this.backgroundColor}),this.booleanValue?this.onImageLoaded&&t.ctx.drawImage(this.onImageElement,this.x,this.y,this.width,this.height):this.offImageLoaded&&t.ctx.drawImage(this.offImageElement,this.x,this.y,this.width,this.height),this.showBooleanLabel&&t.fillText({x:this.x+this.width/2,y:this.y+this.height/2,font:this.font,baseline:"middle",align:"center",color:this.foregroundColor,text:this.label})}get bit(){return this.properties.getValue("bit")}get dataType(){return this.properties.getValue($o)}get showBooleanLabel(){return this.properties.getValue(Yo)}get font(){return this.properties.getValue(zo).scale(this.scale)}get offLabel(){return this.properties.getValue(Go)}get offImage(){return this.properties.getValue(jo)}get onLabel(){return this.properties.getValue(qo)}get onImage(){return this.properties.getValue(Uo)}}const Ko=["January","February","March","April","May","June","July","August","September","October","November","December"];class Zo{constructor(t,e,i,s,r,o,n,h,a){this.scale=t,this.scaleFont=e,this.minimum=i,this.maximum=s,this.logScale=r,this.majorTickStepHint=o,this.foregroundColor=n,this.showMinorTicks=h,this.showScale=a,this.labels=[],this.labelValues=[],this.labelPositions=[],this.labelVisibilities=[],this.gridStepInPixel=0,this.horizontal=!1,this.x=0,this.y=0,this.scaleFormat="",this.timeFormat=0,this.length=0,this.margin=0}get scaleLength(){return this.length-2*this.margin}getX(){return this.x}getY(){return this.y}getGridPositions(){let t=[...this.labelPositions];return this.horizontal||(t=t.map((t=>this.length-t))),t.pop(),t.shift(),t}setDimensions(t,e,i,s){this.x=t,this.y=e,this.length=i,this.horizontal=s}getValuePosition(t){let{start:e,stop:i}=this.getMinMax(),s=0;const r=this.length-2*this.margin;if(this.logScale)s=t<=0?this.margin:(Math.log10(t)-Math.log10(e))/(Math.log10(i)-Math.log10(e))*r+this.margin;else{const o=Math.max(Math.abs(e),Math.abs(i));i/=o,e/=o;s=(t/o-e)/(i-e)*r+this.margin}return this.horizontal?s+this.x:this.length-s+this.y}getMinMax(){let t=this.minimum,e=this.maximum;return this.logScale&&(t<=0&&(t=.1),e<=t&&(e=t+100)),{start:t,stop:e}}getPositionValue(t){const e=this.getMinMax();let{start:i,stop:s}=e;const r=this.horizontal?t-this.x:this.length+this.y-t,o=this.length-2*this.margin;let n;if(this.logScale)n=Math.pow(10,(r-this.margin)*(Math.log10(s)-Math.log10(i))/o+Math.log10(i));else{const t=Math.max(Math.abs(i),Math.abs(s));s/=t,i/=t;const e=s-i;n=((r-this.margin)/o*e+i)*t}return n}calculateMargin(t,e){if(this.showScale){const i=t.measureText(this.format(this.minimum),this.scaleFont),s=t.measureText(this.format(this.maximum),this.scaleFont);return e?Math.ceil(Math.max(i.width,s.width)/2):Math.ceil(Math.max(i.height,s.height)/2)}return 0}measureHorizontalHeight(t){const e=t.measureText("dummy",this.scaleFont);return this.showScale?e.height+this.spaceBetweenMarkAndLabel+this.majorTickLength:0}drawHorizontal(t,e,i,s){const{scale:r}=this;this.length=s,this.horizontal=!0,this.margin=this.calculateMargin(t,this.horizontal);const o=s-2*this.margin;o>0&&this.updateLabels(t,o);let n=0;for(let e=0;e<this.labels.length;e++){const i=t.measureText(this.labels[e],this.scaleFont);i.height>n&&(n=i.height)}const h=this.showScale?n+this.spaceBetweenMarkAndLabel+this.majorTickLength:0;if(i-=h,this.x=e,this.y=i,this.logScale)for(let e=0;e<this.labelPositions.length;e++){const i=this.x+this.labelPositions[e],s=this.y;let o=0;if(o=this.labelVisibilities[e]?this.majorTickLength:this.minorTickLength,this.labelVisibilities[e]||this.showMinorTicks){const e=Math.round(i)-.5*r;t.strokePath({path:new T(e,s).lineTo(e,s+o),color:this.foregroundColor,lineWidth:1*r,opacity:100/255})}this.labelVisibilities[e]&&t.fillText({x:i,y:this.y+this.spaceBetweenMarkAndLabel+this.majorTickLength,align:"center",baseline:"top",font:this.scaleFont,color:this.foregroundColor,text:this.labels[e]})}else for(let s=0;s<this.labels.length;s++){const o=e+this.labelPositions[s];this.labelVisibilities[s]&&t.fillText({x:o,y:i+this.majorTickLength+this.spaceBetweenMarkAndLabel,align:"center",baseline:"top",font:this.scaleFont,color:this.foregroundColor,text:this.labels[s]});const n=Math.round(o)-.5*r;t.strokePath({path:new T(n,i).lineTo(n,i+this.majorTickLength),color:this.foregroundColor,lineWidth:1*r,opacity:100/255}),this.showMinorTicks&&this.drawMinorXTicks(t,s,e,i)}return h}drawVertical(t,e,i,s,r,o=!1){const{scale:n}=this;this.length=s,this.horizontal=!1,this.margin=this.calculateMargin(t,this.horizontal);const h=s-2*this.margin;h>0&&this.updateLabels(t,h);let a=0;for(let e=0;e<this.labels.length;e++){const i=t.measureText(this.labels[e],this.scaleFont);i.width>a&&(a=i.width)}const l=this.showScale?a+this.spaceBetweenMarkAndLabel+this.majorTickLength:0;if(r||(e-=l),this.x=e,this.y=i,this.logScale)for(let r=0;r<this.labelPositions.length;r++){let o;o=this.labelVisibilities[r]?this.majorTickLength:this.minorTickLength;const h=e+a+this.spaceBetweenMarkAndLabel-1*n+this.majorTickLength-o,l=Math.round(i+s-this.labelPositions[r])-.5*n;if((this.labelVisibilities[r]||this.showMinorTicks)&&t.strokePath({path:new T(h,l).lineTo(h+o,l),color:this.foregroundColor,lineWidth:1*n,opacity:100/255}),this.labelVisibilities[r]){const o=i+s-this.labelPositions[r];t.fillText({x:e,y:o,align:"left",baseline:"middle",font:this.scaleFont,color:this.foregroundColor,text:this.labels[r]})}}else for(let r=0;r<this.labels.length;r++){const h=i+s-this.labelPositions[r],l=Math.round(h)-.5*n;if(o){if(t.strokePath({path:new T(e,l).lineTo(e+this.majorTickLength,l),color:this.foregroundColor,lineWidth:1*n,opacity:100/255}),this.labelVisibilities[r]){const i=e+this.majorTickLength+this.spaceBetweenMarkAndLabel;t.fillText({x:i,y:h,align:"left",baseline:"middle",font:this.scaleFont,color:this.foregroundColor,text:this.labels[r]})}}else{this.labelVisibilities[r]&&t.fillText({x:e,y:h,align:"left",baseline:"middle",font:this.scaleFont,color:this.foregroundColor,text:this.labels[r]});const o=e+a+this.spaceBetweenMarkAndLabel-1*n;t.strokePath({path:new T(o,l).lineTo(o+this.majorTickLength,l),color:this.foregroundColor,lineWidth:1*n,opacity:100/255}),this.showMinorTicks&&this.drawMinorYTicks(t,r,o,i+s)}}return l}drawMinorXTicks(t,e,i,s){const{gridStepInPixel:r}=this;let o,n;r/5>=this.minorTickMarkStepHint?(o=5,n=Math.floor(r/5)):r/4>=this.minorTickMarkStepHint?(o=4,n=Math.floor(r/4)):(o=2,n=Math.floor(r/2));const{labelPositions:h,minorTickLength:a,scale:l}=this;if(e>0)if(1===e&&h[1]-h[0]<r){let e=h[1];for(;e-h[0]>n+3*l;){e-=n;const r=Math.round(i+e)-.5*l;t.strokePath({path:new T(r,s).lineTo(r,s+a),color:this.foregroundColor,lineWidth:1*l,opacity:100/255})}}else if(e===h.length-1&&h[e]-h[e-1]<r){let r=h[e-1];for(;h[e]-r>n+3*l;){r+=n;const e=Math.round(i+r)-.5*l;t.strokePath({path:new T(e,s).lineTo(e,s+a),color:this.foregroundColor,lineWidth:1*l,opacity:100/255})}}else for(let r=0;r<o;r++){let n=i+h[e-1]+(h[e]-h[e-1])*r/o;n=Math.round(n)-.5*l,t.strokePath({path:new T(n,s).lineTo(n,s+a),color:this.foregroundColor,lineWidth:1*l,opacity:100/255})}}drawMinorYTicks(t,e,i,s){const{gridStepInPixel:r}=this;let o,n;r/5>=this.minorTickMarkStepHint?(o=5,n=Math.floor(r/5)):r/4>=this.minorTickMarkStepHint?(o=4,n=Math.floor(r/4)):(o=2,n=Math.floor(r/2));const{labelPositions:h,minorTickLength:a,majorTickLength:l,scale:d}=this;if(e>0)if(1===e&&h[1]-h[0]<r){let e=h[1];for(;e-h[0]>n+3*d;){e-=n;const r=Math.round(s-e)-.5*d;t.strokePath({path:new T(i+l-a,r).lineTo(i+l,r),color:this.foregroundColor,lineWidth:1*d,opacity:100/255})}}else if(e===h.length-1&&h[e]-h[e-1]<r){let r=h[e-1];for(;h[e]-r>n+3*d;){r+=n;const e=Math.round(s-r)-.5*d;t.strokePath({path:new T(i+l-a,e).lineTo(i+l,e),color:this.foregroundColor,lineWidth:1*d,opacity:100/255})}}else for(let r=0;r<o;r++){let n=s-h[e-1]-(h[e]-h[e-1])*r/o;n=Math.round(n)-.5*d,t.strokePath({path:new T(i+l-a,n).lineTo(i+l,n),color:this.foregroundColor,lineWidth:1*d,opacity:100/255})}}updateLabels(t,e){if(this.labels=[],this.labelValues=[],this.labelPositions=[],this.showScale)if(this.logScale)this.updateLabelsForLogScale(this.minimum,this.maximum,e);else{const t=this.getGridStep(e,this.minimum,this.maximum),i=Math.max(Math.abs(this.minimum),Math.abs(this.maximum)),s=this.maximum/i-this.minimum/i;this.gridStepInPixel=Math.floor(e*(t/i)/s),this.updateLabelsForLinearScale(this.minimum,this.maximum,e,t)}this.updateVisibility(t)}getGridStep(t,e,i){t<=0&&(t=1);let s=!1;if(e>=i)if(i===e)i++;else{s=!0;const t=e;e=i,i=t}const r=Math.abs(i-e);let o=this.majorTickStepHint;o>t&&(o=t);let n,h=r/t*o,a=0;if(h<1){if(0!=h)for(;h<1;)h*=10,a--}else for(;h>=10;)h/=10,a++;return n=h>7.5?10*Math.pow(10,a):h>3.5?5*Math.pow(10,a):h>1.5?2*Math.pow(10,a):Math.pow(10,a),s&&(n=-n),n}updateLabelsForLogScale(t,e,i){t<=0&&(t=.1),e<=t&&(e=t+100);const s=e<t,r=Math.log10(t),o=Math.ceil(r),n=Math.ceil(Math.log10(e));let h,a=Math.pow(10,o-1);h=t%a<=0||s?t-t%a:t-t%a+a,(s&&t>h||!s&&t<h)&&this.addMinMaxTickInfo(t,i,!0);for(let t=o;s?t>=n:t<=n;t+=s?-1:1)if(Math.abs(n-o)>20){const s=Math.pow(10,t);if(s>e)break;this.addTickInfo(s,e,r,i)}else{for(let o=h;(s?o>=Math.pow(10,t-1):o<=Math.pow(10,t))&&!(s?o<e:o>e);o=s?o-a:o+a)this.addTickInfo(o,e,r,i);a=s?a/Math.pow(10,1):a*Math.pow(10,1),h=s?Math.pow(10,t-1):a+Math.pow(10,t)}(s?e<this.labelValues[this.labelValues.length-1]:e>this.labelValues[this.labelValues.length-1])&&this.addMinMaxTickInfo(e,i,!1)}addMinMaxTickInfo(t,e,i){i?(this.labelValues.push(t),this.labels.push(this.format(t)),this.labelPositions.push(this.margin)):(this.labelValues.push(t),this.labels.push(this.format(t)),this.labelPositions.push(this.margin+e))}addTickInfo(t,e,i,s){this.labels.push(this.format(t));const r=Math.floor((Math.log10(t)-i)/(Math.log10(e)-i)*s)+this.margin;this.labelPositions.push(r),this.labelValues.push(t)}updateLabelsForLinearScale(t,e,i,s){let r;r=t%s<=0?t-t%s:t-t%s+s,t>r==e<t&&(this.labelValues.push(t),this.labels.push(this.format(t)),this.labelPositions.push(this.margin));let o=1;const n=Math.max(Math.abs(t),Math.abs(e));s/=n,r/=n;const h=(e/=n)-(t/=n);for(let a=r;e>=t?a<e:a>e;a=r+o++*s){const e=a*n;this.labels.push(this.format(e)),this.labelValues.push(e);const s=Math.floor((a-t)/h*i)+this.margin;this.labelPositions.push(s)}e*=n,this.labelValues.push(e),this.labels.push(this.format(e)),this.labelPositions.push(this.margin+i)}updateVisibility(t){if(this.labelVisibilities=[],!this.labelPositions.length)return;for(let t=0;t<this.labelPositions.length;t++)this.labelVisibilities.push(!0);let e=0,i=null;for(let s=0;s<this.labelPositions.length;s++){let r=!0;const o=this.labels[s],n=this.labelPositions[s];0!==s&&(r=this.hasSpaceToDraw(t,e,n,i||"",o));const h=o===i&&0!==s&&s!==this.labelPositions.length-1;let a=!0;if(this.logScale){const t=Number(this.labels[s]);a=this.isMajorTick(t)||0===s||s===this.labelPositions.length-1}r&&!h&&a?(e=n,i=o):this.labelVisibilities[s]=!1}}hasSpaceToDraw(t,e,i,s,r){const o=t.measureText(r,this.scaleFont),n=t.measureText(s,this.scaleFont);let h=i-e,a=Math.floor(this.horizontal?o.width/2+n.width/2:o.height),l=!0,d=!0;if(i!=this.labelPositions[this.labelPositions.length-1]){l=h>a+this.tickLabelGap;const e=t.measureText(this.labels[this.labels.length-1],this.scaleFont);h=this.labelPositions[this.labelPositions.length-1]-i,a=Math.floor(this.horizontal?o.width/2+e.width/2:o.height),d=h>a+this.tickLabelGap}return l&&d}isMajorTick(t){if(!this.logScale)return!0;const e=Math.log10(t);return e===Math.round(e)}format(t){if(0===this.timeFormat)return this.scaleFormat?new vo(this.scaleFormat).format(t):String(Number(t.toFixed(2)));const e=new Date(t);switch(this.timeFormat){case 1:return this.formatDate(e,{year:!0,month:!0,day:!0})+"\n"+this.formatTime(e,{hours:!0,minutes:!0,seconds:!0,milliseconds:!1});case 2:return this.formatDate(e,{year:!0,month:!0,day:!0})+"\n"+this.formatTime(e,{hours:!0,minutes:!0,seconds:!0,milliseconds:!0});case 3:return this.formatTime(e,{hours:!0,minutes:!0,seconds:!0,milliseconds:!1});case 4:return this.formatTime(e,{hours:!0,minutes:!0,seconds:!0,milliseconds:!0});case 5:return this.formatTime(e,{hours:!0,minutes:!0,seconds:!1,milliseconds:!1});case 6:return this.formatDate(e,{year:!0,month:!0,day:!0});case 7:return`${Ko[e.getUTCMonth()]} ${e.getUTCDate()}`;case 8:const t=Math.abs(this.maximum-this.minimum);return t<=5e3?this.formatTime(e,{hours:!1,minutes:!1,seconds:!0,milliseconds:!0}):t<=18e5?this.formatTime(e,{hours:!0,minutes:!0,seconds:!0,milliseconds:!1}):t<=864e5?this.formatTime(e,{hours:!0,minutes:!0,seconds:!1,milliseconds:!1}):t<=6048e5?this.formatDate(e,{year:!1,month:!0,day:!0})+"\n"+this.formatTime(e,{hours:!0,minutes:!0,seconds:!1,milliseconds:!1}):t<=2592e6?this.formatDate(e,{year:!1,month:!0,day:!0}):this.formatDate(e,{year:!0,month:!0,day:!0})}return""}formatDate(t,e){let i="";if(e.year&&(i+=t.getUTCFullYear()),e.month){e.year&&(i+="-");const s=t.getUTCMonth();i+=(s<10?"0":"")+s}if(e.day){e.month&&(i+="-");const s=t.getUTCDate();i+=(s<10?"0":"")+s}return i}formatTime(t,e){let i="";if(e.hours){const e=t.getUTCHours();i+=(e<10?"0":"")+e}if(e.minutes){e.hours&&(i+=":");const s=t.getUTCMinutes();i+=(s<10?"0":"")+s}if(e.seconds){e.minutes&&(i+=":");const s=t.getUTCSeconds();i+=(s<10?"0":"")+s}if(e.milliseconds){e.seconds&&(i+=".");const s=t.getUTCMilliseconds();i+=(s<10?"00":s<100?"0":"")+s}return i}get spaceBetweenMarkAndLabel(){return 2*this.scale}get majorTickLength(){return 6*this.scale}get minorTickLength(){return 3*this.scale}get minorTickMarkStepHint(){return 4*this.scale}get tickLabelGap(){return 2*this.scale}}const Jo="color_map",Qo="crop_bottom",tn="crop_left",en="crop_right",sn="crop_top",rn="data_height",on="data_width",nn="font",hn="graph_area_height",an="graph_area_width",ln="maximum",dn="minimum",cn="show_ramp",pn="x_axis_axis_color",un="x_axis_axis_title",gn="x_axis_major_tick_step_hint",mn="x_axis_maximum",fn="x_axis_minimum",xn="x_axis_scale_font",wn="x_axis_show_minor_ticks",yn="x_axis_title_font",vn="x_axis_visible",bn="y_axis_axis_color",Tn="y_axis_axis_title",Sn="y_axis_major_tick_step_hint",Vn="y_axis_maximum",An="y_axis_minimum",Cn="y_axis_scale_font",_n="y_axis_show_minor_ticks",Ln="y_axis_title_font",Pn="y_axis_visible";class kn extends ie{constructor(t,e){super(t,e),this.properties.add(new E(Jo)),this.properties.add(new L(Qo)),this.properties.add(new L(tn)),this.properties.add(new L(en)),this.properties.add(new L(sn)),this.properties.add(new L(rn)),this.properties.add(new L(on)),this.properties.add(new L(hn)),this.properties.add(new L(an)),this.properties.add(new R(nn)),this.properties.add(new P(ln)),this.properties.add(new P(dn)),this.properties.add(new k(cn)),this.properties.add(new M(pn)),this.properties.add(new C(un)),this.properties.add(new L(gn)),this.properties.add(new P(mn)),this.properties.add(new P(fn)),this.properties.add(new R(xn)),this.properties.add(new k(wn)),this.properties.add(new R(yn)),this.properties.add(new k(vn)),this.properties.add(new M(bn)),this.properties.add(new C(Tn)),this.properties.add(new L(Sn)),this.properties.add(new P(Vn)),this.properties.add(new P(An)),this.properties.add(new R(Cn)),this.properties.add(new k(_n)),this.properties.add(new R(Ln)),this.properties.add(new k(Pn))}draw(t){const{scale:e}=this;let i=this.area;this.borderAlarmSensitive&&(i=c(i,2*e));const s=this.alarmSensitiveBackgroundColor;t.fillRect(Object.assign(Object.assign({},i),{color:s}));const{graphAreaWidth:r,graphAreaHeight:o}=this;this.xAxisVisible&&t.measureText(this.xAxisAxisTitle,this.xAxisTitleFont).height;let n=0;this.yAxisVisible&&(n=t.measureText(this.yAxisAxisTitle,this.yAxisTitleFont).height);const h=new Zo(e,this.xAxisScaleFont,this.xAxisMinimum,this.xAxisMaximum,!1,this.xAxisMajorTickStepHint,this.xAxisAxisColor,this.xAxisShowMinorTicks,this.xAxisVisible),a=h.calculateMargin(t,!0),l=new Zo(e,this.yAxisScaleFont,this.yAxisMinimum,this.yAxisMaximum,!1,this.yAxisMajorTickStepHint,this.yAxisAxisColor,this.yAxisShowMinorTicks,this.yAxisVisible),d=l.calculateMargin(t,!1),p=h.measureHorizontalHeight(t),u=o+2*d,g=l.drawVertical(t,i.x+n,i.y,u,!0),m=r+2*a,f=i.x+n+g-a,x=i.y+u+p-d;h.drawHorizontal(t,f,x,m);const w=1*e,y=Math.round(i.x+n+g)-w/2,v=Math.round(i.y+d)-w/2;t.strokePath({path:new T(y,v).lineTo(y,v+o),color:this.yAxisAxisColor,opacity:100/255,lineWidth:w});const b=y,S=v+o+w;t.strokePath({path:new T(b,S).lineTo(b+r,S),color:this.xAxisAxisColor,opacity:100/255,lineWidth:w});const{dataWidth:V,dataHeight:A,colorMap:C}=this,{minimum:_,maximum:L}=this,[P,k]=C.getMinMax();if(this.value&&this.value.length){const e=document.createElement("canvas"),{cropLeft:s,cropRight:h,cropTop:a,cropBottom:d}=this;e.width=V-s-h,e.height=A-a-d;const c=e.getContext("2d");for(let t=s;t<V-h;t++)for(let e=a;e<A-d;e++){let i=this.value[e*V+t];if(C.autoscale){i=P+(i-_)/(L-_)*(k-P)}const[r,o,n]=C.lookup(i);c.fillStyle=`rgb(${r},${o},${n})`,c.fillRect(t-s,e-a,1,1)}const p=Math.round(i.x+n+g),u=Math.round(i.y+l.margin);t.ctx.drawImage(e,p,u,r,o)}if(this.showRamp){const s=new Zo(e,this.font,_,L,!1,50*e,this.alarmSensitiveForegroundColor,!1,!0),h=i.y+l.margin,a=o,d=s.drawVertical(t,i.x+i.width,h,a,!1,!0),c=i.x+n+g+r+this.gap,p=i.width-n-g-r-d-this.gap,u=a-2*s.margin,m=document.createElement("canvas");m.width=p,m.height=u;const f=m.getContext("2d");for(let t=0;t<u;t++){let e=L-t/u*(L-_);if(C.autoscale){e=P+(e-_)/(L-_)*(k-P)}const[i,s,r]=C.lookup(e);f.fillStyle=`rgb(${i},${s},${r})`,f.fillRect(0,t,p,1)}t.ctx.drawImage(m,c,h+s.margin)}if(this.xAxisVisible){let e=i.x+g+r/2;this.yAxisVisible&&(e+=n),t.fillText({x:e,y:i.y+i.height,align:"center",baseline:"bottom",font:this.xAxisTitleFont,color:this.xAxisAxisColor,text:this.xAxisAxisTitle})}this.yAxisVisible&&(t.ctx.save(),t.ctx.translate(i.x+n/2,i.y+u/2),t.ctx.rotate(-Math.PI/2),t.fillText({x:0,y:0,align:"center",baseline:"middle",font:this.yAxisTitleFont,color:this.yAxisAxisColor,text:this.yAxisAxisTitle}),t.ctx.restore())}get gap(){return 3*this.scale}get colorMap(){return this.properties.getValue(Jo)}get cropBottom(){return this.properties.getValue(Qo)}get cropLeft(){return this.properties.getValue(tn)}get cropRight(){return this.properties.getValue(en)}get cropTop(){return this.properties.getValue(sn)}get dataHeight(){return this.properties.getValue(rn)}get dataWidth(){return this.properties.getValue(on)}get font(){return this.properties.getValue(nn).scale(this.scale)}get graphAreaHeight(){return this.scale*this.properties.getValue(hn)}get graphAreaWidth(){return this.scale*this.properties.getValue(an)}get maximum(){return this.properties.getValue(ln)}get minimum(){return this.properties.getValue(dn)}get showRamp(){return this.properties.getValue(cn)}get xAxisAxisColor(){return this.properties.getValue(pn)}get xAxisAxisTitle(){return this.properties.getValue(un)}get xAxisMajorTickStepHint(){return this.scale*this.properties.getValue(gn)}get xAxisMaximum(){return this.properties.getValue(mn)}get xAxisMinimum(){return this.properties.getValue(fn)}get xAxisScaleFont(){return this.properties.getValue(xn).scale(this.scale)}get xAxisShowMinorTicks(){return this.properties.getValue(wn)}get xAxisTitleFont(){return this.properties.getValue(yn).scale(this.scale)}get xAxisVisible(){return this.properties.getValue(vn)}get yAxisAxisColor(){return this.properties.getValue(bn)}get yAxisAxisTitle(){return this.properties.getValue(Tn)}get yAxisMajorTickStepHint(){return this.scale*this.properties.getValue(Sn)}get yAxisMaximum(){return this.properties.getValue(Vn)}get yAxisMinimum(){return this.properties.getValue(An)}get yAxisScaleFont(){return this.properties.getValue(Cn).scale(this.scale)}get yAxisShowMinorTicks(){return this.properties.getValue(_n)}get yAxisTitleFont(){return this.properties.getValue(Ln).scale(this.scale)}get yAxisVisible(){return this.properties.getValue(Pn)}}const Mn="data_type",Rn="effect_3d",En="state_count",Wn="square_led",Bn="off_color",In="off_label",On="font",Hn="on_color",Nn="on_label",Fn="bulb_border",Dn="bulb_border_color",$n="state_color_fallback",jn="state_label_fallback",Gn="show_boolean_label";class zn extends ie{constructor(t,e){super(t,e),this.states=[],this.properties.add(new L("bit")),this.properties.add(new L(Mn)),this.properties.add(new k(Rn)),this.properties.add(new k(Wn)),this.properties.add(new L(En,2)),this.properties.add(new M(Bn)),this.properties.add(new C(In)),this.properties.add(new M(Hn)),this.properties.add(new C(Nn)),this.properties.add(new R(On)),this.properties.add(new k(Gn)),this.properties.add(new M($n)),this.properties.add(new C(jn)),this.properties.add(new L(Fn,3)),this.properties.add(new M(Dn,i.DARK_GRAY))}parseNode(t){if(super.parseNode(t),this.stateCount>2)for(let e=0;e<this.stateCount;e++){const i=new M(`state_color_${e}`);i.value=t.getColor(`state_color_${e}`),this.properties.add(i);const s=new C(`state_label_${e}`);s.value=t.getString(`state_label_${e}`),this.properties.add(s);const r=new P(`state_value_${e}`);r.value=t.getFloat(`state_value_${e}`),this.properties.add(r),this.states.push({label:this.properties.getValue(s.name),color:this.properties.getValue(i.name),value:this.properties.getValue(r.name)})}}init(){this.areaRegion={id:`${this.wuid}-area`,click:()=>{const t={pvName:this.pvName};this.display.fireEvent("openpv",t)},cursor:"pointer",tooltip:()=>this.tooltip}}get booleanValue(){var t,e,i;return 0===this.dataType?this.bit<0?Boolean(null===(t=this.pv)||void 0===t?void 0:t.toNumber()):void 0!==(null===(e=this.pv)||void 0===e?void 0:e.value)&&((null===(i=this.pv)||void 0===i?void 0:i.value)>>this.bit&1)>0:(this.dataType,!1)}get bulbColor(){var t;if(this.stateCount<=2)return this.booleanValue?this.onColor:this.offColor;for(const e of this.states)if(e.value===(null===(t=this.pv)||void 0===t?void 0:t.value))return e.color;return this.stateColorFallback}get label(){var t;if(2===this.stateCount)return this.booleanValue?this.onLabel:this.offLabel;for(const e of this.states)if(e.value===(null===(t=this.pv)||void 0===t?void 0:t.value))return e.label;return this.stateLabelFallback}draw(t){const e=c(this.bounds,3*this.scale);this.squareLed?this.effect3d?this.drawSquare3d(t,e):this.drawSquare2d(t,e):this.effect3d?this.drawCircle3d(t,e):this.drawCircle2d(t,e),this.showBooleanLabel&&t.fillText({x:e.x+e.width/2,y:e.y+e.height/2,font:this.font,baseline:"middle",align:"center",color:this.foregroundColor,text:this.label})}drawCircle2d(t,e){const i=e.x+e.width/2,s=e.y+e.height/2;let r=e.width/2,o=e.height/2;if(this.bulbBorder>0&&(r-=this.bulbBorder/2,o-=this.bulbBorder/2),t.fillEllipse({cx:i,cy:s,rx:r,ry:o,color:this.bulbColor}),t.strokeEllipse({cx:i,cy:s,rx:r,ry:o,color:this.bulbBorderColor,lineWidth:this.bulbBorder}),this.pv&&this.pv.navigable&&!this.pv.disconnected){t.addHitRegion(this.areaRegion).addEllipse(i,s,r,o,0,0,2*Math.PI)}}drawCircle3d(t,e){const s=e.x+e.width/2,r=e.y+e.height/2;let o=e.width/2,n=e.height/2;t.fillEllipse({cx:s,cy:r,rx:o,ry:n,color:i.WHITE});let h=t.createLinearGradient(e.x,e.y,e.x+e.width,e.y+e.height);h.addColorStop(0,this.bulbBorderColor.toString()),h.addColorStop(1,this.bulbBorderColor.withAlpha(0).toString()),t.fillEllipse({cx:s,cy:r,rx:o,ry:n,gradient:h});if(o=(e.width-2*this.bulbBorder)/2,n=(e.height-2*this.bulbBorder)/2,t.fillEllipse({cx:s,cy:r,rx:o,ry:n,color:this.bulbColor}),h=t.createLinearGradient(e.x,e.y,e.x+e.width,e.y+e.height),h.addColorStop(0,i.WHITE.toString()),h.addColorStop(1,this.bulbBorderColor.withAlpha(0).toString()),t.fillEllipse({cx:s,cy:r,rx:o,ry:n,gradient:h}),this.pv&&this.pv.navigable&&!this.pv.disconnected){t.addHitRegion(this.areaRegion).addEllipse(s,r,o,n,0,0,2*Math.PI)}}drawSquare2d(t,e){const i=l(e.x,e.y,e.width,e.height,this.bulbBorder);if(t.fillRect(Object.assign(Object.assign({},i),{color:this.bulbColor})),t.strokeRect(Object.assign(Object.assign({},i),{color:this.bulbBorderColor,lineWidth:this.bulbBorder})),this.pv&&this.pv.navigable&&!this.pv.disconnected){t.addHitRegion(this.areaRegion).addRect(e.x,e.y,e.width,e.height)}}drawSquare3d(t,e){if(t.fillRect(Object.assign(Object.assign({},e),{color:this.bulbBorderColor})),this.pv&&this.pv.navigable&&!this.pv.disconnected){t.addHitRegion(this.areaRegion).addRect(e.x,e.y,e.width,e.height)}let i=t.createLinearGradient(e.x,e.y,e.x+e.width,e.y);i.addColorStop(0,"rgba(0,0,0,0.078)"),i.addColorStop(1,"rgba(0,0,0,0.39)"),t.fillPath({gradient:i,path:new T(e.x,e.y).lineTo(e.x+this.bulbBorder,e.y+this.bulbBorder).lineTo(e.x+this.bulbBorder,e.y+e.height-this.bulbBorder).lineTo(e.x,e.y+e.height)}),i=t.createLinearGradient(e.x,e.y,e.x,e.y+e.height),i.addColorStop(0,"rgba(0,0,0,0.078)"),i.addColorStop(1,"rgba(0,0,0,0.39)"),t.fillPath({gradient:i,path:new T(e.x,e.y).lineTo(e.x+this.bulbBorder,e.y+this.bulbBorder).lineTo(e.x+e.width-this.bulbBorder,e.y+this.bulbBorder).lineTo(e.x+e.width,e.y)}),i=t.createLinearGradient(e.x,e.y,e.x+e.width,e.y),i.addColorStop(0,"rgba(255,255,255,0.078)"),i.addColorStop(1,"rgba(255,255,255,0.39)"),t.fillPath({gradient:i,path:new T(e.x+e.width,e.y).lineTo(e.x+e.width-this.bulbBorder,e.y+this.bulbBorder).lineTo(e.x+e.width-this.bulbBorder,e.y+e.height-this.bulbBorder).lineTo(e.x+e.width,e.y+e.height)}),i=t.createLinearGradient(e.x,e.y,e.x,e.y+e.height),i.addColorStop(0,"rgba(255,255,255,0.078)"),i.addColorStop(1,"rgba(255,255,255,0.39)"),t.fillPath({gradient:i,path:new T(e.x,e.y+e.height).lineTo(e.x+this.bulbBorder,e.y+e.height-this.bulbBorder).lineTo(e.x+e.width-this.bulbBorder,e.y+e.height-this.bulbBorder).lineTo(e.x+e.width,e.y+e.height)});const s=e.x+this.bulbBorder,r=e.y+this.bulbBorder,o=e.width-2*this.bulbBorder,n=e.height-2*this.bulbBorder;t.fillRect({x:s,y:r,width:o,height:n,color:this.bulbColor}),i=t.createLinearGradient(e.x,e.y,e.x+e.width,e.y+e.height),i.addColorStop(0,"rgba(255,255,255,0.784)"),i.addColorStop(1,this.bulbColor.withAlpha(0).toString()),t.fillRect({x:s,y:r,width:o,height:n,gradient:i})}get bit(){return this.properties.getValue("bit")}get dataType(){return this.properties.getValue(Mn)}get squareLed(){return this.properties.getValue(Wn)}get showBooleanLabel(){return this.properties.getValue(Gn)}get font(){return this.properties.getValue(On).scale(this.scale)}get effect3d(){return this.properties.getValue(Rn)}get stateCount(){return this.properties.getValue(En)}get bulbBorder(){return this.scale*this.properties.getValue(Fn)}get bulbBorderColor(){return this.properties.getValue(Dn)}get offLabel(){return this.properties.getValue(In)}get offColor(){return this.properties.getValue(Bn)}get onLabel(){return this.properties.getValue(Nn)}get onColor(){return this.properties.getValue(Hn)}get stateLabelFallback(){return this.properties.getValue(jn)}get stateColorFallback(){return this.properties.getValue($n)}}const Un=m(45),qn=(1-Math.sin(Un)/2)/(2*Math.cos(Un)),Yn="color_hi",Xn="color_hihi",Kn="color_lo",Zn="color_lolo",Jn="font",Qn="level_hi",th="level_hihi",eh="level_lo",ih="level_lolo",sh="log_scale",rh="minimum",oh="maximum",nh="needle_color",hh="ramp_gradient",ah="scale_font",lh="show_hi",dh="show_hihi",ch="show_lo",ph="show_lolo",uh="show_ramp",gh="value_label_format";class mh extends ie{constructor(t,e){super(t,e),this.properties.add(new M(Yn)),this.properties.add(new M(Xn)),this.properties.add(new M(Kn)),this.properties.add(new M(Zn)),this.properties.add(new R(Jn)),this.properties.add(new L(Qn)),this.properties.add(new L(th)),this.properties.add(new L(eh)),this.properties.add(new L(ih)),this.properties.add(new k(sh)),this.properties.add(new L(oh)),this.properties.add(new L(rh)),this.properties.add(new M(nh)),this.properties.add(new k(hh)),this.properties.add(new R(ah)),this.properties.add(new k(lh)),this.properties.add(new k(dh)),this.properties.add(new k(ch)),this.properties.add(new k(ph)),this.properties.add(new k(uh,!0)),this.properties.add(new C(gh))}init(){this.areaRegion={id:`${this.wuid}-area`,click:()=>{const t={pvName:this.pvName};this.display.fireEvent("openpv",t)},tooltip:()=>this.tooltip,cursor:"pointer"}}draw(t){if(t.fillRect({x:this.x,y:this.y,width:this.width,height:this.height,color:this.backgroundColor}),this.showRamp&&this.drawRamp(t),this.pv&&this.pv.navigable&&!this.pv.disconnected){t.addHitRegion(this.areaRegion).addRect(this.x,this.y,this.width,this.height)}}drawRamp(t){const e=String(this.minimum),i=t.measureText(e,this.scaleFont),s=String(this.maximum),r=t.measureText(s,this.scaleFont),o=Math.max(i.width,r.width)/2;let n=this.height,h=this.width;n>qn*(h-2*o)&&(n=Math.floor(qn*(h-2*o)));const a=n/(1-Math.sin(Un)/2),l={x:Math.floor(this.x-a*(1-Math.cos(Un))+o),y:this.y,width:Math.floor(2*a),height:Math.floor(2*a)},{rampWidth:d}=this,p=c(l,l.width/4-d,l.height/4-d);p.width=Math.min(p.width,p.height),p.height=p.width;const u=new bo(d,135,45);u.lolo=this.levelLoLo,u.loloColor=this.colorLoLo,u.showLoLo=!0,u.lo=this.levelLo,u.loColor=this.colorLo,u.showLo=!0,u.hi=this.levelHi,u.hiColor=this.colorHi,u.showHi=!0,u.hihi=this.levelHiHi,u.hihiColor=this.colorHiHi,u.showHiHi=!0,u.minimum=this.minimum,u.maximum=this.maximum,u.gradient=this.rampGradient,u.logScale=this.logScale,u.draw(t,l,p),this.drawNeedle(t,l,u);const g=et.ARIAL_12_BOLD.scale(this.scale);if(this.pv&&void 0!==this.pv.value){const e=this.format(this.pv.value),i=t.measureText(e,g);t.fillText({x:l.x+l.width/2-i.width/2,y:l.y+l.height/2-l.height/4-(u.getRadius()-l.height/4)/2-i.height/2,align:"left",baseline:"top",font:g,text:e,color:this.foregroundColor})}}drawNeedle(t,e,i){const s=e.x+e.width/2,r=e.y+e.height/2;let o;if(this.pv&&void 0!==this.pv.value){const t=i.getValueInRange(this.pv.value);o=360-i.getValuePosition(t),this.maximum>this.minimum?t>this.maximum?o+=8:t<this.minimum&&(o-=8):t>this.minimum?o-=8:t<this.maximum&&(o+=8)}else o=360-i.getValuePosition(this.minimum+this.maximum/2);const n=m(o),{needleWidth:h,gapBetweenNeedleScale:a,scale:l}=this,c=d(s+e.width/4,r-h/2+3*l,s,r,n),p=d(s+i.getRadius()-a,r,s,r,n),u=d(s+e.width/4,r+h/2-3*l,s,r,n);t.fillPath({color:this.needleColor,path:new T(c.x,c.y).lineTo(p.x,p.y).lineTo(u.x,u.y).closePath()})}get needleWidth(){return 16*this.scale}get gapBetweenNeedleScale(){return-5*this.scale}get rampWidth(){return 12*this.scale}format(t){return this.valueLabelFormat?new vo(this.valueLabelFormat).format(t):String(Number(t.toFixed(3)))}get colorLo(){return this.properties.getValue(Kn)}get colorLoLo(){return this.properties.getValue(Zn)}get colorHi(){return this.properties.getValue(Yn)}get colorHiHi(){return this.properties.getValue(Xn)}get font(){return this.properties.getValue(Jn).scale(this.scale)}get levelLo(){return this.properties.getValue(eh)}get levelLoLo(){return this.properties.getValue(ih)}get levelHi(){return this.properties.getValue(Qn)}get levelHiHi(){return this.properties.getValue(th)}get logScale(){return this.properties.getValue(sh)}get minimum(){return this.properties.getValue(rh)}get maximum(){return this.properties.getValue(oh)}get needleColor(){return this.properties.getValue(nh)}get rampGradient(){return this.properties.getValue(hh)}get scaleFont(){return this.properties.getValue(ah).scale(this.scale)}get showLo(){return this.properties.getValue(ch)}get showLoLo(){return this.properties.getValue(ph)}get showHi(){return this.properties.getValue(lh)}get showHiHi(){return this.properties.getValue(dh)}get showRamp(){return this.properties.getValue(uh)}get valueLabelFormat(){return this.properties.getValue(gh)}}const fh="color_hi",xh="color_hihi",wh="color_lo",yh="color_lolo",vh="color_fillbackground",bh="effect_3d",Th="fill_color",Sh="fillcolor_alarm_sensitive",Vh="font",Ah="horizontal",Ch="indicator_mode",_h="level_hi",Lh="level_hihi",Ph="level_lo",kh="level_lolo",Mh="limits_from_pv",Rh="log_scale",Eh="maximum",Wh="major_tick_step_hint",Bh="minimum",Ih="origin",Oh="origin_ignored",Hh="scale_font",Nh="scale_format",Fh="show_hi",Dh="show_hihi",$h="show_label",jh="show_lo",Gh="show_lolo",zh="show_markers",Uh="show_minor_ticks",qh="show_scale",Yh="transparent_background",Xh="value_label_format";class Kh extends ie{constructor(t,e){super(t,e),this.properties.add(new M(fh)),this.properties.add(new M(xh)),this.properties.add(new M(wh)),this.properties.add(new M(yh)),this.properties.add(new M(vh)),this.properties.add(new k(bh)),this.properties.add(new M(Th)),this.properties.add(new k(Sh,!1)),this.properties.add(new R(Vh)),this.properties.add(new k(Ah)),this.properties.add(new k(Ch)),this.properties.add(new P(_h)),this.properties.add(new P(Lh)),this.properties.add(new P(Ph)),this.properties.add(new P(kh)),this.properties.add(new k(Mh)),this.properties.add(new k(Rh)),this.properties.add(new P(Eh)),this.properties.add(new P(Wh)),this.properties.add(new P(Bh)),this.properties.add(new P(Ih,0)),this.properties.add(new k(Oh,!0)),this.properties.add(new R(Hh)),this.properties.add(new C(Nh)),this.properties.add(new k(Fh)),this.properties.add(new k(Dh)),this.properties.add(new k($h)),this.properties.add(new k(jh)),this.properties.add(new k(Gh)),this.properties.add(new k(zh)),this.properties.add(new k(Uh)),this.properties.add(new k(qh)),this.properties.add(new k(Yh)),this.properties.add(new C(Xh))}draw(t){let e=this.area;this.borderAlarmSensitive&&(e=c(this.area,2*this.scale));const i=this.alarmSensitiveBackgroundColor;this.transparentBackground||t.fillRect(Object.assign(Object.assign({},e),{color:i})),this.horizontal?this.drawHorizontal(t,e):this.drawVertical(t,e)}drawVertical(t,e){const i=this.alarmSensitiveForegroundColor,s=new Zo(this.scale,this.scaleFont,this.min,this.max,this.logScale,this.majorTickStepHint,i,this.showMinorTicks,this.showScale);s.scaleFormat=this.scaleFormat;const r=s.drawVertical(t,e.x,e.y,e.height,!0);let o=0;this.showMarkers&&(o=this.drawVerticalMarkers(t,s,e)),this.drawVerticalBar(t,s,{x:e.x+r,y:e.y+s.margin,width:e.width-r-o,height:e.height-2*s.margin})}drawVerticalMarkers(t,e,i){const{lolo:s,lo:r,hi:o,hihi:n}=this,h=et.ARIAL_9.scale(this.scale);let a=0;if(this.showLoLo&&void 0!==s){const e=t.measureText("LOLO",h);a=Math.max(a,e.width)}if(this.showLo&&void 0!==r){const e=t.measureText("LO",h);a=Math.max(a,e.width)}if(this.showHi&&void 0!==o){const e=t.measureText("HI",h);a=Math.max(a,e.width)}if(this.showHiHi&&void 0!==n){const e=t.measureText("HIHI",h);a=Math.max(a,e.width)}const l=i.x+i.width;if(this.showLoLo&&void 0!==s){const i=l-a-this.markerGap,r=Math.round(e.getValuePosition(s));t.strokePath({path:new T(i,r).lineTo(i-this.markerTickLength,r),color:this.colorLoLo,lineWidth:this.markerTickLineWidth}),t.fillText({x:i+this.markerGap,y:r,text:"LOLO",align:"left",baseline:"middle",color:this.colorLoLo,font:h})}if(this.showLo&&void 0!==r){const i=l-a-this.markerGap,s=Math.round(e.getValuePosition(r));t.strokePath({path:new T(i,s).lineTo(i-this.markerTickLength,s),color:this.colorLo,lineWidth:this.markerTickLineWidth}),t.fillText({x:i+this.markerGap,y:s,text:"LO",align:"left",baseline:"middle",color:this.colorLo,font:h})}if(this.showHi&&void 0!==o){const i=l-a-this.markerGap,s=Math.round(e.getValuePosition(o));t.strokePath({path:new T(i,s).lineTo(i-this.markerTickLength,s),color:this.colorHi,lineWidth:this.markerTickLineWidth}),t.fillText({x:i+this.markerGap,y:s,text:"HI",align:"left",baseline:"middle",color:this.colorHi,font:h})}if(this.showHiHi&&void 0!==n){const i=l-a-this.markerGap,s=Math.round(e.getValuePosition(n));t.strokePath({path:new T(i,s).lineTo(i-this.markerTickLength,s),color:this.colorHiHi,lineWidth:this.markerTickLineWidth}),t.fillText({x:i+this.markerGap,y:s,text:"HIHI",align:"left",baseline:"middle",color:this.colorHiHi,font:h})}return this.markerTickLength+this.markerGap+a}drawVerticalBar(t,e,s){var r;const{outlineWidth:o}=this;if(t.fillRect(Object.assign(Object.assign({},s),{color:this.colorFillbackground})),this.effect3d){const e=t.createLinearGradient(s.x,0,s.x+s.width,0);e.addColorStop(0,i.WHITE.toString()),e.addColorStop(1,this.colorFillbackground.withAlpha(0).toString()),t.fillRect(Object.assign(Object.assign({},s),{gradient:e}));const r=c(s,o/2);t.strokeRect(Object.assign(Object.assign({},r),{color:i.GRAY,lineWidth:o}))}const n=this.alarmSensitiveFillColor;if(this.indicatorMode){const r=Math.round(e.getValuePosition(this.getFillValue())),h=s.width,a=this.thumbBreadth,l=g([{x:0,y:a/2},{x:h/2,y:0},{x:h-1,y:a/2},{x:h/2,y:a}],s.x,r-a/2),d=T.fromPoints(l);if(this.effect3d){const{x:e,y:s}=l[0],{x:r,y:h}=l[2],a=t.createLinearGradient(e,s,r,h);a.addColorStop(0,i.WHITE.toString()),a.addColorStop(1,n.toString()),t.fillPath({path:d,gradient:a}),t.strokePath({path:d,color:i.GRAY,lineWidth:o})}else t.fillPath({path:d,color:n})}else{let r=this.originIgnored?this.min:this.origin,h=this.getFillValue();if(h<r){const t=r;r=h,h=t}const a=Math.round(e.getValuePosition(r)),l=Math.round(e.getValuePosition(h)),d=c(Object.assign(Object.assign({},s),{y:a,height:l-a}),o);if(t.fillRect(Object.assign(Object.assign({},d),{color:n})),this.effect3d){const e=t.createLinearGradient(d.x,0,d.x+d.width,0);e.addColorStop(0,i.WHITE.toString()),e.addColorStop(1,n.withAlpha(0).toString()),t.fillRect(Object.assign(Object.assign({},d),{gradient:e}))}}const h=null===(r=this.pv)||void 0===r?void 0:r.value;this.showLabel&&void 0!==h&&t.fillText({x:s.x+s.width/2,y:s.y+s.height/2,align:"center",baseline:"middle",color:this.alarmSensitiveForegroundColor,font:this.font,text:this.format(h)})}drawHorizontal(t,e){const i=this.alarmSensitiveForegroundColor,s=new Zo(this.scale,this.scaleFont,this.min,this.max,this.logScale,this.majorTickStepHint,i,this.showMinorTicks,this.showScale);s.scaleFormat=this.scaleFormat;const r=s.drawHorizontal(t,e.x,e.y+e.height,e.width);let o=0;this.showMarkers&&(o=this.drawHorizontalMarkers(t,s,e)),this.drawHorizontalBar(t,s,{x:e.x+s.margin,y:e.y+o,width:e.width-2*s.margin,height:e.height-r-o})}drawHorizontalMarkers(t,e,i){const{lolo:s,lo:r,hi:o,hihi:n}=this,h=et.ARIAL_9.scale(this.scale);let a=0;if(this.showLoLo&&void 0!==s){const e=t.measureText("LOLO",h);a=Math.max(a,e.height)}if(this.showLo&&void 0!==r){const e=t.measureText("LO",h);a=Math.max(a,e.height)}if(this.showHi&&void 0!==o){const e=t.measureText("HI",h);a=Math.max(a,e.height)}if(this.showHiHi&&void 0!==n){const e=t.measureText("HIHI",h);a=Math.max(a,e.height)}const l=i.y;if(this.showLoLo&&void 0!==s){const i=Math.round(e.getValuePosition(s)),r=l+a+this.markerGap;t.strokePath({path:new T(i,r).lineTo(i,r+this.markerTickLength),color:this.colorLoLo,lineWidth:this.markerTickLineWidth}),t.fillText({x:i,y:l,text:"LOLO",align:"center",baseline:"top",color:this.colorLoLo,font:h})}if(this.showLo&&void 0!==r){const i=Math.round(e.getValuePosition(r)),s=l+a+this.markerGap;t.strokePath({path:new T(i,s).lineTo(i,s+this.markerTickLength),color:this.colorLo,lineWidth:this.markerTickLineWidth}),t.fillText({x:i,y:l,text:"LO",align:"center",baseline:"top",color:this.colorLo,font:h})}if(this.showHi&&void 0!==o){const i=Math.round(e.getValuePosition(o)),s=l+a+this.markerGap;t.strokePath({path:new T(i,s).lineTo(i,s+this.markerTickLength),color:this.colorHi,lineWidth:this.markerTickLineWidth}),t.fillText({x:i,y:l,text:"HI",align:"center",baseline:"top",color:this.colorHi,font:h})}if(this.showHiHi&&void 0!==n){const i=Math.round(e.getValuePosition(n)),s=l+a+this.markerGap;t.strokePath({path:new T(i,s).lineTo(i,s+this.markerTickLength),color:this.colorHiHi,lineWidth:this.markerTickLineWidth}),t.fillText({x:i,y:l,text:"HIHI",align:"center",baseline:"top",color:this.colorHiHi,font:h})}return this.markerTickLength+this.markerGap+a}drawHorizontalBar(t,e,s){var r;const{outlineWidth:o}=this;if(t.fillRect(Object.assign(Object.assign({},s),{color:this.colorFillbackground})),this.effect3d){const e=t.createLinearGradient(0,s.y,0,s.y+s.height);e.addColorStop(0,i.WHITE.toString()),e.addColorStop(1,this.colorFillbackground.withAlpha(0).toString()),t.fillRect(Object.assign(Object.assign({},s),{gradient:e}));const r=c(s,o/2);t.strokeRect(Object.assign(Object.assign({},r),{color:i.GRAY,lineWidth:o}))}const n=this.alarmSensitiveFillColor;if(this.indicatorMode){const r=Math.round(e.getValuePosition(this.getFillValue())),h=s.height,a=this.thumbBreadth,l=g([{x:a/2,y:0},{x:a,y:h/2},{x:a/2,y:h-1},{x:0,y:h/2}],r-a/2,s.y),d=T.fromPoints(l);if(this.effect3d){const{x:e,y:s}=l[0],{x:r,y:h}=l[2],a=t.createLinearGradient(e,s,r,h);a.addColorStop(0,i.WHITE.toString()),a.addColorStop(1,n.toString()),t.fillPath({path:d,gradient:a}),t.strokePath({path:d,color:i.GRAY,lineWidth:o})}else t.fillPath({path:d,color:n})}else{let r=this.originIgnored?this.min:this.origin,h=this.getFillValue();if(h<r){const t=r;r=h,h=t}const a=Math.round(e.getValuePosition(r)),l=Math.round(e.getValuePosition(h)),d=c(Object.assign(Object.assign({},s),{x:a,width:l-a}),o);if(t.fillRect(Object.assign(Object.assign({},d),{color:n})),this.effect3d){const e=t.createLinearGradient(0,d.y,0,d.y+d.height);e.addColorStop(0,i.WHITE.toString()),e.addColorStop(1,n.withAlpha(0).toString()),t.fillRect(Object.assign(Object.assign({},d),{gradient:e}))}}const h=null===(r=this.pv)||void 0===r?void 0:r.value;this.showLabel&&void 0!==h&&t.fillText({x:s.x+s.width/2,y:s.y+s.height/2,align:"center",baseline:"middle",color:this.alarmSensitiveForegroundColor,font:this.font,text:this.format(h)})}get min(){var t,e;return this.limitsFromPv&&null!==(e=null===(t=this.pv)||void 0===t?void 0:t.lowerDisplayLimit)&&void 0!==e?e:this.minimum}get max(){var t,e;return this.limitsFromPv&&null!==(e=null===(t=this.pv)||void 0===t?void 0:t.upperDisplayLimit)&&void 0!==e?e:this.maximum}get lolo(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.lowerAlarmLimit:this.levelLoLo}get lo(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.lowerWarningLimit:this.levelLo}get hi(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.upperWarningLimit:this.levelHi}get hihi(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.upperAlarmLimit:this.levelHiHi}get markerTickLength(){return 10*this.scale}get markerTickLineWidth(){return 2*this.scale}get markerGap(){return 3*this.scale}get thumbBreadth(){return 13*this.scale}get outlineWidth(){return 1*this.scale}get alarmSensitiveFillColor(){if(this.fillColorAlarmSensitive){if(this.isMajorSeverity())return i.RED;if(this.isMinorSeverity())return i.ORANGE}return this.fillColor}getFillValue(){var t,e;let i=null!==(e=null===(t=this.pv)||void 0===t?void 0:t.value)&&void 0!==e?e:this.min;return i=Math.max(this.min,i),i=Math.min(this.max,i),i}format(t){return this.valueLabelFormat?new vo(this.valueLabelFormat).format(t):String(Number(t.toFixed(2)))}get colorLo(){return this.properties.getValue(wh)}get colorLoLo(){return this.properties.getValue(yh)}get colorHi(){return this.properties.getValue(fh)}get colorHiHi(){return this.properties.getValue(xh)}get colorFillbackground(){return this.properties.getValue(vh)}get effect3d(){return this.properties.getValue(bh)}get fillColorAlarmSensitive(){return this.properties.getValue(Sh)}get fillColor(){return this.properties.getValue(Th)}get font(){return this.properties.getValue(Vh).scale(this.scale)}get horizontal(){return this.properties.getValue(Ah)}get indicatorMode(){return this.properties.getValue(Ch)}get levelLo(){return this.properties.getValue(Ph)}get levelLoLo(){return this.properties.getValue(kh)}get levelHi(){return this.properties.getValue(_h)}get levelHiHi(){return this.properties.getValue(Lh)}get limitsFromPv(){return this.properties.getValue(Mh)}get logScale(){return this.properties.getValue(Rh)}get minimum(){return this.properties.getValue(Bh)}get majorTickStepHint(){return this.scale*this.properties.getValue(Wh)}get maximum(){return this.properties.getValue(Eh)}get origin(){return this.properties.getValue(Ih)}get originIgnored(){return this.properties.getValue(Oh)}get scaleFont(){return this.properties.getValue(Hh).scale(this.scale)}get scaleFormat(){return this.properties.getValue(Nh)}get showHi(){return this.properties.getValue(Fh)}get showHiHi(){return this.properties.getValue(Dh)}get showLabel(){return this.properties.getValue($h)}get showLo(){return this.properties.getValue(jh)}get showLoLo(){return this.properties.getValue(Gh)}get showMarkers(){return this.properties.getValue(zh)}get showMinorTicks(){return this.properties.getValue(Uh)}get showScale(){return this.properties.getValue(qh)}get transparentBackground(){return this.properties.getValue(Yh)}get valueLabelFormat(){return this.properties.getValue(Xh)}}const Zh="color_hi",Jh="color_hihi",Qh="color_lo",ta="color_lolo",ea="color_fillbackground",ia="fill_color",sa="fillcolor_alarm_sensitive",ra="effect_3d",oa="level_hi",na="level_hihi",ha="level_lo",aa="level_lolo",la="limits_from_pv",da="log_scale",ca="maximum",pa="major_tick_step_hint",ua="minimum",ga="scale_font",ma="scale_format",fa="show_hi",xa="show_hihi",wa="show_lo",ya="show_lolo",va="show_markers",ba="show_minor_ticks",Ta="show_scale",Sa="transparent_background",Va=new i(160,160,160);class Aa extends ie{constructor(t,e){super(t,e),this.properties.add(new M(Zh)),this.properties.add(new M(Jh)),this.properties.add(new M(Qh)),this.properties.add(new M(ta)),this.properties.add(new M(ea)),this.properties.add(new k(ra)),this.properties.add(new M(ia)),this.properties.add(new k(sa,!1)),this.properties.add(new P(oa)),this.properties.add(new P(na)),this.properties.add(new P(ha)),this.properties.add(new P(aa)),this.properties.add(new k(la)),this.properties.add(new k(da)),this.properties.add(new P(ca)),this.properties.add(new P(pa)),this.properties.add(new P(ua)),this.properties.add(new R(ga)),this.properties.add(new C(ma)),this.properties.add(new k(fa)),this.properties.add(new k(xa)),this.properties.add(new k(wa)),this.properties.add(new k(ya)),this.properties.add(new k(va)),this.properties.add(new k(ba)),this.properties.add(new k(Ta)),this.properties.add(new k(Sa))}draw(t){const{scale:e,min:i,max:s}=this;let r=this.area;this.borderAlarmSensitive&&(r=c(r,2*e));const o=this.alarmSensitiveBackgroundColor;this.transparentBackground||t.fillRect(Object.assign(Object.assign({},r),{color:o}));const n=this.alarmSensitiveForegroundColor,h=new Zo(e,this.scaleFont,i,s,this.logScale,this.majorTickStepHint,n,this.showMinorTicks,this.showScale);h.scaleFormat=this.scaleFormat;const a=h.drawVertical(t,r.x,r.y,r.height,!0);let l=0;this.showMarkers&&(l=this.drawMarkers(t,r,h)),this.drawTank(t,r,a,l,h)}drawMarkers(t,e,i){const{lolo:s,lo:r,hi:o,hihi:n}=this,h=et.ARIAL_9.scale(this.scale);let a=0;if(this.showLoLo&&void 0!==s){const e=t.measureText("LOLO",h);a=Math.max(a,e.width)}if(this.showLo&&void 0!==r){const e=t.measureText("LO",h);a=Math.max(a,e.width)}if(this.showHi&&void 0!==o){const e=t.measureText("HI",h);a=Math.max(a,e.width)}if(this.showHiHi&&void 0!==n){const e=t.measureText("HIHI",h);a=Math.max(a,e.width)}const l=e.x+e.width-a-this.markerGap-this.markerTickLength;if(this.showLoLo&&void 0!==s){const e=Math.round(i.getValuePosition(s));t.strokePath({path:new T(l,e).lineTo(l+this.markerTickLength,e),color:this.colorLoLo,lineWidth:this.markerTickLineWidth}),t.fillText({x:l+this.markerTickLength+this.markerGap,y:e,text:"LOLO",align:"left",baseline:"middle",color:this.colorLoLo,font:h})}if(this.showLo&&void 0!==r){const e=Math.round(i.getValuePosition(r));t.strokePath({path:new T(l,e).lineTo(l+this.markerTickLength,e),color:this.colorLo,lineWidth:this.markerTickLineWidth}),t.fillText({x:l+this.markerTickLength+this.markerGap,y:e,text:"LO",align:"left",baseline:"middle",color:this.colorLo,font:h})}if(this.showHi&&void 0!==o){const e=Math.round(i.getValuePosition(o));t.strokePath({path:new T(l,e).lineTo(l+this.markerTickLength,e),color:this.colorHi,lineWidth:this.markerTickLineWidth}),t.fillText({x:l+this.markerTickLength+this.markerGap,y:e,text:"HI",align:"left",baseline:"middle",color:this.colorHi,font:h})}if(this.showHiHi&&void 0!==n){const e=Math.round(i.getValuePosition(n));t.strokePath({path:new T(l,e).lineTo(l+this.markerTickLength,e),color:this.colorHiHi,lineWidth:this.markerTickLineWidth}),t.fillText({x:l+this.markerTickLength+this.markerGap,y:e,text:"HIHI",align:"left",baseline:"middle",color:this.colorHiHi,font:h})}return this.markerTickLength+this.markerGap+a}drawTank(t,e,s,r,o){const n=this.alarmSensitiveForegroundColor,{scale:h,outlineWidth:a}=this,l=e.x+s,d=e.y+o.margin,p=e.width-s-r,u=e.height-2*o.margin;let g=this.defaultCorner,m=.55;p<2*g&&(m=.6);const f=Math.floor(p*m);g>2*f-p-2*a&&(g=2*f-p);const x=o.getValuePosition(this.getFillValue()),w=this.alarmSensitiveFillColor;if(this.effect3d){t.fillRect({x:l,y:d,width:p,height:u,rx:g/2,ry:g/2,color:i.WHITE});let e=t.createLinearGradient(l,d,l+f+2*h,d);e.addColorStop(0,this.colorFillbackground.toString()),e.addColorStop(1,i.WHITE.withAlpha(0).toString()),t.fillRect({x:l,y:d,width:f,height:u,rx:g/2,ry:g/2,gradient:e}),e=t.createLinearGradient(l+p-f-2*h,d,l+p,d),e.addColorStop(0,i.WHITE.withAlpha(0).toString()),e.addColorStop(1,this.colorFillbackground.toString()),t.fillRect({x:l+p-f,y:d,width:f,height:u,rx:g/2,ry:g/2,gradient:e});const s=x,r=d+u-x;e=t.createLinearGradient(l,s,l+f+2*h,s),e.addColorStop(0,w.toString()),e.addColorStop(1,i.WHITE.withAlpha(0).toString()),t.fillRect({x:l,y:s,width:f,height:r,rx:g/2,ry:g/2,gradient:e}),e=t.createLinearGradient(l+p-f-2*h,s,l+p,s),e.addColorStop(0,i.WHITE.withAlpha(0).toString()),e.addColorStop(1,w.toString()),t.fillRect({x:l+p-f,y:s,width:f,height:r,rx:g/2,ry:g/2,gradient:e})}else t.fillRect({x:l,y:d,width:p,height:u,rx:g/2,ry:g/2,color:this.colorFillbackground}),t.fillRect({x:l,y:x,width:p,height:d+u-x,rx:g/2,ry:g/2,color:w});let y=c({x:l,y:d,width:p,height:u},a/2);t.strokeRect(Object.assign(Object.assign({},y),{rx:g/2,ry:g/2,color:this.effect3d?Va:n,lineWidth:a}))}get min(){var t,e;return this.limitsFromPv&&null!==(e=null===(t=this.pv)||void 0===t?void 0:t.lowerDisplayLimit)&&void 0!==e?e:this.minimum}get max(){var t,e;return this.limitsFromPv&&null!==(e=null===(t=this.pv)||void 0===t?void 0:t.upperDisplayLimit)&&void 0!==e?e:this.maximum}get lolo(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.lowerAlarmLimit:this.levelLoLo}get lo(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.lowerWarningLimit:this.levelLo}get hi(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.upperWarningLimit:this.levelHi}get hihi(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.upperAlarmLimit:this.levelHiHi}get defaultCorner(){return 15*this.scale}get markerTickLength(){return 10*this.scale}get markerTickLineWidth(){return 2*this.scale}get markerGap(){return 3*this.scale}get outlineWidth(){return 1*this.scale}get alarmSensitiveFillColor(){if(this.fillColorAlarmSensitive){if(this.isMajorSeverity())return i.RED;if(this.isMinorSeverity())return i.ORANGE}return this.fillColor}getFillValue(){var t,e;let i=null!==(e=null===(t=this.pv)||void 0===t?void 0:t.value)&&void 0!==e?e:this.min;return i=Math.max(this.min,i),i=Math.min(this.max,i),i}get colorLo(){return this.properties.getValue(Qh)}get colorLoLo(){return this.properties.getValue(ta)}get colorHi(){return this.properties.getValue(Zh)}get colorHiHi(){return this.properties.getValue(Jh)}get colorFillbackground(){return this.properties.getValue(ea)}get fillColorAlarmSensitive(){return this.properties.getValue(sa)}get fillColor(){return this.properties.getValue(ia)}get effect3d(){return this.properties.getValue(ra)}get levelLo(){return this.properties.getValue(ha)}get levelLoLo(){return this.properties.getValue(aa)}get levelHi(){return this.properties.getValue(oa)}get levelHiHi(){return this.properties.getValue(na)}get limitsFromPv(){return this.properties.getValue(la)}get logScale(){return this.properties.getValue(da)}get minimum(){return this.properties.getValue(ua)}get majorTickStepHint(){return this.scale*this.properties.getValue(pa)}get maximum(){return this.properties.getValue(ca)}get scaleFont(){return this.properties.getValue(ga).scale(this.scale)}get scaleFormat(){return this.properties.getValue(ma)}get showLo(){return this.properties.getValue(wa)}get showLoLo(){return this.properties.getValue(ya)}get showHi(){return this.properties.getValue(fa)}get showHiHi(){return this.properties.getValue(xa)}get showMarkers(){return this.properties.getValue(va)}get showMinorTicks(){return this.properties.getValue(ba)}get showScale(){return this.properties.getValue(Ta)}get transparentBackground(){return this.properties.getValue(Sa)}}const Ca="font",_a="format_type",La="horizontal_alignment",Pa="precision",ka="precision_from_pv",Ma="vertical_alignment";class Ra extends ie{constructor(t,e){super(t,e),this.properties.add(new R(Ca)),this.properties.add(new L(_a)),this.properties.add(new L(La)),this.properties.add(new L(Pa)),this.properties.add(new k(ka)),this.properties.add(new L(Ma))}init(){this.areaRegion={id:`${this.wuid}-area`,click:()=>{const t={pvName:this.pvName};this.display.fireEvent("openpv",t)},tooltip:()=>this.tooltip,cursor:"pointer"}}draw(t){const e=t.ctx;if(this.transparent?this.backgroundAlarmSensitive&&this.alarm&&t.fillRect(Object.assign(Object.assign({},this.area),{color:this.alarmSensitiveBackgroundColor})):t.fillRect(Object.assign(Object.assign({},this.area),{color:this.backgroundColor})),this.pv&&this.pv.navigable&&!this.pv.disconnected){t.addHitRegion(this.areaRegion).addRect(this.x,this.y,this.width,this.height)}e.fillStyle=this.alarmSensitiveForegroundColor.toString(),e.font=this.font.getFontString();const{scale:i}=this;let s=this.area;this.borderAlarmSensitive&&(s=c(s,2*i,2*i));let r=s.x;0===this.horizAlignment?e.textAlign="start":1===this.horizAlignment?(r+=s.width/2,e.textAlign="center"):2===this.horizAlignment&&(r+=s.width,e.textAlign="end");let o=s.y;0===this.vertAlignment?e.textBaseline="top":1===this.vertAlignment?(o+=s.height/2,e.textBaseline="middle"):2===this.vertAlignment&&(o+=s.height,e.textBaseline="bottom");let n=this.text;if(this.pv&&void 0!==this.pv.value){const t=this.precisionFromPV?this.pv.precision:this.precision;n=this.pv.formatValue(this.formatType,t)}e.fillText(n,r,o)}get font(){return this.properties.getValue(Ca).scale(this.scale)}get formatType(){return this.properties.getValue(_a)}get horizAlignment(){return this.properties.getValue(La)}get precision(){return this.properties.getValue(Pa)}get precisionFromPV(){return this.properties.getValue(ka)}get vertAlignment(){return this.properties.getValue(Ma)}}const Ea="color_hi",Wa="color_hihi",Ba="color_lo",Ia="color_lolo",Oa="color_fillbackground",Ha="fill_color",Na="fillcolor_alarm_sensitive",Fa="font",Da="effect_3d",$a="level_hi",ja="level_hihi",Ga="level_lo",za="level_lolo",Ua="limits_from_pv",qa="log_scale",Ya="maximum",Xa="major_tick_step_hint",Ka="minimum",Za="scale_font",Ja="scale_format",Qa="show_bulb",tl="show_hi",el="show_hihi",il="show_lo",sl="show_lolo",rl="show_markers",ol="show_minor_ticks",nl="show_scale",hl="transparent_background",al="unit",ll="value_label_format",dl=new i(160,160,160);class cl extends ie{constructor(t,e){super(t,e),this.properties.add(new M(Ea)),this.properties.add(new M(Wa)),this.properties.add(new M(Ba)),this.properties.add(new M(Ia)),this.properties.add(new M(Oa)),this.properties.add(new M(Ha)),this.properties.add(new k(Na,!1)),this.properties.add(new k(Da)),this.properties.add(new P($a)),this.properties.add(new P(ja)),this.properties.add(new P(Ga)),this.properties.add(new P(za)),this.properties.add(new k(Ua)),this.properties.add(new R(Fa)),this.properties.add(new k(qa)),this.properties.add(new P(Ya)),this.properties.add(new P(Xa)),this.properties.add(new P(Ka)),this.properties.add(new R(Za)),this.properties.add(new C(Ja)),this.properties.add(new k(Qa)),this.properties.add(new k(tl)),this.properties.add(new k(el)),this.properties.add(new k(il)),this.properties.add(new k(sl)),this.properties.add(new k(rl)),this.properties.add(new k(ol)),this.properties.add(new k(nl)),this.properties.add(new k(hl)),this.properties.add(new L(al)),this.properties.add(new C(ll))}draw(t){var e;const{scale:s,min:r,max:o}=this;let n=this.area;this.borderAlarmSensitive&&(n=c(this.area,2*this.scale));const h=this.alarmSensitiveBackgroundColor,a=this.alarmSensitiveForegroundColor,l=this.alarmSensitiveFillColor;this.transparentBackground||t.fillRect(Object.assign(Object.assign({},n),{color:h}));let d=n.height;if(this.showBulb){let t=Math.min(n.width/2,this.bulbMaxDiameter);d=n.height<t?0:n.height-t}let p=Object.assign(Object.assign({},n),{height:d});const u=new Zo(s,this.scaleFont,r,o,this.logScale,this.majorTickStepHint,a,this.showMinorTicks,this.showScale);u.scaleFormat=this.scaleFormat;let g=0,m="";if(0===this.unit?m="°C":1===this.unit?m="°F":2===this.unit&&(m="K"),m){const e=et.ARIAL_9.scale(s),i=2*s;g=t.measureText(m,e).height+2*i,t.fillText({x:n.x+n.width/2-this.pipeWidth/2-i,y:n.y+i,baseline:"top",align:"right",color:a,font:e,text:m})}const f=p.x+p.width/2-this.pipeWidth/2-1*s,x=Object.assign(Object.assign({},p),{y:p.y+g,height:p.height-g+u.calculateMargin(t,!1)});u.drawVertical(t,f,x.y,x.height,!1);const w=Math.floor(this.pipeWidth/2);if(p=Object.assign(Object.assign({},p),{y:u.getValuePosition(o)-w,height:u.scaleLength+2*w}),this.drawPipe(t,p,u),this.showMarkers&&this.drawMarkers(t,n,u),this.showBulb){let o=Math.min(n.width/2,this.bulbMaxDiameter);const h=1*s,c=n.x+n.width/2,g=n.y+d+o/2,m=o/2,f=o/2;if(t.fillEllipse({cx:c,cy:g,rx:m,ry:f,color:l}),this.effect3d){const e=t.createLinearGradient(c-m,g-f,c+m,g+f);e.addColorStop(0,i.WHITE.toString()),e.addColorStop(1,l.withAlpha(0).toString()),t.fillEllipse({cx:c,cy:g,rx:m,ry:f,gradient:e})}t.strokeEllipse({cx:c,cy:g,rx:m-h/2,ry:f-h/2,color:this.effect3d?dl:a,lineWidth:h});const x={x:Math.round(p.x+p.width/2-this.pipeWidth/2)+this.outlineWidth,y:Math.floor(u.getValuePosition(r)),width:this.pipeWidth-2*this.outlineWidth,height:3*s};if(this.effect3d){const e=Math.round(p.x+p.width/2-this.pipeWidth/2),s=e+this.pipeWidth,r=t.createLinearGradient(e,x.y,s,x.y);r.addColorStop(0,i.WHITE.toString()),r.addColorStop(1,l.toString()),t.fillRect(Object.assign(Object.assign({},x),{gradient:r}))}else t.fillRect(Object.assign(Object.assign({},x),{color:l}));const w=null===(e=this.pv)||void 0===e?void 0:e.value;w&&t.fillText({x:c,y:g,align:"center",baseline:"middle",color:l.contrast(),font:this.font,text:this.format(w)})}}drawPipe(t,e,s){const{scale:r,outlineWidth:o,min:n,max:h}=this,a=this.alarmSensitiveForegroundColor,l=this.alarmSensitiveFillColor,d={x:Math.round(e.x+e.width/2-this.pipeWidth/2),y:e.y,width:this.pipeWidth,height:e.height},p=this.getFillValue();let u=s.getValuePosition(p);h>n?p>h?u-=10*r:p<n&&(u+=10*r):p>n?u+=10*r:p<h&&(u-=10*r);const g=this.pipeWidth/2,{x:m,y:f,width:x,height:w}=d;if(this.effect3d){let e=t.createLinearGradient(m,f,m+x,f);e.addColorStop(0,i.WHITE.toString()),e.addColorStop(1,this.colorFillbackground.toString()),t.fillRect(Object.assign(Object.assign({},d),{rx:g/2,ry:g/2,gradient:e})),e=t.createLinearGradient(m,f,m+x,f),e.addColorStop(0,i.WHITE.toString()),e.addColorStop(1,l.toString()),t.fillRect({x:m,y:u,width:x,height:f+w-u,rx:g/2,ry:g/2,gradient:e})}else t.fillRect(Object.assign(Object.assign({},d),{rx:g/2,ry:g/2,color:this.colorFillbackground})),t.fillRect({x:m,y:u,width:x,height:f+w-u,rx:g/2,ry:g/2,color:l});let y=c(d,o/2);t.strokeRect(Object.assign(Object.assign({},y),{rx:g/2,ry:g/2,color:this.effect3d?dl:a,lineWidth:o}))}drawMarkers(t,e,i){const{lolo:s,lo:r,hi:o,hihi:n}=this,h=et.ARIAL_9.scale(this.scale),a=e.x+e.width/2+this.pipeWidth/2;if(this.showLoLo&&void 0!==s){const e=Math.round(i.getValuePosition(s));t.strokePath({path:new T(a,e).lineTo(a+this.markerTickLength,e),color:this.colorLoLo,lineWidth:this.markerTickLineWidth}),t.fillText({x:a+this.markerTickLength+this.markerGap,y:e,text:"LOLO",align:"left",baseline:"middle",color:this.colorLoLo,font:h})}if(this.showLo&&void 0!==r){const e=Math.round(i.getValuePosition(r));t.strokePath({path:new T(a,e).lineTo(a+this.markerTickLength,e),color:this.colorLo,lineWidth:this.markerTickLineWidth}),t.fillText({x:a+this.markerTickLength+this.markerGap,y:e,text:"LO",align:"left",baseline:"middle",color:this.colorLo,font:h})}if(this.showHi&&void 0!==o){const e=Math.round(i.getValuePosition(o));t.strokePath({path:new T(a,e).lineTo(a+this.markerTickLength,e),color:this.colorHi,lineWidth:this.markerTickLineWidth}),t.fillText({x:a+this.markerTickLength+this.markerGap,y:e,text:"HI",align:"left",baseline:"middle",color:this.colorHi,font:h})}if(this.showHiHi&&void 0!==n){const e=Math.round(i.getValuePosition(n));t.strokePath({path:new T(a,e).lineTo(a+this.markerTickLength,e),color:this.colorHiHi,lineWidth:this.markerTickLineWidth}),t.fillText({x:a+this.markerTickLength+this.markerGap,y:e,text:"HIHI",align:"left",baseline:"middle",color:this.colorHiHi,font:h})}}get min(){var t,e;return this.limitsFromPv&&null!==(e=null===(t=this.pv)||void 0===t?void 0:t.lowerDisplayLimit)&&void 0!==e?e:this.minimum}get max(){var t,e;return this.limitsFromPv&&null!==(e=null===(t=this.pv)||void 0===t?void 0:t.upperDisplayLimit)&&void 0!==e?e:this.maximum}get lolo(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.lowerAlarmLimit:this.levelLoLo}get lo(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.lowerWarningLimit:this.levelLo}get hi(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.upperWarningLimit:this.levelHi}get hihi(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.upperAlarmLimit:this.levelHiHi}get pipeWidth(){return 15*this.scale}get bulbMaxDiameter(){return 40*this.scale}get outlineWidth(){return 1*this.scale}get markerTickLength(){return 10*this.scale}get markerTickLineWidth(){return 2*this.scale}get markerGap(){return 3*this.scale}get alarmSensitiveFillColor(){if(this.fillColorAlarmSensitive){if(this.isMajorSeverity())return i.RED;if(this.isMinorSeverity())return i.ORANGE}return this.fillColor}getFillValue(){var t,e;let i=null!==(e=null===(t=this.pv)||void 0===t?void 0:t.value)&&void 0!==e?e:this.min;return i=Math.max(this.min,i),i=Math.min(this.max,i),i}format(t){return this.valueLabelFormat?new vo(this.valueLabelFormat).format(t):String(Number(t.toFixed(3)))}get colorLo(){return this.properties.getValue(Ba)}get colorLoLo(){return this.properties.getValue(Ia)}get colorHi(){return this.properties.getValue(Ea)}get colorHiHi(){return this.properties.getValue(Wa)}get colorFillbackground(){return this.properties.getValue(Oa)}get fillColorAlarmSensitive(){return this.properties.getValue(Na)}get fillColor(){return this.properties.getValue(Ha)}get font(){return this.properties.getValue(Fa).scale(this.scale)}get effect3d(){return this.properties.getValue(Da)}get levelLo(){return this.properties.getValue(Ga)}get levelLoLo(){return this.properties.getValue(za)}get levelHi(){return this.properties.getValue($a)}get levelHiHi(){return this.properties.getValue(ja)}get limitsFromPv(){return this.properties.getValue(Ua)}get logScale(){return this.properties.getValue(qa)}get minimum(){return this.properties.getValue(Ka)}get majorTickStepHint(){return this.scale*this.properties.getValue(Xa)}get maximum(){return this.properties.getValue(Ya)}get scaleFont(){return this.properties.getValue(Za).scale(this.scale)}get scaleFormat(){return this.properties.getValue(Ja)}get showBulb(){return this.properties.getValue(Qa)}get showMarkers(){return this.properties.getValue(rl)}get showMinorTicks(){return this.properties.getValue(ol)}get showLo(){return this.properties.getValue(il)}get showLoLo(){return this.properties.getValue(sl)}get showHi(){return this.properties.getValue(tl)}get showHiHi(){return this.properties.getValue(el)}get showScale(){return this.properties.getValue(nl)}get transparentBackground(){return this.properties.getValue(hl)}get unit(){return this.properties.getValue(al)}get valueLabelFormat(){return this.properties.getValue(ll)}}const pl=-323.3062,ul=308.2547;class gl{constructor(t,e){this.widget=t,this.index=e}get scale(){return this.widget.scale}getValue(t){return this.widget.properties.getValue(`axis_${this.index}_${t}`)}isDateEnabled(){return 0!==this.timeFormat}isHorizontal(){return 0===this.index||1!==this.index&&!this.yAxis}isVertical(){return!this.isHorizontal()}isPrimary(){return this.index<=1}get effectiveMinimum(){var t;return null!==(t=this._effectiveMinimum)&&void 0!==t?t:this.minimum}set effectiveMinimum(t){this._effectiveMinimum=t}get effectiveMaximum(){var t;return null!==(t=this._effectiveMaximum)&&void 0!==t?t:this.maximum}set effectiveMaximum(t){this._effectiveMaximum=t}performAutoScale(){const t=this.widget.calculateAutoscaledRange(this);t&&(this.effectiveMinimum=t.start,this.effectiveMaximum=t.stop,this.widget.requestRepaint())}applyZoom(t,e){let i,s,r=this.effectiveMinimum,o=this.effectiveMaximum;if(this.logScale){o=Math.log10(o),r=Math.log10(r);const n=Math.log10(t)*e,h=1-e;i=n+r*h,s=n+o*h,i<pl&&(i=pl),i=Math.pow(10,i),s>ul&&(s=ul),s=Math.pow(10,s)}else{const n=Math.max(Math.abs(r),Math.abs(o));r/=n,o/=n;const h=t/n*e,a=1-e;i=(h+r*a)*n,s=(h+o*a)*n}this.effectiveMinimum=i,this.effectiveMaximum=s,this.widget.requestRepaint()}get autoScale(){return this.getValue("auto_scale")}get autoScaleTreshold(){return this.getValue("auto_scale_treshold")}get axisColor(){return this.getValue("axis_color")}get axisTitle(){return this.getValue("axis_title")}get dashGridLine(){return this.getValue("dash_grid_line")}get gridColor(){return this.getValue("grid_color")}get leftBottomSide(){return this.getValue("left_bottom_side")}get logScale(){return this.getValue("log_scale")}get maximum(){return this.getValue("maximum")}get minimum(){return this.getValue("minimum")}get scaleFont(){return this.getValue("scale_font").scale(this.scale)}get scaleFormat(){return this.getValue("scale_format")}get showGrid(){return this.getValue("show_grid")}get timeFormat(){return this.getValue("time_format")}get titleFont(){return this.getValue("title_font").scale(this.scale)}get visible(){return this.getValue("visible")}get yAxis(){return this.getValue("y_axis")}}class ml{constructor(t,e){this.xAxis=t,this.yAxis=e,this.beforeXRanges=[],this.beforeYRanges=[],this.afterXRanges=[],this.afterYRanges=[];for(const e of t)this.beforeXRanges.push({min:e.effectiveMinimum,max:e.effectiveMaximum});for(const t of e)this.beforeYRanges.push({min:t.effectiveMinimum,max:t.effectiveMaximum})}saveState(){for(const t of this.xAxis)this.afterXRanges.push({min:t.effectiveMinimum,max:t.effectiveMaximum});for(const t of this.yAxis)this.afterYRanges.push({min:t.effectiveMinimum,max:t.effectiveMaximum})}undo(){for(let t=0;t<this.xAxis.length;t++){const e=this.xAxis[t],i=this.beforeXRanges[t];e.effectiveMinimum=i.min,e.effectiveMaximum=i.max}for(let t=0;t<this.yAxis.length;t++){const e=this.yAxis[t],i=this.beforeYRanges[t];e.effectiveMinimum=i.min,e.effectiveMaximum=i.max}}redo(){for(let t=0;t<this.xAxis.length;t++){const e=this.xAxis[t],i=this.afterXRanges[t];e.effectiveMinimum=i.min,e.effectiveMaximum=i.max}for(let t=0;t<this.yAxis.length;t++){const e=this.yAxis[t],i=this.afterYRanges[t];e.effectiveMinimum=i.min,e.effectiveMaximum=i.max}}}class fl{constructor(){this.undoStack=[],this.redoStack=[]}canUndo(){return this.undoStack.length>0}canRedo(){return this.redoStack.length>0}add(t){this.undoStack.push(t),this.redoStack.length=0}undo(){const t=this.undoStack.pop();t&&(t.undo(),this.redoStack.push(t))}redo(){const t=this.redoStack.pop();t&&(t.redo(),this.undoStack.push(t))}}class xl{constructor(t,e){this.widget=e,this.id=t}tooltip(){return this.widget.tooltip}mouseDown(t){var e;const{widget:i}=this;switch(null===(e=i.toolbar)||void 0===e?void 0:e.currentTool){case"rubberband-zoom":case"horizontal-zoom":case"vertical-zoom":this.grabStart=t;break;case"panning":this.grabZoomCommand=new ml(i.getXAxes(),i.getYAxes())}}grab(t){var e;switch(null===(e=this.widget.toolbar)||void 0===e?void 0:e.currentTool){case"rubberband-zoom":case"horizontal-zoom":case"vertical-zoom":this.grabStart&&(this.selection=Object.assign(Object.assign({},this.grabStart.point),{width:t.dx,height:t.dy}),this.widget.requestRepaint());break;case"panning":this.pan(t),this.prevGrabEvent=t,this.widget.requestRepaint()}}grabEnd(){var t;const{grabZoomCommand:e,selection:i,widget:s}=this;switch(null===(t=s.toolbar)||void 0===t?void 0:t.currentTool){case"rubberband-zoom":if(i){const t=new ml(s.getXAxes(),s.getYAxes());this.rangeZoomXAxes(i),this.rangeZoomYAxes(i),t.saveState(),s.toolbar.addCommand(t)}break;case"horizontal-zoom":if(i){const t=new ml(s.getXAxes(),s.getYAxes());this.rangeZoomXAxes(i),t.saveState(),s.toolbar.addCommand(t)}break;case"vertical-zoom":if(i){const t=new ml(s.getXAxes(),s.getYAxes());this.rangeZoomYAxes(i),t.saveState(),s.toolbar.addCommand(t)}break;case"panning":e&&(e.saveState(),s.toolbar.addCommand(e))}this.selection=void 0,this.prevGrabEvent=void 0,this.grabZoomCommand=void 0,this.widget.requestRepaint()}click(t){var e;const{widget:i}=this;switch(null===(e=i.toolbar)||void 0===e?void 0:e.currentTool){case"zoom-in":const e=new ml(i.getXAxes(),i.getYAxes());for(const e of i.getAxes()){const i=e.isHorizontal()?t.point.x:t.point.y,s=e.linearScale.getPositionValue(i);e.applyZoom(s,.1)}e.saveState(),i.toolbar.addCommand(e);break;case"zoom-out":const s=new ml(i.getXAxes(),i.getYAxes());for(const e of i.getAxes()){const i=e.isHorizontal()?t.point.x:t.point.y,s=e.linearScale.getPositionValue(i);e.applyZoom(s,-.1)}s.saveState(),i.toolbar.addCommand(s)}}rangeZoomXAxes(t){for(const e of this.widget.getXAxes()){let i=e.linearScale.getPositionValue(t.x),s=e.linearScale.getPositionValue(t.x+t.width);if(i>s){const t=i;i=s,s=t}const r=e.linearScale.getMinMax();i=Math.max(r.start,i),s=Math.min(r.stop,s),e.effectiveMinimum=i,e.effectiveMaximum=s}}rangeZoomYAxes(t){for(const e of this.widget.getYAxes()){let i=e.linearScale.getPositionValue(t.y),s=e.linearScale.getPositionValue(t.y+t.height);if(i>s){const t=i;i=s,s=t}const r=e.linearScale.getMinMax();i=Math.max(r.start,i),s=Math.min(r.stop,s),e.effectiveMinimum=i,e.effectiveMaximum=s}}pan(t){const{prevGrabEvent:e,widget:i}=this;if(e){const s=e.dx-t.dx;if(0!==s)for(const t of i.getXAxes()){const e=t.linearScale,i=e.getMinMax(),r=e.getValuePosition(i.start)+s,o=e.getValuePosition(i.stop)+s;t.effectiveMinimum=e.getPositionValue(r),t.effectiveMaximum=e.getPositionValue(o)}const r=e.dy-t.dy;if(0!==r)for(const t of i.getYAxes()){const e=t.linearScale,i=e.getMinMax(),s=e.getValuePosition(i.start)+r,o=e.getValuePosition(i.stop)+r;t.effectiveMinimum=e.getPositionValue(s),t.effectiveMaximum=e.getPositionValue(o)}}}}class wl{constructor(t){this.pointer=0,this.samples=[],this.samples=Array(t).fill(void 0)}push(t,e){this.samples[this.pointer]={x:t,y:e},this.pointer=(this.pointer+1)%this.samples.length}clear(){this.samples.fill(void 0),this.pointer=0}isFull(){const t=(this.pointer+1)%this.samples.length;return void 0!==this.samples[t]}isEmpty(){return void 0===this.tail()}tail(){return 0===this.pointer?this.samples[this.samples.length-1]:this.samples[this.pointer-1]}snapshot(t=!1){if(t){return this.samples.filter((t=>void 0!==t)).sort(((t,e)=>t.x-e.x))}{const t=this.samples.slice(this.pointer).filter((t=>void 0!==t)),e=this.samples.slice(0,this.pointer).filter((t=>void 0!==t));return t.concat(e)}}}class yl{constructor(t,e,i,s,r){this.bufferSize=t,this.plotMode=e,this.updateMode=i,this.concatenateData=s,this.chronological=r,this.x=0,this.xPending=!1,this.y=0,this.yTimestamp=0,this.yPending=!1,this.xArray=[],this.xArrayPending=!1,this.yArray=[],this.yArrayPending=!1,this.traceData=new wl(t)}clear(){this.traceData.clear(),this.x=0,this.xPending=!1,this.y=0,this.yPending=!1,this.yTimestamp=0,this.xArray=[],this.xArrayPending=!1,this.yArray=[],this.yArrayPending=!1}snapshot(){return this.traceData.snapshot()}updateX(t){this.x=t,this.xPending=!0,this.maybeAddPoint()}updateY(t,e){this.y=t,this.yTimestamp=e,this.yPending=!0,this.maybeAddPoint()}updateXArray(t){this.xArray=t,this.xArrayPending=!0,this.maybeAddArray()}updateYArray(t){this.yArray=t,this.yArrayPending=!0,this.maybeAddArray()}maybeAddPoint(){if(1===this.plotMode&&this.traceData.isFull())return;const{xPending:t,yPending:e,chronological:i,updateMode:s}=this;0===s?(i&&e||!i&&(t||e))&&this.addPoint():1===s?(i&&e||!i&&t&&e)&&this.addPoint():2===s?(i&&e||!i&&t)&&this.addPoint():3===s&&this.yPending&&this.addPoint()}maybeAddArray(){if(1===this.plotMode&&this.traceData.isFull())return;const{xArrayPending:t,yArrayPending:e,chronological:i,updateMode:s}=this;0===s?(i&&e||!i&&(t||e))&&this.addArray():1===s?(i&&e||!i&&t&&e)&&this.addArray():2===s?(i&&e||!i&&t)&&this.addArray():3===s&&this.yArrayPending&&this.addArray()}addPoint(){this.concatenateData||this.traceData.clear();let t=this.x;if(this.chronological)if(5===this.updateMode)t=(new Date).getTime();else if(void 0!==this.yTimestamp)t=this.yTimestamp;else{const e=this.traceData.tail();t=e?e.x+1:0}this.traceData.push(t,this.y),this.xPending=!1,this.yPending=!1}addArray(){this.concatenateData||this.traceData.clear();let{xArray:t,yArray:e}=this;if(this.chronological)if(t=Array(e.length),this.traceData.isEmpty())for(let i=0;i<e.length;i++)t[i]=i;else{const i=this.traceData.tail();for(let s=1;s<e.length;s++)t[s-1]=i.x+s}let i=Math.min(t.length,e.length),s=Math.min(i,this.bufferSize);for(let i=0;i<s;i++)this.traceData.push(t[i],e[i]);this.xArrayPending=!1,this.yArrayPending=!1}}class vl{constructor(t,e){this.widget=t,this.i=e,this.xPVListener=()=>{var t,e;const i=this.xPVInstance;if(i)if(Array.isArray(i.value))null===(t=this.traceData)||void 0===t||t.updateXArray(i.value);else{const t=i.toNumber();null!=t&&(null===(e=this.traceData)||void 0===e||e.updateX(t))}},this.yPVListener=()=>{var t,e,i;const s=this.yPVInstance;if(s)if(Array.isArray(s.value))null===(t=this.traceData)||void 0===t||t.updateYArray(s.value);else{const t=this.widget.getAxis(this.xAxisIndex),r=s.toNumber();if(null!=r)if(t.isDateEnabled()){const t=(s.time||new Date).getTime();null===(e=this.traceData)||void 0===e||e.updateY(r,t)}else null===(i=this.traceData)||void 0===i||i.updateY(r)}}}init(){const{bufferSize:t,plotMode:e,updateMode:i,concatenateData:s}=this,r=!this.xPV;this.traceData=new yl(t,e,i,s,r),this.xPV&&(this.xPVInstance=this.widget.display.pvEngine.createPV(this.xPV),this.xPVInstance.addListener(this.xPVListener)),this.yPV&&(this.yPVInstance=this.widget.display.pvEngine.createPV(this.yPV),this.yPVInstance.addListener(this.yPVListener)),this.widget.addPropertyListener(`trace_${this.i}_x_pv`,(()=>{var t;const e=this.widget.display.pvEngine.createPV(this.xPV);e!==this.xPVInstance&&(null===(t=this.xPVInstance)||void 0===t||t.removeListener(this.xPVListener),this.xPVInstance=e,this.xPVInstance.addListener(this.xPVListener))})),this.widget.addPropertyListener(`trace_${this.i}_y_pv`,(()=>{var t;const e=this.widget.display.pvEngine.createPV(this.yPV);e!==this.yPVInstance&&(null===(t=this.yPVInstance)||void 0===t||t.removeListener(this.yPVListener),this.yPVInstance=e,this.yPVInstance.addListener(this.yPVListener))}))}snapshot(){var t;return(null===(t=this.traceData)||void 0===t?void 0:t.snapshot())||[]}drawTrace(t,e){const{lineWidth:i}=this;if(0===this.traceType)t.strokePath({path:T.fromPoints(e),color:this.traceColor,lineWidth:i});else if(1===this.traceType)t.strokePath({path:T.fromPoints(e),color:this.traceColor,lineWidth:i,dash:[6*this.scale,2*this.scale]});else if(2===this.traceType);else if(3===this.traceType){const s=this.widget.getAxis(this.yAxisIndex).linearScale.getValuePosition(0);for(const r of e)t.strokePath({path:new T(r.x,r.y).lineTo(r.x,s),lineWidth:i,color:this.traceColor,opacity:100/255})}else if(4===this.traceType||5===this.traceType){const s=this.widget.getAxis(this.yAxisIndex).linearScale.getValuePosition(0);for(let i=1;i<e.length;i++){const r=e[i-1],o=e[i];t.fillPath({path:new T(r.x,r.y).lineTo(r.x,s).lineTo(o.x,s).lineTo(o.x,o.y),color:this.traceColor,opacity:100/255})}5===this.traceType&&t.strokePath({path:T.fromPoints(e),color:this.traceColor,lineWidth:i})}else if(6===this.traceType)for(let s=1;s<e.length;s++){const r=e[s-1],o=e[s];t.strokePath({path:new T(r.x,r.y).lineTo(r.x,o.y).lineTo(o.x,o.y),color:this.traceColor,lineWidth:i})}else if(7===this.traceType)for(let s=1;s<e.length;s++){const r=e[s-1],o=e[s];t.strokePath({path:new T(r.x,r.y).lineTo(o.x,r.y).lineTo(o.x,o.y),color:this.traceColor,lineWidth:i})}else if(8===this.traceType){const{scale:s}=this;t.strokePath({path:T.fromPoints(e),color:this.traceColor,lineWidth:i,dash:[6*s,2*s,2*s,2*s]})}else if(9===this.traceType){const{scale:s}=this;t.strokePath({path:T.fromPoints(e),color:this.traceColor,lineWidth:i,dash:[6*s,2*s,2*s,2*s,2*s,2*s]})}else if(10===this.traceType){const{scale:s}=this;t.strokePath({path:T.fromPoints(e),color:this.traceColor,lineWidth:i,dash:[2*s,2*s]})}}drawPoint(t,e){t.ctx.fillStyle=this.traceColor.toString(),t.ctx.strokeStyle=this.traceColor.toString(),t.ctx.lineWidth=1*this.scale;const i=this.pointSize/2,s=e.x,r=e.y;switch(this.pointStyle){case 1:case 3:t.ctx.beginPath(),t.ctx.ellipse(s,r,i,i,0,0,2*Math.PI),t.ctx.fill();break;case 2:t.ctx.beginPath(),t.ctx.ellipse(s,r,i,i,0,0,2*Math.PI),t.ctx.stroke();break;case 4:t.ctx.lineWidth=1*this.scale,t.ctx.beginPath(),t.ctx.moveTo(s-i,r+i),t.ctx.lineTo(s,r-i),t.ctx.lineTo(s+i,r+i),t.ctx.closePath(),t.ctx.stroke();break;case 5:t.ctx.lineWidth=1*this.scale,t.ctx.beginPath(),t.ctx.moveTo(s-i,r+i),t.ctx.lineTo(s,r-i),t.ctx.lineTo(s+i,r+i),t.ctx.closePath(),t.ctx.fill();break;case 6:t.ctx.strokeRect(s-i,r-i,2*i,2*i);break;case 7:t.ctx.fillRect(s-i,r-i,2*i,2*i);break;case 8:case 9:t.ctx.beginPath(),t.ctx.moveTo(s-i,r),t.ctx.lineTo(s,r-i),t.ctx.lineTo(s+i,r),t.ctx.lineTo(s,r+i),t.ctx.closePath(),t.ctx.stroke();break;case 10:t.ctx.beginPath(),t.ctx.moveTo(s-i,r-i),t.ctx.lineTo(s+i,r+i),t.ctx.moveTo(s+i,r-i),t.ctx.lineTo(s-i,r+i),t.ctx.stroke();break;case 11:t.ctx.beginPath(),t.ctx.moveTo(s-i,r),t.ctx.lineTo(s+i,r),t.ctx.moveTo(s,r-i),t.ctx.lineTo(s,r+i),t.ctx.stroke();break;case 12:t.ctx.beginPath(),t.ctx.moveTo(s,r-i),t.ctx.lineTo(s,r+i),t.ctx.stroke()}}clearData(){var t;null===(t=this.traceData)||void 0===t||t.clear()}get scale(){return this.widget.scale}getValue(t){return this.widget.properties.getValue(`trace_${this.i}_${t}`)}get antiAlias(){return this.getValue("anti_alias")}get bufferSize(){return this.getValue("buffer_size")}get concatenateData(){return this.getValue("concatenate_data")}get lineWidth(){return this.scale*this.getValue("line_width")}get name(){return this.getValue("name")}get plotMode(){return this.getValue("plot_mode")}get pointSize(){return this.scale*this.getValue("point_size")}get pointStyle(){return this.getValue("point_style")}get traceColor(){return this.getValue("trace_color")}get traceType(){return this.getValue("trace_type")}get updateDelay(){return this.getValue("update_delay")}get updateMode(){return this.getValue("update_mode")}get visible(){return this.getValue("visible")}get xAxisIndex(){return this.getValue("x_axis_index")}get xPV(){return this.getValue("x_pv")}get yAxisIndex(){return this.getValue("y_axis_index")}get yPV(){return this.getValue("y_pv")}}const bl=new i(236,236,236),Tl=new i(130,130,130);class Sl{constructor(t,e,i,s,r){this.imageFile=e,this.disabledImageFile=i,this.action=r,this.imageElement=new Image,this.disabledImageElement=new Image,this.toggleButton=!1,this.toolButton=!1,this.pushed=!1,this.disabled=!1,this.loadPromise=new Promise(((t,e)=>{this.imageElement.onload=()=>t()})),this.disabledLoadPromise=new Promise(((t,e)=>{this.disabledImageElement.onload=()=>t()})),this.region={id:`${t.xyGraph.wuid}-${e}`,mouseDown:()=>{this.toggleButton||(this.pushed=!0,t.xyGraph.requestRepaint())},mouseOut:()=>{this.toggleButton||(this.pushed=!1),t.xyGraph.requestRepaint()},mouseUp:()=>{this.toggleButton||(this.pushed=!1,t.xyGraph.requestRepaint())},click:()=>{this.toggleButton&&(this.pushed=!this.pushed,this.toolButton&&t.toggleTool(this)),this.action(),t.updateState()},tooltip:()=>s}}loadImage(t){this.imageElement.src=t+this.imageFile,this.disabledImageElement.src=t+this.disabledImageFile}}class Vl{constructor(t){this.xyGraph=t,this.buttons=[],this.imagesLoaded=!1,this.currentTool="default",this.commandBuffer=new fl,this.showLegend=this.createToggleButton("ShowLegend.png","Show Legend",(()=>{t.properties.setValue("show_legend",this.showLegend.pushed)})),this.showLegend.pushed=t.showLegend,t.addPropertyListener("show_legend",(t=>{this.showLegend.pushed=t})),this.autoScale=this.createButton("AutoScale.png","AutoScale.png","Perform Auto Scale",(()=>{const e=new ml(t.getXAxes(),t.getYAxes());t.performAutoScale(),e.saveState(),this.addCommand(e)})),this.rubberbandZoom=this.createToolButton("RubberbandZoom.png","Rubberband Zoom",(()=>{this.rubberbandZoom.pushed?(this.currentTool="rubberband-zoom",t.setCursor("crosshair"),t.autoScaleAllowed=!1):(this.currentTool="default",t.setCursor(void 0),t.autoScaleAllowed=!0)})),this.horizontalZoom=this.createToolButton("HorizontalZoom.png","Horizontal Zoom",(()=>{this.horizontalZoom.pushed?(this.currentTool="horizontal-zoom",t.setCursor("col-resize"),t.autoScaleAllowed=!1):(this.currentTool="default",t.setCursor(void 0),t.autoScaleAllowed=!0)})),this.verticalZoom=this.createToolButton("VerticalZoom.png","Vertical Zoom",(()=>{this.verticalZoom.pushed?(this.currentTool="vertical-zoom",t.setCursor("row-resize"),t.autoScaleAllowed=!1):(this.currentTool="default",t.setCursor(void 0),t.autoScaleAllowed=!0)})),this.zoomIn=this.createToolButton("ZoomIn.png","Zoom In",(()=>{this.zoomIn.pushed?(this.currentTool="zoom-in",t.setCursor("zoom-in"),t.autoScaleAllowed=!1):(this.currentTool="default",t.setCursor(void 0),t.autoScaleAllowed=!0)})),this.zoomOut=this.createToolButton("ZoomOut.png","Zoom Out",(()=>{this.zoomOut.pushed?(this.currentTool="zoom-out",t.setCursor("zoom-out"),t.autoScaleAllowed=!1):(this.currentTool="default",t.setCursor(void 0),t.autoScaleAllowed=!0)})),this.panning=this.createToolButton("Panning.png","Panning",(()=>{this.panning.pushed?(this.currentTool="panning",t.setCursor("grab"),t.autoScaleAllowed=!1):(this.currentTool="default",t.setCursor(void 0),t.autoScaleAllowed=!0)})),this.mouseArrow=this.createToolButton("MouseArrow.png","None",(()=>{this.currentTool="default",t.setCursor(void 0),t.autoScaleAllowed=!0})),this.undo=this.createButton("Undo.png","Undo_Gray.png","Undo",(()=>{this.commandBuffer.undo()})),this.undo.disabled=!0,this.redo=this.createButton("Redo.png","Redo_Gray.png","Redo",(()=>{this.commandBuffer.redo()})),this.redo.disabled=!0,this.camera=this.createButton("camera.png","camera.png","Save Snapshot to PNG File",(()=>{const e=document.createElement("a");try{e.href=t.toDataURL(),e.download=`${t.name}_export.png`,document.body.appendChild(e),e.click()}finally{document.body.removeChild(e)}})),this.toggleTool(this.mouseArrow);const e=this.buttons.map((t=>t.loadPromise)).concat(this.buttons.map((t=>t.disabledLoadPromise)));Promise.all(e).finally((()=>{this.imagesLoaded=!0,t.requestRepaint()}));for(const e of this.buttons)e.loadImage(t.display.imagesPrefix)}updateState(){this.undo.disabled=!this.commandBuffer.canUndo(),this.redo.disabled=!this.commandBuffer.canRedo(),this.xyGraph.requestRepaint()}addCommand(t){this.commandBuffer.add(t),this.updateState()}toggleTool(t){const e=t.pushed;for(const t of this.buttons)t.toolButton&&(t.pushed=!1);e?t.pushed=!0:this.mouseArrow.pushed=!0,this.xyGraph.requestRepaint()}createToolButton(t,e,i){const s=this.createToggleButton(t,e,i);return s.toolButton=!0,s}createToggleButton(t,e,i){const s=this.createButton(t,t,e,i);return s.toggleButton=!0,s}createButton(t,e,i,s){const r=new Sl(this,t,e,i,s);return this.buttons.push(r),r}draw(t,e){const{buttonSize:i}=this,s={x:e.x,y:e.y};return this.drawButton(t,s.x,s.y,this.showLegend),s.x+=i,this.maybeWrap(s,e),this.drawButton(t,s.x,s.y,this.autoScale),s.x+=i,this.maybeWrap(s,e,i/2),this.drawSeparator(t,s.x,s.y),s.x+=i/2,this.maybeWrap(s,e),this.drawButton(t,s.x,s.y,this.rubberbandZoom),s.x+=i,this.maybeWrap(s,e),this.drawButton(t,s.x,s.y,this.horizontalZoom),s.x+=i,this.maybeWrap(s,e),this.drawButton(t,s.x,s.y,this.verticalZoom),s.x+=i,this.maybeWrap(s,e),this.drawButton(t,s.x,s.y,this.zoomIn),s.x+=i,this.maybeWrap(s,e),this.drawButton(t,s.x,s.y,this.zoomOut),s.x+=i,this.maybeWrap(s,e),this.drawButton(t,s.x,s.y,this.panning),s.x+=i,this.maybeWrap(s,e),this.drawButton(t,s.x,s.y,this.mouseArrow),s.x+=i,this.maybeWrap(s,e,i/2),this.drawSeparator(t,s.x,s.y),s.x+=i/2,this.maybeWrap(s,e),this.drawButton(t,s.x,s.y,this.undo),s.x+=i,this.maybeWrap(s,e),this.drawButton(t,s.x,s.y,this.redo),s.x+=i,this.maybeWrap(s,e,i/2),this.drawSeparator(t,s.x,s.y),s.x+=i/2,this.maybeWrap(s,e),this.drawButton(t,s.x,s.y,this.camera),s.x+=i,s.y+i-e.y}maybeWrap(t,e,i){i=null!=i?i:this.buttonSize,t.x+i>e.x+e.width&&(t.x=e.x,t.y+=this.buttonSize)}drawSeparator(t,e,i){const{buttonSize:s}=this,r=1*this.scale,o=Math.round(e+s/4)-r/2;t.strokePath({path:new T(o,i).lineTo(o,i+s),color:Tl,lineWidth:r})}drawButton(t,e,s,r){const{buttonSize:o,scale:n}=this;t.fillRect({x:e,y:s,width:o,height:o,color:bl}),this.xyGraph.enabled&&!r.disabled&&t.addHitRegion(r.region).addRect(e,s,o,o);const h=1*n,a=Math.round(s+h/2)-.5,l=Math.round(e+h/2)-.5,d=Math.round(s+o-h+h/2)-.5,c=Math.round(e+o-h+h/2)-.5;if(t.strokePath({color:r.pushed?i.WHITE:i.BLACK,path:new T(c,d).lineTo(c,a).moveTo(c,d).lineTo(l,d),lineWidth:h}),t.strokePath({color:r.pushed?i.BLACK:i.WHITE,path:new T(l,a).lineTo(c-h,a).moveTo(l,a).lineTo(l,d-h),lineWidth:h}),this.imagesLoaded){const i=r.disabled?r.disabledImageElement:r.imageElement,h=i.naturalHeight*n,a=i.naturalWidth*n,l=Math.round(e+(o-a)/2),d=Math.round(s+(o-h)/2);t.ctx.drawImage(i,l,d,a,h)}}get scale(){return this.xyGraph.scale}get buttonSize(){return 25*this.scale}}const Al="axis_count",Cl="plot_area_background_color",_l="show_legend",Ll="show_plot_area_border",Pl="show_toolbar",kl="title",Ml="title_font",Rl="trace_count",El="transparent";class Wl extends ie{constructor(t,e){super(t,e),this.axes=[],this.traces=[],this.autoScaleAllowed=!0,this.properties.add(new L(Al)),this.properties.add(new M(Cl)),this.properties.add(new k(_l)),this.properties.add(new k(Ll)),this.properties.add(new k(Pl)),this.properties.add(new C(kl)),this.properties.add(new R(Ml)),this.properties.add(new L(Rl)),this.properties.add(new k(El)),this.properties.addGenerator((()=>{const t=[];this.axes=[];const e=this.properties.getValue(Al);for(let i=0;i<e;i++)this.axes.push(new gl(this,i)),t.push(new k(`axis_${i}_auto_scale`),new P(`axis_${i}_auto_scale_treshold`),new M(`axis_${i}_axis_color`),new C(`axis_${i}_axis_title`),new k(`axis_${i}_dash_grid_line`),new M(`axis_${i}_grid_color`),new k(`axis_${i}_log_scale`),new P(`axis_${i}_maximum`),new P(`axis_${i}_minimum`),new R(`axis_${i}_scale_font`),new C(`axis_${i}_scale_format`),new k(`axis_${i}_show_grid`),new L(`axis_${i}_time_format`),new R(`axis_${i}_title_font`),new k(`axis_${i}_visible`)),i>1&&t.push(new k(`axis_${i}_left_bottom_side`),new k(`axis_${i}_y_axis`));this.traces=[];const i=this.properties.getValue(Rl);for(let e=0;e<i;e++)this.traces.push(new vl(this,e)),t.push(new k(`trace_${e}_anti_alias`),new L(`trace_${e}_buffer_size`),new k(`trace_${e}_concatenate_data`),new L(`trace_${e}_line_width`),new C(`trace_${e}_name`),new L(`trace_${e}_plot_mode`),new L(`trace_${e}_point_size`),new L(`trace_${e}_point_style`),new M(`trace_${e}_trace_color`),new L(`trace_${e}_trace_type`),new L(`trace_${e}_update_delay`),new L(`trace_${e}_update_mode`),new k(`trace_${e}_visible`),new L(`trace_${e}_x_axis_index`),new C(`trace_${e}_x_pv`),new _(`trace_${e}_x_pv_value`,`trace_${e}_x_pv`),new L(`trace_${e}_y_axis_index`),new C(`trace_${e}_y_pv`),new _(`trace_${e}_y_pv_value`,`trace_${e}_y_pv`));return t}))}init(){this.plotAreaRegion=new xl(`${this.wuid}-plotarea`,this),this.traces.forEach((t=>t.init()))}draw(t){var e;const{scale:i}=this;let s=this.area;if(this.borderAlarmSensitive&&(s=c(this.area,2*i)),!this.transparent){const e=this.alarmSensitiveBackgroundColor;t.fillRect(Object.assign(Object.assign({},s),{color:e}))}this.showToolbar&&this.drawToolbar(t,s),this.title&&this.drawTitle(t,s);for(const t of this.axes){if(t.autoScale&&this.autoScaleAllowed){const e=this.calculateAutoscaledRange(t);e&&(t.effectiveMinimum=e.start,t.effectiveMaximum=e.stop)}const e=t.effectiveMinimum,s=t.effectiveMaximum;t.linearScale=new Zo(i,t.scaleFont,e,s,t.logScale,50*i,t.axisColor,!0,t.visible),t.linearScale.scaleFormat=t.scaleFormat,t.linearScale.timeFormat=t.timeFormat}this.showLegend&&this.drawLegend(t,s),t.addHitRegion(this.plotAreaRegion).addRect(s.x,s.y,s.width,s.height);const r=this.drawAxes(t,s);this.drawPlotArea(t,r);const o=null===(e=this.plotAreaRegion)||void 0===e?void 0:e.selection;o&&this.drawZoomSelection(t,r,function(t,e){let i=t.x,s=t.y,r=i+t.width,o=s+t.height;if(r<i){const t=i;i=r,r=t}if(o<s){const t=s;s=o,o=t}let n=e.x,h=e.y,a=n+e.width,l=h+e.height;if(a<n){const t=n;n=a,a=t}if(l<h){const t=h;h=l,l=t}const d=Math.max(i,n),c=Math.max(s,h);return{x:d,y:c,width:Math.min(r,a)-d,height:Math.min(o,l)-c}}(r,o))}drawToolbar(t,e){this.toolbar||(this.toolbar=new Vl(this));const i=3*this.scale,s=c(e,i),r=this.toolbar.draw(t,s);e.y+=i+r+i,e.height-=i+r+i}drawTitle(t,e){const i=t.measureText(this.title,this.titleFont).height;t.fillText({x:e.x+e.width/2,y:e.y+i/2,align:"center",baseline:"middle",color:this.alarmSensitiveForegroundColor,font:this.titleFont,text:this.title});const s=2*this.scale;e.y+=i+s,e.height-=i+s}drawAxes(t,e){const{scale:i}=this,s=5*i,r=Object.assign({},e);let o=0;for(const e of this.getXAxes())if(e.visible){let i=0;e.axisTitle&&(i=s+t.measureText(e.axisTitle,e.titleFont).height),o+=i+e.linearScale.measureHorizontalHeight(t)}let n=0,h=0;for(const a of this.getYAxes().reverse()){const l=a.linearScale;if(a.visible){const d=l.calculateMargin(t,!1),c=r.height-o+(o>0?d:0);let p=0;a.axisTitle&&(p=t.measureText(a.axisTitle,a.titleFont).height,t.ctx.save(),t.ctx.translate(r.x+s+p/2,e.y+c/2),t.ctx.rotate(-Math.PI/2),t.fillText({x:0,y:0,align:"center",baseline:"middle",font:a.titleFont,color:a.axisColor,text:a.axisTitle}),t.ctx.restore(),p+=s);const u=p+l.drawVertical(t,r.x+p,e.y,c,!0,!1);r.x+=u,r.width-=u,n+=u;const g=l.margin;h=0===h?g:Math.min(h,g);const m=1*i,f=Math.round(r.x)-m/2,x=Math.round(e.y+d)-m/2;t.strokePath({path:new T(f,x).lineTo(f,x+c-2*d),color:a.axisColor,opacity:100/255,lineWidth:m})}else{const t=r.height-o;l.setDimensions(0,e.y,t,!1)}}let a=0;for(const o of this.getXAxes().reverse()){const h=o.linearScale;if(o.visible){const l=h.calculateMargin(t,!0),d=n-l;let c=0;if(o.axisTitle){c=t.measureText(o.axisTitle,o.titleFont).height;const i=e.x+n+(e.width-n)/2;t.fillText({x:i,y:r.y+r.height-c/2,align:"center",baseline:"middle",font:o.titleFont,color:o.axisColor,text:o.axisTitle}),c+=s}const p=c+h.drawHorizontal(t,e.x+d,r.y+r.height-c,e.width-d);r.height-=p;const u=h.margin;a=0===a?u:Math.min(a,u);const g=1*i,m=Math.round(e.x+d+l)-g/2,f=Math.round(r.y+r.height)-g/2;t.strokePath({path:new T(m,f).lineTo(m+r.width-l,f),color:o.axisColor,opacity:100/255,lineWidth:g})}else{const t=e.x+n,i=e.width-n;h.setDimensions(t,0,i,!0)}}return r.y+=h,r.width-=a,r.height-=o>0?h:2*h,r}drawPlotArea(t,e){const{scale:s}=this,r=1*s;if(t.fillRect(Object.assign(Object.assign({},e),{color:this.plotAreaBackgroundColor})),this.showPlotAreaBorder){const{x:s,y:o,width:n,height:h}=c(e,r/2);t.strokePath({path:new T(s,o).lineTo(s+n,o).lineTo(s+n,o+h),color:i.BLACK,lineWidth:r})}for(const i of this.axes.filter((t=>t.visible&&t.showGrid))){const o=i.linearScale;if(i.isHorizontal())for(const n of o.getGridPositions()){const h=Math.round(o.getX()+n)-r/2;t.strokePath({path:new T(h,e.y).lineTo(h,e.y+e.height),color:i.gridColor,lineWidth:r,dash:i.dashGridLine?[6*s,2*s]:void 0})}else for(const n of o.getGridPositions()){const h=Math.round(o.getY()+n)-r/2;t.strokePath({path:new T(e.x,h).lineTo(e.x+e.width,h),color:i.gridColor,lineWidth:r,dash:i.dashGridLine?[6*s,2*s]:void 0})}}t.ctx.save(),t.ctx.beginPath(),t.ctx.rect(e.x,e.y,e.width,e.height),t.ctx.clip();for(const e of this.traces.filter((t=>t.visible))){const i=this.getAxis(e.xAxisIndex).linearScale,s=this.getAxis(e.yAxisIndex).linearScale,r=[];for(const t of e.snapshot()){const e=i.getValuePosition(t.x),o=s.getValuePosition(t.y);r.push({x:e,y:o})}if(r.length){e.drawTrace(t,r);for(const i of r)e.drawPoint(t,i)}}t.ctx.restore()}drawZoomSelection(t,e,s){var r;const{scale:o}=this;switch(null===(r=this.toolbar)||void 0===r?void 0:r.currentTool){case"rubberband-zoom":t.strokeRect(Object.assign(Object.assign({},s),{color:i.BLACK,lineWidth:1*o}));break;case"horizontal-zoom":const r=s;r.y=e.y,r.height=e.height,t.strokeRect(Object.assign(Object.assign({},p(r)),{color:i.BLACK,lineWidth:1*o}));break;case"vertical-zoom":const n=s;n.x=e.x,n.width=e.width,t.strokeRect(Object.assign(Object.assign({},p(n)),{color:i.BLACK,lineWidth:1*o}))}}drawLegend(t,e){const{scale:i}=this,s=25*i,r=2*i,o=5*i,n=et.ARIAL_10.scale(i);for(const h of this.getYAxes()){const a=this.traces.filter((t=>t.visible&&t.yAxisIndex===h.index)),l=[];let d=[],p=0,u=0;for(const i of a){let h=s+r+o;i.name&&(h+=t.measureText(i.name,n).width),p+h<e.width?(d.push(i),p+=h):(l.push(d),h=Math.max(h,p),d=[i],p=h)}if(d.length&&(l.push(d),u=Math.max(u,p)),!l.length)continue;const g=s*l.length,m={x:Math.round(e.x+(e.width-u)/2),y:Math.round(e.y+e.height-g),width:u,height:g};e.height-=m.height,t.fillRect(Object.assign(Object.assign({},m),{color:this.plotAreaBackgroundColor})),t.strokeRect(Object.assign(Object.assign({},c(m,1*i/2)),{color:h.axisColor}));let f=m.x,x=m.y;for(let e=0;e<l.length;e++){const h=l[e],a=x+e*s,d=a+s/2;for(const e of h){const h=e.pointSize>Math.floor((s-o)/2)?Math.floor(s-o):e.pointSize;switch(e.traceType){case 3:const r=f+s/2;t.strokePath({path:new T(r,a+h).lineTo(r,a+s),lineWidth:e.lineWidth,color:e.traceColor,opacity:100/255}),e.drawPoint(t,{x:r,y:a+h});break;case 4:case 5:const o=[{x:f,y:a+s/2},{x:f+s/2,y:a+h},{x:f+s,y:a+s/2},{x:f+s,y:a+s},{x:f,y:a+s}];t.fillPath({path:T.fromPoints(o),color:e.traceColor,opacity:100/255}),5===e.traceType&&t.strokePath({path:T.fromPoints(o.slice(0,3)),color:e.traceColor,lineWidth:1*i}),e.drawPoint(t,{x:f+s/2,y:a+h});break;default:e.drawTrace(t,[{x:f,y:d},{x:f+s,y:d}]),e.drawPoint(t,{x:f+s/2,y:d})}f+=s+r,e.name&&(t.fillText({x:f,y:d,align:"left",baseline:"middle",color:e.traceColor,font:n,text:e.name}),f+=t.measureText(e.name,n).width),f+=o}}}}setCursor(t){this.plotAreaRegion.cursor=t}calculateAutoscaledRange(t){let e,i;const s=t.logScale;for(const r of this.traces)if(r.visible&&(this.axes[r.xAxisIndex]===t||this.axes[r.yAxisIndex]===t))for(const o of r.snapshot()){const r=t.isHorizontal()?o.x:o.y;(void 0===e||e>r)&&(!s||r>0)&&(e=r),(void 0===i||i<r)&&(!s||r>0)&&(i=r)}if(void 0!==e&&void 0!==i)return{start:e,stop:i}}performAutoScale(){for(const t of this.axes)t.visible&&t.performAutoScale()}clearGraph(){for(const t of this.traces)t.clearData();this.requestRepaint()}getAxes(){return[...this.axes]}getXAxes(){return this.axes.filter((t=>t.isHorizontal()))}getYAxes(){return this.axes.filter((t=>t.isVertical()))}getAxis(t){return this.axes[t]}getTrace(t){return this.traces[t]}get axisCount(){return this.properties.getValue(Al)}get plotAreaBackgroundColor(){return this.properties.getValue(Cl)}get showLegend(){return this.properties.getValue(_l)}get showPlotAreaBorder(){return this.properties.getValue(Ll)}get showToolbar(){return this.properties.getValue(Pl)}get title(){return this.properties.getValue(kl)}get titleFont(){return this.properties.getValue(Ml).scale(this.scale)}get traceCount(){return this.properties.getValue(Rl)}get transparent(){return this.properties.getValue(El)}}class Bl extends re{parseNode(t){super.parseNode(t);for(const e of t.getNodes("widget")){const t=e.getString("widget_type"),i=this.display.createWidget(t,this);i&&(i.parseNode(e),this.widgets.push(i))}}beforeDrawBorder(t){this.transparent||t.fillRect({x:this.holderX,y:this.holderY,width:this.holderWidth,height:this.holderHeight,color:this.backgroundColor})}draw(t){const e=t.createChild(this.width,this.height);for(const t of this.widgets.filter((t=>t.visible)))t.drawHolder(e),t.draw(e),t.drawDecoration(e);for(const t of this.widgets.filter((t=>t.visible)))t.drawOverlay(e);t.copy(e,this.x,this.y)}}const Il="minimum_tab_height",Ol="active_tab",Hl="horizontal_tabs",Nl="tab_count";class Fl{constructor(t,e){this.widget=t,this.i=e,this.headerRegion={id:`${t.wuid}-header-${e}`,click:()=>{t.activeTab!==e&&(t.properties.setValue(Ol,e),t.requestRepaint())},cursor:"pointer"}}get scale(){return this.widget.scale}getValue(t){return this.widget.properties.getValue(`tab_${this.i}_${t}`)}get title(){return this.getValue("title")}get backgroundColor(){return this.getValue("background_color")}get foregroundColor(){return this.getValue("foreground_color")}get enabled(){return this.getValue("enabled")}get font(){return this.getValue("font").scale(this.scale)}}class Dl extends re{constructor(t,e){super(t,e),this.tabs=[],this.properties.add(new L(Il)),this.properties.add(new L(Ol)),this.properties.add(new k(Hl)),this.properties.add(new L(Nl)),this.properties.addGenerator((()=>{this.tabs=[];const t=this.properties.getValue(Nl),e=[];for(let i=0;i<t;i++)this.tabs.push(new Fl(this,i)),e.push(new C(`tab_${i}_title`),new M(`tab_${i}_background_color`),new M(`tab_${i}_foreground_color`),new k(`tab_${i}_enabled`),new R(`tab_${i}_font`));return e}))}parseNode(t){super.parseNode(t);for(const e of t.getNodes("widget")){const t=e.getString("widget_type"),i=this.display.createWidget(t,this);i&&(i.parseNode(e),this.widgets.push(i))}}draw(t){this.horizontalTabs?this.drawHorizontalTabs(t):this.drawVerticalTabs(t)}measureTabOffset(t){return this.horizontalTabs?{x:0,y:this.measureLabelHeight(t)}:{x:this.measureLabelWidth(t),y:0}}measureLabelHeight(t){const{scale:e}=this,i=1*e;let s=this.minimumTabHeight;for(let e=0;e<this.tabs.length;e++){const r=this.tabs[e],o=t.measureText(r.title,r.font).height+i;o>s&&(s=o)}return s+this.margin}measureLabelWidth(t){const{scale:e}=this,i=1*e;let s=this.minimumTabWidth;for(let e=0;e<this.tabs.length;e++){const r=this.tabs[e],o=t.measureText(r.title,r.font).width+i;o>s&&(s=o)}return s+this.margin}drawHorizontalTabs(t){const{margin:e,gap:s,scale:r}=this,o=this.measureLabelHeight(t),n=1*r;let h=this.x;for(let a=0;a<this.tabs.length;a++){const l=this.tabs[a],d=t.measureText(l.title,l.font);let c,p,u,g,m;this.activeTab===a?(c=h,p=this.y,u=d.width+n+e+s,g=o,m=l.backgroundColor):(c=h+s,p=this.y+2*r,u=d.width+n+e-s,g=o-2*r,m=this.darken(l.backgroundColor)),t.fillRect({x:c,y:p,width:u,height:g,color:m});t.addHitRegion(l.headerRegion).addRect(c,p,u,g);const f=t.createLinearGradient(c,p,c,p+g);if(f.addColorStop(0,i.WHITE.toString()),f.addColorStop(1,i.WHITE.withAlpha(0).toString()),t.fillRect({x:c,y:p,width:u,height:g,gradient:f}),t.fillText({x:c+u/2,y:p+g/2,baseline:"middle",align:"center",font:l.font,color:l.foregroundColor,text:l.title}),h+=d.width+n+e-1*r,this.activeTab===a){const e=this.x,i=this.y+o,s=this.width,r=this.height-o;t.fillRect({x:e,y:i,width:s,height:r,color:l.backgroundColor});const n=this.widgets[a],h=t.createChild(s,r);n.drawHolder(h),n.draw(h),n.drawDecoration(h),n.drawOverlay(h),t.copy(h,e,i)}else{this.widgets[a].hide()}}}drawVerticalTabs(t){const{margin:e,gap:s,scale:r}=this,o=this.measureLabelWidth(t),n=1*r;let h=this.y;for(let a=0;a<this.tabs.length;a++){const l=this.tabs[a],d=t.measureText(l.title,l.font),c=Math.max(d.height+n+n,this.minimumTabHeight);let p,u,g,m,f;this.activeTab===a?(p=this.x,u=h,g=o,m=c+e+s,f=l.backgroundColor):(p=this.x+2*r,u=h+s,g=o-2*r,m=c+e-s,f=this.darken(l.backgroundColor)),t.fillRect({x:p,y:u,width:g,height:m,color:f});t.addHitRegion(l.headerRegion).addRect(p,u,g,m);const x=t.createLinearGradient(p,u,p+g,u);if(x.addColorStop(0,i.WHITE.toString()),x.addColorStop(1,i.WHITE.withAlpha(0).toString()),t.fillRect({x:p,y:u,width:g,height:m,gradient:x}),t.fillText({x:p+g/2,y:u+m/2,baseline:"middle",align:"center",font:l.font,color:l.foregroundColor,text:l.title}),h+=c+e-1*r,this.activeTab===a){const e=this.x+o-1*r,i=this.y,s=this.width-o,n=this.height-1*r;t.fillRect({x:e,y:i,width:s,height:n,color:l.backgroundColor});const h=this.widgets[a],d=t.createChild(s,n);h.drawHolder(d),h.draw(d),h.drawDecoration(d),h.drawOverlay(d),t.copy(d,e,i)}else{this.widgets[a].destroy()}}}darken(t){const e=Math.max(0,t.red-30),s=Math.max(0,t.green-30),r=Math.max(0,t.blue-30);return new i(e,s,r)}get margin(){return 10*this.scale}get gap(){return 2*this.scale}get minimumTabWidth(){return 20*this.scale}get minimumTabHeight(){return this.scale*this.properties.getValue(Il)}get activeTab(){return this.properties.getValue(Ol)}get tabCount(){return this.properties.getValue(Nl)}get horizontalTabs(){return this.properties.getValue(Hl)}}const $l="columns_count",jl="column_headers",Gl="column_header_visible",zl="default_content",Ul="font";class ql extends ie{constructor(t,e){super(t,e),this.properties.add(new L($l)),this.properties.add(new N(jl)),this.properties.add(new k(Gl)),this.properties.add(new N(zl)),this.properties.add(new R(Ul)),this.spreadsheet=new Tt(this)}init(){this.tableWrapper=document.createElement("div"),this.tableWrapper.style.display="none",this.table=document.createElement("table"),this.table.style.tableLayout="fixed",this.table.style.borderSpacing="0",this.table.style.borderCollapse="collapse",this.tableWrapper.appendChild(this.table),this.display.rootPanel.appendChild(this.tableWrapper),this.spreadsheet.setContent(this.defaultContent)}draw(t){if(this.tableWrapper){const{x:t,y:e,width:i,height:s}=this.display.measureAbsoluteArea(this);this.tableWrapper.style.backgroundColor="white",this.tableWrapper.style.position="absolute",this.tableWrapper.style.display="block",this.tableWrapper.style.left=`${t}px`,this.tableWrapper.style.top=`${e}px`,this.tableWrapper.style.width=`${i}px`,this.tableWrapper.style.height=`${s}px`,this.tableWrapper.style.border="1px solid rgba(0, 0, 0, 0.1)",this.table.style.font=this.font.getFontString(),this.spreadsheet.dirty&&(this.generateTableContent(),this.spreadsheet.dirty=!1)}}generateTableContent(){for(let t=this.table.rows.length-1;t>=0;t--)this.table.deleteRow(t);if(this.columnHeaderVisible){const t=this.table.insertRow();for(let e=0;e<this.columnsCount;e++){const i=this.columnHeaders[e],s=t.insertCell();s.style.color="#aaa",s.style.textAlign="left",s.style.width=Number(i[1])*this.scale+"px",s.style.overflow="hidden",s.style.padding=4*this.scale+"px",s.style.borderBottom="1px solid rgba(0, 0, 0, 0.1)",0!==e&&(s.style.borderLeft="1px solid rgba(0, 0, 0, 0.1)");const r=document.createTextNode(i[0]);s.appendChild(r)}t.insertCell()}for(const t of this.spreadsheet.getCells()){const e=this.table.insertRow();for(let i=0;i<this.columnsCount;i++){const s=e.insertCell();if(s.style.textAlign="left",s.style.overflow="hidden",s.style.wordWrap="break-word",s.style.textOverflow="ellipsis",s.style.padding=4*this.scale+"px",0!==i&&(s.style.borderLeft="1px solid rgba(0, 0, 0, 0.1)"),void 0!==t[i]){const e=t[i].backgroundColor;e&&(s.style.backgroundColor=e.toString());const r=t[i].foregroundColor;r&&(s.style.color=r.toString());const o=document.createTextNode(t[i].text||"");s.appendChild(o)}}e.insertCell()}}hide(){this.tableWrapper&&(this.tableWrapper.style.display="none")}destroy(){this.tableWrapper&&(this.display.rootPanel.removeChild(this.tableWrapper),this.tableWrapper=void 0,this.table=void 0)}get columnsCount(){return this.properties.getValue($l)}get columnHeaders(){return this.properties.getValue(jl)}get columnHeaderVisible(){return this.properties.getValue(Gl)}get defaultContent(){return this.properties.getValue(zl)}get font(){return this.properties.getValue(Ul).scale(this.scale)}}class Yl extends ie{constructor(t,e){super(t,e),this.properties.add(new C("url"))}init(){this.iframe=document.createElement("iframe"),this.iframe.src="",this.iframe.style.display="none",this.iframe.style.border="0",this.display.rootPanel.appendChild(this.iframe)}draw(t){if(this.iframe){const{x:t,y:e,width:i,height:s}=this.display.measureAbsoluteArea(this);this.iframe.style.position="absolute",this.iframe.style.display="block",this.iframe.style.left=`${t}px`,this.iframe.style.top=`${e}px`,this.iframe.style.width=`${i}px`,this.iframe.style.height=`${s}px`,this.url&&this.prevUrl!==this.url&&(this.iframe.src=this.url,this.prevUrl=this.url)}}hide(){this.iframe&&(this.iframe.style.display="none")}destroy(){this.iframe&&(this.display.rootPanel.removeChild(this.iframe),this.iframe=void 0)}get url(){return this.properties.getValue("url")}}t.CompiledFormula=Re,t.DefaultConsoleHandler=e,t.DefaultPathResolver=Me,t.Display=class{constructor(t){this.targetElement=t,this.repaintRequested=!1,this._editMode=!1,this._showGrid=!1,this._showOutline=!1,this._showRuler=!1,this._selection=[],this._scale=1,this._transparent=!1,this.imagesPrefix="",this.absPrefix="",this.relPrefix="",this.eventListeners={closedisplay:[],opendisplay:[],openpv:[],selection:[],scale:[]},this.rootPanel=document.createElement("div"),this.rootPanel.className="display-root",this.rootPanel.style.overflow="hidden",this.rootPanel.style.position="relative",this.rootPanel.style.fontSize="0",t.appendChild(this.rootPanel);const i=document.createElement("canvas");this.rootPanel.appendChild(i),this.g=new b(i),this.ctx=this.g.ctx,this.pvEngine=new $e(this),this.pvEngine.addProvider(new Je),this.pvEngine.addProvider(new Oe),this.displayRegion={id:"display-root",click:()=>{for(const t of this.rootPanel.getElementsByTagName("input"))t.blur();for(const t of this.rootPanel.getElementsByTagName("textarea"))t.blur();for(const t of this.rootPanel.getElementsByTagName("select"))t.blur()}},this.pathResolver=new Me(this),this.consoleHandler=new e,window.requestAnimationFrame((()=>this.step())),new n(this,i,this.g.hitCanvas)}addProvider(t){this.pvEngine.addProvider(t)}addScriptLibrary(t,e){this.pvEngine.addScriptLibrary(t,e)}setPathResolver(t){this.pathResolver=t}getPathResolver(){return this.pathResolver}setConsoleHandler(t){this.consoleHandler=t}getConsoleHandler(){return this.consoleHandler}step(){this.repaintRequested&&(this.g.clearHitCanvas(),this.drawScreen(),this.repaintRequested=!1),window.requestAnimationFrame((()=>this.step()))}drawScreen(){var t;if(this.instance?(this.rootPanel.style.height=this.instance.holderHeight+"px",this.rootPanel.style.width=this.instance.holderWidth+"px"):(this.rootPanel.style.height="0px",this.rootPanel.style.width="0px"),this.g.resize(this.rootPanel.clientWidth,this.rootPanel.clientHeight),this.transparent&&this.g.clearCanvas(),this.editMode){const t=document.createElement("canvas"),e=t.getContext("2d");t.width=16,t.height=16,e.fillStyle="#d6d6d6",e.fillRect(0,0,8,8),e.fillRect(8,8,8,8),this.ctx.fillStyle=this.ctx.createPattern(t,"repeat"),this.ctx.fillRect(0,0,this.ctx.canvas.width,this.ctx.canvas.height),this.instance&&this.g.fillRect(Object.assign(Object.assign({},this.instance.bounds),{color:this.instance.backgroundColor}))}else this.transparent||this.g.fillCanvas((null===(t=this.instance)||void 0===t?void 0:t.backgroundColor)||i.WHITE);if(this.g.addHitRegion(this.displayRegion).addRect(0,0,this.ctx.canvas.width,this.ctx.canvas.height),this.showGrid&&this.instance){const t=document.createElement("canvas"),e=t.getContext("2d");t.width=25,t.height=25,e.fillStyle=this.instance.foregroundColor.toString(),e.fillRect(0,0,2,1),this.ctx.fillStyle=this.ctx.createPattern(t,"repeat"),this.ctx.fillRect(25,25,this.ctx.canvas.width-50,this.ctx.canvas.height-50)}if(this.showRuler){this.ctx.lineWidth=1,this.ctx.strokeStyle="grey",this.ctx.textBaseline="bottom",this.ctx.textAlign="center",this.ctx.fillStyle="grey",this.ctx.font="12px Arial";let t=0;for(;t<=this.ctx.canvas.width;)t+=100,this.ctx.beginPath(),this.ctx.moveTo(t-75+.5,this.ctx.canvas.height),this.ctx.lineTo(t-75+.5,this.ctx.canvas.height-4),this.ctx.moveTo(t-50+.5,this.ctx.canvas.height),this.ctx.lineTo(t-50+.5,this.ctx.canvas.height-6),this.ctx.moveTo(t-25+.5,this.ctx.canvas.height),this.ctx.lineTo(t-25+.5,this.ctx.canvas.height-4),this.ctx.moveTo(t+.5,this.ctx.canvas.height),this.ctx.lineTo(t+.5,this.ctx.canvas.height-8),this.ctx.stroke(),this.ctx.fillText(String(t),t,this.ctx.canvas.height-8);this.ctx.textAlign="right",this.ctx.textBaseline="middle";let e=0;for(;e<=this.ctx.canvas.height;)e+=100,this.ctx.beginPath(),this.ctx.moveTo(this.ctx.canvas.width,e-75+.5),this.ctx.lineTo(this.ctx.canvas.width-4,e-75+.5),this.ctx.moveTo(this.ctx.canvas.width,e-50+.5),this.ctx.lineTo(this.ctx.canvas.width-6,e-50+.5),this.ctx.moveTo(this.ctx.canvas.width,e-25+.5),this.ctx.lineTo(this.ctx.canvas.width-4,e-25+.5),this.ctx.moveTo(this.ctx.canvas.width,e+.5),this.ctx.lineTo(this.ctx.canvas.width-8,e+.5),this.ctx.stroke(),this.ctx.fillText(String(e),this.ctx.canvas.width-8,e)}this.showOutline&&this.instance&&(this.ctx.lineWidth=1,this.ctx.setLineDash([10,5]),this.ctx.strokeStyle="black",this.ctx.strokeRect(-.5,-.5,this.instance.holderWidth+1,this.instance.holderHeight+1),this.ctx.setLineDash([])),this.instance&&this.instance.draw(this.g);for(const t of this.selection){const e=this.findWidget(t);e&&e.drawSelection(this.ctx)}}requestRepaint(){this.repaintRequested=!0}setTooltip(t){var e;this.rootPanel.title=null!==(e=null==t?void 0:t.trim())&&void 0!==e?e:""}createWidget(t,e){switch(t){case"Action Button":return new oi(this,e);case"Arc":return new ir(this,e);case"Boolean Button":return new bi(this,e);case"Boolean Switch":return new Ei(this,e);case"Byte Monitor":return new yo(this,e);case"Check Box":return new Fi(this,e);case"Choice Button":return new qi(this,e);case"Combo":case"Combo Box":return new Qi(this,e);case"Ellipse":return new pr(this,e);case"Gauge":return new Do(this,e);case"Grouping Container":return new Bl(this,e);case"Image":return new fr(this,e);case"Image Boolean Button":return new us(this,e);case"Image Boolean Indicator":return new Xo(this,e);case"Intensity Graph":return new kn(this,e);case"Label":return new br(this,e);case"LED":return new zn(this,e);case"Linking Container":return new ke(this,e);case"Menu Button":return new fs(this,e);case"Meter":return new mh(this,e);case"Button":return new xs(this,e);case"Polygon":return new Pr(this,e);case"Polyline":return new Hr(this,e);case"Progress Bar":return new Kh(this,e);case"Radio Box":return new Cs(this,e);case"Rectangle":return new Yr(this,e);case"Rounded Rectangle":return new no(this,e);case"Scrollbar":return new Ns(this,e);case"Tabbed Container":return new Dl(this,e);case"Table":return new ql(this,e);case"Tank":return new Aa(this,e);case"Text Input":return new Xs(this,e);case"Text Update":return new Ra(this,e);case"Thermometer":return new cl(this,e);case"Web Browser":return new Yl(this,e);case"XY Graph":return new Wl(this,e);default:console.warn(`Unsupported widget type: ${t}`)}}destroy(){var t;null===(t=this.instance)||void 0===t||t.destroy(),this.instance=void 0,this.pvEngine.clearState(),this.requestRepaint()}resolvePath(t,e){return this.pathResolver.resolve(t,e)}setSource(t){this.reset();const e=t.lastIndexOf("/")+1;return this.relPrefix=t.substring(0,e),new Promise(((e,i)=>{fetch(t,{credentials:"same-origin"}).then((t=>{t.ok&&t.text().then((t=>{this.setSourceString(t),e()})).catch((t=>i(t)))})).catch((t=>i(t)))}))}setSourceString(t){this.reset(),this.instance=new Ae(this);const e=ht.parseFromXML(t);this.instance.parseNode(e),this.pvEngine.init(),this.requestRepaint()}reset(){this.instance&&(this.clearSelection(),this.pvEngine.clearState(),this.instance.destroy(),this.instance=void 0)}measureAbsoluteArea(t){const e=t.bounds;let i=t.parent;for(;i;){if(e.x+=i.x,e.y+=i.y,i instanceof Dl){const{x:t,y:s}=i.measureTabOffset(this.g);e.x+=t,e.y+=s}i=i.parent}return e.x+=t.x-t.holderX,e.y+=t.y-t.holderY,e.width+=t.width-t.holderWidth,e.height+=t.height-t.holderHeight,e.x+=1*this.scale,e.y+=1*this.scale,e}addEventListener(t,e){if(!(t in this.eventListeners))throw new Error(`Unknown event '${t}'`);this.eventListeners[t].push(e)}removeEventListener(t,e){if(!(t in this.eventListeners))throw new Error(`Unknown event '${t}'`);this.eventListeners[t]=this.eventListeners[t].filter((t=>t!==e))}fireEvent(t,e){this.eventListeners[t].forEach((t=>t(e)))}get showGrid(){return this._showGrid}set showGrid(t){this._showGrid=t,this.requestRepaint()}get showOutline(){return this._showOutline}set showOutline(t){this._showOutline=t,this.requestRepaint()}get showRuler(){return this._showRuler}set showRuler(t){this._showRuler=t,this.requestRepaint()}get selection(){return this._selection}set selection(t){this._selection=t,this.requestRepaint();const e={selected:this._selection.slice()};this.fireEvent("selection",e)}get editMode(){return this._editMode}set editMode(t){this._editMode=t,this.requestRepaint()}get scale(){return this._scale}set scale(t){this._scale=t,this.requestRepaint();const e={scale:t};this.fireEvent("scale",e)}get transparent(){return this._transparent}set transparent(t){this._transparent=t,this.requestRepaint()}get widgets(){return this.instance?this.instance.widgets:[]}clearSelection(){this.selection.length&&(this.selection=[])}findWidget(t){if(this.instance)return this.instance.findWidget(t)}findWidgetByName(t){if(this.instance)return this.instance.findWidgetByName(t)}getPVNames(){return this.pvEngine.getPVNames()}getPV(t){return this.pvEngine.getPV(t)}setValues(t){this.pvEngine.setValues(t)}copyCanvas(t){t||(t={x:0,y:0,width:this.g.canvas.width,height:this.g.canvas.height});const e=document.createElement("canvas");return e.width=t.width,e.height=t.height,e.getContext("2d").drawImage(this.g.canvas,t.x,t.y,t.width,t.height,0,0,t.width,t.height),e}toDataURL(t="image/png",e){return this.g.ctx.canvas.toDataURL(t,e)}},t.FormulaCompiler=Ie,t.PV=at,Object.defineProperty(t,"__esModule",{value:!0})}));
2
2
  //# sourceMappingURL=opi.umd.js.map