@synnaxlabs/pluto 0.44.5 → 0.44.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{LinePlot-6cl8_hmn.cjs → LinePlot-DRbAPdEU.cjs} +1 -1
- package/dist/{LinePlot-Ck0rhtFk.js → LinePlot-YMJgGruk.js} +255 -256
- package/dist/ether.cjs +1 -1
- package/dist/ether.js +2 -2
- package/dist/index.cjs +7 -7
- package/dist/index.js +2136 -2151
- package/dist/src/vis/light/aether/light.d.ts +4 -5
- package/dist/src/vis/light/aether/light.d.ts.map +1 -1
- package/dist/src/vis/light/use.d.ts +2 -2
- package/dist/src/vis/light/use.d.ts.map +1 -1
- package/dist/src/vis/schematic/Forms.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -50,4 +50,4 @@ uniform mediump vec2 u_offset_aggregate;
|
|
|
50
50
|
void main(void) {
|
|
51
51
|
gl_Position = vec4((u_scale_aggregate * vec2(a_x, float(a_y)) + u_offset_aggregate) + a_translate, 0.0, 1.0);
|
|
52
52
|
}
|
|
53
|
-
`,Mi=d.z.object({x:pt,y:pt,label:d.z.string().optional(),color:i.cr.colorZ,strokeWidth:d.z.number().default(1),downsample:d.z.number().min(1).max(50).default(1),downsampleMode:nr.default("decimate"),visible:d.z.boolean().optional().default(!0)}),Gc=(n,e,t)=>n===-1||e===-1||n>=t.series.length?NaN:Number(t.series[n].at(e)),Vc=i.i.milliseconds(2);i.K.NAN,i.K.NAN,i.cr.ZERO,i.H.ZERO;const Xc=(n,e)=>e.equals(i.n.UINT8)?n.UNSIGNED_BYTE:n.FLOAT;class ns extends p.GLProgram{translationBufferCache=new Map;constructor(e,t,r){super(e,t,r),this.translationBufferCache=new Map}bindState({strokeWidth:e,color:t}){return this.uniformColor("u_color",t),this.attrStrokeWidth(e)}bindScale(e,t){const r=i.K.scale(e.scale,t.scale),s=i.K.translate(i.K.scale(t.scale,e.offset),t.offset);this.uniformXY("u_scale_aggregate",r),this.uniformXY("u_offset_aggregate",s)}draw({x:e,y:t,count:r,downsample:s,xOffset:o,yOffset:a},l,u,c){const{gl:h}=this.renderCtx;this.bindAttrBuffer("x",e.glBuffer,s,o,u),this.bindAttrBuffer("y",t.glBuffer,s,a,c),h.drawArraysInstanced(h.LINE_STRIP,0,r/s,l)}bindAttrBuffer(e,t,r,s=0,o){const{gl:a}=this.renderCtx;a.bindBuffer(a.ARRAY_BUFFER,t);const l=a.getAttribLocation(this.prog,`a_${e}`),u=Xc(a,o),c=o.density.valueOf();o.equals(i.n.UINT8)?a.vertexAttribIPointer(l,1,u,c*r,c*s):a.vertexAttribPointer(l,1,u,!1,c*r,c*s),a.enableVertexAttribArray(l)}getAndBindTranslationBuffer(e){const{gl:t}=this.renderCtx,r=`${this.renderCtx.aspect}:${e}`,s=this.translationBufferCache.get(r);if(s!=null)return t.bindBuffer(t.ARRAY_BUFFER,s.glBuffer),s;const o=t.createBuffer();if(o==null)throw new p.ht("Failed to create buffer from WebGL context");const a=Jc(this.renderCtx.aspect,e);t.bindBuffer(t.ARRAY_BUFFER,o),t.bufferData(t.ARRAY_BUFFER,a,t.DYNAMIC_DRAW);const l={glBuffer:o,jsBuffer:a};return this.translationBufferCache.set(r,l),l}attrStrokeWidth(e){const{gl:t}=this.renderCtx,{jsBuffer:r}=this.getAndBindTranslationBuffer(e),s=t.getAttribLocation(this.prog,"a_translate");return t.vertexAttribPointer(s,2,t.FLOAT,!1,0,0),t.enableVertexAttribArray(s),t.vertexAttribDivisor(s,1),r.length/2}}class xe{static CONTEXT_KEY="pluto-line-gl-program";uint8HybridProgram;float32Program;constructor(e){this.uint8HybridProgram=new ns(e,jc,ts),this.float32Program=new ns(e,Wc,ts)}get gl(){return this.uint8HybridProgram.renderCtx.gl}getProgram(e){return e.equals(i.n.UINT8)?this.uint8HybridProgram:this.float32Program}static create(e,t){const r=new xe(t);return e.set(xe.CONTEXT_KEY,r),r}static use(e){const t=e.get(xe.CONTEXT_KEY);if(t==null)throw new p.ht("GLProgram not found");return t}}class zt extends p.Leaf{static TYPE="line";schema=Mi;afterUpdate(e){const{internal:t}=this,r={onStatusChange:p.useAdder(e)};t.xTelem=q(e,this.state.x,t.xTelem,r),t.yTelem=q(e,this.state.y,t.yTelem,r),t.instrumentation=p.useInstrumentation(e,"line"),t.lineCtx=xe.use(e),t.requestRender=Ft(e),t.stopListeningXTelem?.(),t.stopListeningYTelem?.(),t.stopListeningXTelem=t.xTelem.onChange(()=>t.requestRender("data")),t.stopListeningYTelem=t.yTelem.onChange(()=>t.requestRender("data")),t.requestRender("layout"),(t.xDownsampler?.props.mode!==this.state.downsampleMode||t.xDownsampler?.props.windowSize!==this.state.downsample)&&(t.xDownsampler=new Fe({mode:this.state.downsampleMode,windowSize:this.state.downsample}),t.yDownsampler=new Fe({mode:this.state.downsampleMode,windowSize:this.state.downsample}))}afterDelete(){const{internal:e}=this;e.xTelem.cleanup?.(),e.yTelem.cleanup?.(),e.requestRender("layout")}xBounds(){return this.internal.xTelem.value()[0]}yBounds(){return this.internal.yTelem.value()[0]}findByXValue(e,t){const{xTelem:r,yTelem:s}=this.internal;let[,o]=r.value();o=this.internal.xDownsampler.transform(o);let[a,l]=[-1,-1];o.series.find((w,C)=>{const M=w.binarySearch(t),P=M>=0&&M<w.length;return P&&([a,l]=[M,C]),P});const{key:u}=this,{color:c,label:h}=this.state,f={key:u,color:c,label:h,position:{x:0,y:0},value:{x:NaN,y:NaN},bounds:{lower:0,upper:0}};if(a===-1||l===-1||!this.state.visible)return f;const g=o.series[l];f.value.x=Gc(l,a,o);let[,y]=s.value();y=this.internal.yDownsampler.transform(y);const S=y.series.find(w=>i.H.contains(w.alignmentBounds,g.alignment+BigInt(a)));if(S==null)return f;const b=Number(S.alignment-g.alignment);return f.value.y=Number(S.at(a-b)),f.bounds={...S.bounds},f.position={x:e.dataToDecimalScale.x.pos(f.value.x),y:e.dataToDecimalScale.y.pos(f.value.y)},f}render(e){if(this.deleted||!this.state.visible)return;const{downsample:t}=this.state,{xTelem:r,yTelem:s,lineCtx:o,xDownsampler:a,yDownsampler:l}=this.internal,{dataToDecimalScale:u,exposure:c}=e;let[[,h],[,f]]=[r.value(),s.value()];if(h=a.transform(h),f=l.transform(f),h.updateGLBuffer(o.gl),f.updateGLBuffer(o.gl),h.length===0||f.length===0)return;const g=o.getProgram(f.dataType),y=iu(h,f,c,t,this.state.downsampleMode,Vc);this.internal.instrumentation.L.debug("render",()=>({key:this.key,downsample:t,scale:u.transform,props:e.region,ops:ou(y)}));const S=g.setAsActive(),b=g.bindState(this.state),w=g.renderCtx.scaleRegion(e.region).transform;y.forEach(C=>{const M=ru(u,C).transform;g.bindScale(M,w),g.draw(C,b,h.dataType,f.dataType)}),S()}}const Qc=5e3,Jc=(n,e)=>nu(tu(n),e).map((t,r)=>Math.floor(r/eu)*(1/(Qc*n))*t),eu=5,tu=n=>new Float32Array([0,0,0,n,0,-n,1,0,-1,0]),nu=(n,e)=>{const t=new Float32Array(n.length*e);for(let r=0;r<e;r++)t.set(n,r*n.length);return t},ru=(n,e)=>n.translate(n.x.dim(Number(e.x.sampleOffset)),n.y.dim(Number(e.y.sampleOffset))),su={[zt.TYPE]:zt},iu=(n,e,t,r,s,o)=>{if(n.series.length===0||e.series.length===0)return[];const a=[];return n.series.forEach(l=>e.series.forEach(u=>{if(!au(l,u,o))return;let c=0,h=0;l.alignment<u.alignment?c=Number(u.alignment-l.alignment):u.alignment<l.alignment&&(h=Number(l.alignment-u.alignment));const f=Math.min(l.length-c,u.length-h);if(f===0)return;let g=i.R(Math.round(t*4*f),r,51);s!=="decimate"&&(g=1),a.push({x:l,y:u,xOffset:c,yOffset:h,count:f,downsample:g})})),a},ou=n=>n.map(e=>({...e,x:e.x.digest,y:e.y.digest})),au=(n,e,t)=>{const r=n.timeRange.overlapsWith(e.timeRange,t),s=i.H.overlapsWith(n.alignmentBounds,e.alignmentBounds);return r&&s};class Ze{canvas;theme;constructor(e,t){this.canvas=e,this.theme=t}rule({direction:e,region:t,position:r,...s}){return e==="x"?this.line({start:i.K.construct(i.Ho.left(t),r),end:i.K.construct(i.Ho.right(t),r),...s}):this.line({start:i.K.construct(r,i.Ho.top(t)),end:i.K.construct(r,i.Ho.bottom(t)),...s})}line({stroke:e,lineWidth:t,lineDash:r,start:s,end:o}){const a=this.canvas;a.strokeStyle=i.cr.hex(e),a.lineWidth=t,a.setLineDash([r]),a.beginPath(),a.moveTo(...i.K.couple(s)),a.lineTo(...i.K.couple(o)),a.stroke()}circle({fill:e,radius:t,position:r}){const s=this.canvas;s.fillStyle=i.cr.hex(e),s.beginPath(),s.arc(...i.K.couple(r),t,0,2*Math.PI),s.fill()}resolveColor(e,t){return e==null?t==null?this.theme.colors.text:this.resolveColor(t):typeof e=="function"?e(this.theme):i.cr.construct(e)}border({region:e,color:t,width:r,radius:s,location:o}){const a=this.canvas;a.strokeStyle=i.cr.hex(this.resolveColor(t,this.theme.colors.border)),a.lineWidth=r??this.theme.sizes.border.width,s??=this.theme.sizes.border.radius,o==null||o===!0?s>0?(a.roundRect(...i.K.couple(i.Ho.topLeft(e)),...i.K.couple(i.Ho.dims(e)),s),a.stroke()):(a.rect(...i.K.couple(i.Ho.topLeft(e)),...i.K.couple(i.Ho.dims(e))),a.stroke()):p.t.toArray(o).forEach(l=>{const[u,c]=i.Ho.edgePoints(e,l);a.beginPath(),a.moveTo(...i.K.couple(u)),a.lineTo(...i.K.couple(c)),a.stroke()})}container({region:e,bordered:t=!0,rounded:r=!0,borderColor:s,borderRadius:o,borderWidth:a,backgroundColor:l}){o??=this.theme.sizes.border.radius,a??=1;const u=this.canvas;u.fillStyle=i.cr.hex(this.resolveColor(l,this.theme.colors.gray.l1)),u.strokeStyle=i.cr.hex(this.resolveColor(s,this.theme.colors.border)),u.setLineDash([]),u.lineWidth=1,u.beginPath(),r?u.roundRect(...i.K.couple(i.Ho.topLeft(e)),...i.K.couple(i.Ho.dims(e)),o):u.rect(...i.K.couple(i.Ho.topLeft(e)),...i.K.couple(i.Ho.dims(e))),u.fill(),t&&this.border({region:e,color:s,radius:o,width:a,location:t})}textContainer(e){const[t,r]=this.spacedTextDrawF(e);t.width+=12,t.height+=12;const{root:s=i.K$1.TOP_LEFT,offset:o=i.K.ZERO}=e,a={...e.position};s.x==="right"?a.x-=t.width+o.x:a.x+=o.x,s.y==="bottom"?a.y-=t.height+o.y:a.y+=o.y,this.container({region:i.Ho.construct(a,t.width,t.height),...e}),this.canvas.filter="none",r(i.K.translate(a,[6,6]))}spacedTextDrawF({text:e,direction:t,spacing:r=1,level:s="p"}){const o=qe.fontString(this.theme,{level:s}),a=e.map(c=>p.dimensions(c,o,this.canvas)),l=this.theme.sizes.base*r,u=Math.max(...a.map(c=>c[i.g.dimension(t)]))+l;return[{[i.g.dimension(i.g.swap(t))]:Math.max(...a.map(c=>c[i.g.dimension(i.g.swap(t))])),[i.g.dimension(t)]:u*e.length-l},c=>{const h=qe.fontString(this.theme,{level:s});this.canvas.font=h,this.canvas.fillStyle=i.cr.hex(this.theme.colors.text),this.canvas.textBaseline="top",e.forEach((f,g)=>{this.canvas.fillText(f,c.x,c.y+u*g)})}]}list({length:e,itemHeight:t,width:r,spacing:s=0,position:o,draw:a,root:l=i.K$1.TOP_LEFT,offset:u=i.K.ZERO,padding:c=i.K.ZERO}){const h=e*t+c.y*2+s*(e-1),f=r+c.x*2,g={...o};l.x==="right"?g.x-=r+u.x*2:g.x+=u.x,l.y==="top"?g.y-=h+u.y*2:g.y+=u.y,this.container({region:i.Ho.construct(g,{width:f,height:h}),backgroundColor:y=>y.colors.gray.l1});for(let y=0;y<e;y++){const S=i.Ho.construct(i.K.construct(g.x+c.x,g.y+y*t+c.y+s*y),r,t);a(y,S)}}drawTextInCenter({box:e,text:t,level:r}){const s=p.dimensions(t,this.canvas.font,this.canvas),o=i.Ho.positionInCenter(i.Ho.construct(i.K.ZERO,s),e);return this.text({text:t,position:i.Ho.topLeft(o),level:r})}text({text:e,position:t,level:r="p",weight:s,shade:o,maxWidth:a,code:l,justify:u="left",align:c="top",color:h}){this.canvas.font=qe.fontString(this.theme,{level:r,weight:s,code:l}),h!=null?this.canvas.fillStyle=i.cr.hex(this.resolveColor(h)):o==null?this.canvas.fillStyle=i.cr.hex(this.theme.colors.text):this.canvas.fillStyle=i.cr.hex(this.theme.colors.gray[`l${o}`]),this.canvas.textAlign=u,this.canvas.textBaseline=c;let f;a!=null&&(f=this.canvas.scissor(i.Ho.construct(t,a,1e3))),this.canvas.fillText(e,t.x,t.y),f?.()}}const br=d.z.object({position:d.z.number().optional(),pixelPosition:d.z.number().optional(),dragging:d.z.boolean(),lineWidth:d.z.number().optional().default(1),lineDash:d.z.number().optional().default(20),color:i.cr.colorZ}),lu=3;class Ve extends p.Leaf{static TYPE="Rule";schema=br;lastUpdateRef=null;afterUpdate(e){this.internal.renderCtx=p.Context.use(e);const t=p.use(e);this.internal.draw=new Ze(this.internal.renderCtx.upper2d,t),X(e,"tool")}afterDelete(e){X(e,"tool")}updatePositions({decimalToDataScale:e,plot:t}){const r=this.state.dragging,s=this.prevState.dragging&&!r;if((r||s)&&this.state.pixelPosition!=null){if(this.lastUpdateRef??=this.state.pixelPosition,Math.abs(this.state.pixelPosition-this.lastUpdateRef)<lu&&!s)return this.state.pixelPosition;this.lastUpdateRef=this.state.pixelPosition;const l=e.pos(this.state.pixelPosition/i.Ho.height(t));return this.setState(u=>({...u,position:l})),this.state.pixelPosition}if(this.state.position==null){const a=e.pos(.5);this.setState(l=>({...l,position:a}))}const o=e.reverse().pos(this.state.position)*i.Ho.height(t);if(!isNaN(o)){if(this.state.pixelPosition!=null&&Math.abs(o-this.state.pixelPosition)<1)return this.state.pixelPosition;this.setState(a=>({...a,pixelPosition:o}))}return o}render(e){if(this.deleted)return;const{renderCtx:t}=this.internal,{location:r,plot:s}=e,o=i.K$1.direction(r),{upper2d:a}=t,l=this.internal.draw,u=this.updatePositions(e)+i.Ho.top(e.plot);l.rule({stroke:this.state.color,lineWidth:this.state.lineWidth,lineDash:this.state.lineDash,direction:o,region:s,position:u}),a.fillStyle=i.cr.hex(this.state.color),a.lineJoin="round",a.lineWidth=3.5,a.lineCap="round",a.beginPath();const c=4;if(r==="left"){const h=i.Ho.left(s)-1;a.moveTo(h,u),a.lineTo(h-c,u-c),a.lineTo(h-c,u+c)}else r==="right"&&(a.moveTo(i.Ho.right(s),u),a.lineTo(i.Ho.right(s)+c,u-c),a.lineTo(i.Ho.right(s)+c,u+c));a.closePath(),a.stroke()}}const Oi={[Ve.TYPE]:Ve},cu=Object.freeze(Object.defineProperty({__proto__:null,REGISTRY:Oi,Rule:Ve,ruleStateZ:br},Symbol.toStringTag,{value:"Module"})),uu=at.extend({location:i.K$1.x.optional().default("left")}),rs=2,hu=n=>i.Ho.signedWidth(n)<rs||i.Ho.signedHeight(n)<rs;class At extends ki{static TYPE="YAxis";schema=at;xBounds(){return i.H.max(this.lines.map(e=>e.xBounds()).filter(e=>i.H.isFinite(e)))}bounds(e){const[t,r]=this.iBounds(e,this.dataBounds.bind(this));if(r!=null)throw r;return t}render(e){if(this.deleted)return;const[t,r]=this.dataToDecimalScale(e.hold,this.dataBounds.bind(this),e.viewport),s=t.invert().reverse();if(this.renderAxis(e,s),this.renderLines(e,t),this.renderRules(e,s),r!=null)throw r}renderLines({xDataToDecimalScale:e,plot:t,canvases:r,exposure:s},o){if(!r.includes("gl")||hu(t))return;const a={region:t,dataToDecimalScale:new i.C.XY(e,o),exposure:s};this.lines.forEach(l=>l.render(a))}renderRules({container:e,plot:t,canvases:r},s){if(!r.includes("upper2d"))return;const{location:o}=this.state,{render:a}=this.internal,l=i.Ho.construct(i.Ho.left(e),i.Ho.top(t),i.Ho.width(e),i.Ho.height(t)),u=a.scissor(l,i.K.ZERO,["upper2d"]),c={container:e,plot:t,decimalToDataScale:s,location:o};this.rules.map(h=>h.render(c)),u()}findByXValue({xDataToDecimalScale:e,plot:t,viewport:r,hold:s,exposure:o},a){const[l,u]=this.dataToDecimalScale(s,this.dataBounds.bind(this),r);if(u!=null)throw u;const c=new i.C.XY(e,l),h={region:t,dataToDecimalScale:c,exposure:o};return this.lines.map(f=>({...f.findByXValue(h,a),units:this.state.label}))}dataBounds(){return this.lines.map(e=>e.yBounds())}get lines(){return this.childrenOfType(zt.TYPE)}get rules(){return this.childrenOfType(Ve.TYPE)}}const Di=d.z.object({start:i.r.z,end:i.r.z});class Rn extends p.Leaf{static TYPE="range-annotation";schema=Di;afterUpdate(e){this.internal.render=p.Context.use(e),this.internal.draw=new Ze(this.internal.render.upper2d,p.use(e))}}const du="ranges",fu={channel:p.ww.SET_CHANNEL_NAME,schema:p.ww.payloadZ,onChange:async({store:n,changed:e,client:t})=>{const r=t.ranges.sugarOne(e),s=n.ranges.get(e.key);let o;s?.labels==null&&(o=await r.retrieveLabels());let a=null;s?.parent==null&&(a=await r.retrieveParent()),n.ranges.set(e.key,l=>t.ranges.sugarOne({...r.payload,labels:l?.labels??o,parent:l?.parent??a}))}},pu={channel:p.ww.DELETE_CHANNEL_NAME,schema:p.ww.keyZ,onChange:({store:n,changed:e})=>n.ranges.delete(e)},gu={equal:(n,e)=>p.N.equal(n.payload,e.payload),listeners:[fu,pu]},mu=d.z.object({region:i.Ho.box,clearOverScan:i.K.crudeZ.optional().default(0),visible:d.z.boolean().optional().default(!0)}),ss=["upper2d","lower2d"];class ze extends p.Composite{static TYPE="Table";static stateZ=mu;schema=ze.stateZ;afterUpdate(e){const{internal:t}=this;t.renderCtx=p.Context.use(e),t.handleError=p.useErrorHandler(e),qt(e,()=>{this.state.visible&&this.requestRender("low")}),!(!this.state.visible&&!this.prevState.visible)&&this.requestRender("high")}afterDelete(){this.requestRender("high")}render(){if(this.deleted)return;const e=i.Ho.copy(this.state.region);if(!this.state.visible)return()=>this.internal.renderCtx.erase(e,this.state.clearOverScan);const{renderCtx:t,handleError:r}=this.internal,s=i.C.XY.translate(i.Ho.topLeft(this.state.region)),o=t.scissor(this.state.region,i.K.construct(this.state.clearOverScan),ss);try{for(const a of this.children)a.render({viewportScale:s})}catch(a){r(a,"Failed to render table")}finally{o()}return()=>this.internal.renderCtx.erase(e,this.state.clearOverScan)}requestRender(e){const{renderCtx:t}=this.internal;t.loop.set({key:`${ze.TYPE}-${this.key}`,render:this.render.bind(this),priority:e,canvases:ss})}}const yu={[ze.TYPE]:ze},Li=d.z.object({authority:i.lr.authorityZ.optional(),valid:d.z.boolean().optional()}).default({authority:void 0,valid:!1}),_i=d.z.object({triggered:d.z.boolean(),status:i.wr.statusZ(Li),sink:Gt.optional().default(Kt),source:Fn.optional().default(Un)});class Mn extends p.Leaf{static TYPE="Chip";schema=_i;afterUpdate(e){const{internal:t}=this,{sink:r,source:s}=this.state;t.source=q(e,s,t.source),t.sink=rt(e,r,t.sink),this.state.triggered&&!this.prevState.triggered&&t.sink.set(this.state.status.details?.authority!==i.lr.ABSOLUTE_AUTHORITY),this.updateEnabledState(),t.stopListening?.(),t.stopListening=t.source.onChange(()=>this.updateEnabledState())}updateEnabledState(){const e=this.internal.source.value();p.N.equal(e,this.state.status)||this.setState(t=>({...t,status:e,triggered:!1}))}afterDelete(){this.internal.stopListening(),this.internal.source.cleanup?.(),this.internal.sink.cleanup?.()}render(){}}const Yi=d.z.object({}),is="control-state-provider",zi=p.iw.stateZ.extend({subjectColor:i.cr.colorZ});class Xe extends p.Composite{static TYPE="StateProvider";schema=Yi;colors=new Map;tracker;disconnectTrackerChange;obs=new $t.Observer;static use(e){return e.get(is)}afterUpdate(e){const{internal:t}=this;t.instrumentation=p.useInstrumentation(e,"control-state");const r=p.use(e);t.palette=r.colors.visualization.palettes.default,t.defaultColor=r.colors.gray.l8;const s=He(e);if(t.client!=null&&s===t.client)return;t.client=s,e.set(is,this),p.useErrorHandler(e)(async()=>{await this.maybeCloseTracker(),t.client!=null&&(this.internal.instrumentation.L.debug("starting state tracker"),await this.openTracker(t.client))},"failed to open control state tracker")}async maybeCloseTracker(){this.tracker!=null&&(this.internal.instrumentation.L.debug("stopping state tracker"),this.disconnectTrackerChange?.(),await this.tracker.close(),this.tracker=void 0)}afterDelete(e){p.useErrorHandler(e)(async()=>{await this.maybeCloseTracker()},"failed to close control state tracker")}onChange(e){return this.obs.onChange(e)}get(e){return Array.isArray(e)?i.c.unique(e).map(t=>this.getOne(t)).filter(t=>t!=null):this.getOne(e)}getOne(e){if(this.tracker==null)return;const t=this.tracker.states.get(e);if(t!=null)return{...t,subjectColor:this.colors.get(t.subject.key)??this.internal.defaultColor}}async openTracker(e){const{internal:t}=this,{instrumentation:r}=t;try{this.tracker=await e.control.openStateTracker()}catch{r.L.error("failed to open state tracker");return}this.disconnectTrackerChange?.(),this.disconnectTrackerChange=this.tracker.onChange(s=>{if(r.L.debug("transfer",{transfers:s.map(o=>p.iw.transferString(o))}),this.tracker==null)throw new p.ht("tracker is null inside it's own onChange callback!");this.updateColors(this.tracker),this.obs.notify(s)})}updateColors(e){const t=e.subjects(),r=t.map(a=>a.key),s=Array.from(this.colors.values());this.colors.forEach((a,l)=>!r.includes(l)&&this.colors.delete(l));const{palette:o}=this.internal;t.forEach(a=>{if(this.colors.has(a.key))return;const l=o.find(u=>!s.includes(u))??o[0];this.colors.set(a.key,l),s.push(l)})}}const Ai=["acquired","released","overridden","failed"],Hi=d.z.enum(Ai),Zi=d.z.object({name:d.z.string(),authority:d.z.number().default(0),acquireTrigger:d.z.number(),status:Hi.optional(),needsControlOf:p.Xm.keyZ.array().optional().default([])});class On extends p.Composite{static TYPE="Controller";schema=Zi;registry=new Map;writer;afterUpdate(e){const{internal:t}=this;t.instrumentation=p.useInstrumentation(e),t.addStatus=p.useAdder(e),t.runAsync=p.useErrorHandler(e),(t.prevTrigger==null||Math.abs(this.state.acquireTrigger-t.prevTrigger)>1)&&(t.prevTrigger=this.state.acquireTrigger);const r=He(e),s=Xe.use(e);t.stateProv=s,t.telemCtx=Ks(e,this,t.telemCtx),t.client=r,t.runAsync(async()=>{t.client==null&&await this.release(),this.state.acquireTrigger>t.prevTrigger?await this.acquire():this.state.acquireTrigger<t.prevTrigger&&await this.release()},"failed to acquire control")}afterDelete(){const{internal:e}=this;e.runAsync(async()=>await this.release(),"failed to release control")}async updateNeedsControlOf(){const{client:e}=this.internal;if(e==null)return;const t=new Set([]);for(const s of this.registry.keys())(await s.needsControlOf(e)).forEach(a=>a!==0&&t.add(a));const r=Array.from(t);i.k.unorderedPrimitiveArrays(this.state.needsControlOf,r)!==i.k.EQUAL&&this.setState(s=>({...s,needsControlOf:r}))}async acquire(){this.internal.prevTrigger=this.state.acquireTrigger;const{client:e,addStatus:t}=this.internal;if(e==null)return t({message:`Cannot acquire control on ${this.state.name} because no cluster has been connected.`,variant:"warning"});try{await this.updateNeedsControlOf();const r=this.state.needsControlOf;if(r.length===0)return t({message:`Cannot acquire control on ${this.state.name} because there are no channels to control.`,variant:"warning"});const s=p.S.now().sub(i.i.milliseconds(1));this.writer=await e.openWriter({start:s,channels:r,controlSubject:{key:this.key,name:this.state.name},authorities:this.state.authority,enableAutoCommit:!0}),this.setState(o=>({...o,status:"acquired"}))}catch(r){if(this.setState(s=>({...s,status:"failed"})),!(r instanceof Error))throw r;t({variant:"error",message:`${this.state.name} failed to acquire control`,description:r.message})}}async release(){this.internal.prevTrigger=this.state.acquireTrigger;try{await this.writer?.close()}catch(e){this.internal.addStatus({message:`${this.state.name} failed to release control: ${e.message}`,variant:"error"})}finally{this.setState(e=>({...e,status:"released"})),this.writer=void 0}}async set(e){this.writer==null&&await this.acquire(),await this.writer?.write(e)}async setAuthority(e,t){this.writer==null&&await this.acquire(),await this.writer?.setAuthority(Object.fromEntries(e.map(r=>[r,t])))}async releaseAuthority(e){this.writer==null&&await this.acquire(),await this.writer?.setAuthority(Object.fromEntries(e.map(t=>[t,this.state.authority])))}deleteTelem(e){this.registry.delete(e),this.updateNeedsControlOf()}create(e){const{internal:t}=this,s=(()=>{switch(e.type){case Ht.TYPE:{const o=new Ht(this,t.runAsync,e.props);return this.registry.set(o,null),o}case It.TYPE:{const o=new It(this,this.internal.stateProv,e.props);return this.registry.set(o,null),o}case Zt.TYPE:return new Zt(this,t.runAsync,e.props);default:return null}})();return s!=null&&this.updateNeedsControlOf(),s}}const Ii=d.z.object({channel:d.z.number()});class Ht extends Xt{static TYPE="controlled-numeric-telem-sink";controller;runAsync;schema=Ii;constructor(e,t,r){super(r),this.controller=e,this.runAsync=t}invalidate(){}cleanup(){this.controller.deleteTelem(this)}async needsControlOf(e){if(this.props.channel===0)return[];const t=await e.channels.retrieve(this.props.channel),r=[t.key];return t.index!==0&&r.push(t.index),r}set(...e){this.runAsync(async()=>{const{client:t}=this.controller.internal;if(t==null)throw new p.Lm("No cluster connected");if(this.props.channel===0)throw new p.L("No command channel specified for actuator");const r=await t.channels.retrieve(this.props.channel),s={[r.key]:e};if(r.index!==0){const o=await t.channels.retrieve(r.index),a=p.S.now();s[o.key]=Array.from({length:e.length},(l,u)=>a.add(i.i.nanoseconds(u)))}await this.controller.set(s)},"Failed to command channel")}}const vu=n=>({type:Ht.TYPE,props:n,variant:"sink",valueType:"number"}),Ni=d.z.object({authority:d.z.number().default(p.iw.ABSOLUTE_AUTHORITY),channel:d.z.number()});class Zt extends Xt{static TYPE="acquire-channel-control";controller;runAsync;schema=Ni;constructor(e,t,r){super(r),this.controller=e,this.runAsync=t}cleanup(){this.controller.deleteTelem(this)}async needsControlOf(e){const t=await e.channels.retrieve(this.props.channel),r=[t.key];return t.index!==0&&r.push(t.index),r}set(e){this.runAsync(async()=>{const{controller:t}=this,{client:r}=t.internal;if(r==null)return;const s=await r.channels.retrieve(this.props.channel),o=[s.key];s.index!==0&&o.push(s.index),e?await this.controller.setAuthority(o,this.props.authority):await this.controller.releaseAuthority(o)},"failed to set channel authority")}}const bu=n=>({type:Zt.TYPE,props:n,variant:"sink",valueType:"boolean"}),Bi=d.z.object({channel:d.z.number()}),wu=d.z.object({valid:d.z.boolean(),color:i.cr.colorZ.optional(),authority:d.z.number()});class It extends B{static TYPE="controlled-status-source";prov;valid=!1;stopListening;controller;schema=Bi;constructor(e,t,r){super(r),this.prov=t,this.controller=e}async needsControlOf(){return[]}maybeRevalidate(){if(this.valid)return;const{channel:e}=this.props;this.stopListening?.();const t=i.lr.filterTransfersByChannelKey(e);this.stopListening=this.prov.onChange(r=>{t(r).length!==0&&this.notify?.()}),this.valid=!0}value(){this.maybeRevalidate();const e=p.S.now();if(this.props.channel===0)return{key:this.controller.key,variant:"disabled",message:"No Channel",time:e,details:{valid:!1,authority:0}};const t=this.prov.get(this.props.channel);return t==null?{key:this.controller.key,variant:"disabled",message:"Uncontrolled",time:e,details:{valid:!0,color:void 0,authority:0}}:{key:t.subject.key,variant:t.subject.key===this.controller.key?"success":"error",message:`Controlled by ${t.subject.name}`,time:e,details:{valid:!0,color:t.subjectColor,authority:t.authority}}}cleanup(){this.controller.deleteTelem(this),this.stopListening?.()}}const Su=n=>({type:It.TYPE,props:n,variant:"source",valueType:"status"}),Ui=d.z.object({color:i.cr.colorZ.optional()}).default({color:void 0}),$i=d.z.object({statusSource:Fn.optional().default(Un),colorSource:qn.optional().default(Wt),status:i.wr.statusZ(Ui),color:i.cr.colorZ.optional()});class Dn extends p.Leaf{static TYPE="Indicator";schema=$i;stopListeningStatus;stopListeningColor;afterUpdate(e){const{internal:t}=this,{statusSource:r,colorSource:s}=this.state;t.statusSource=q(e,r,t.statusSource),t.colorSource=q(e,s,t.colorSource),this.updateState(),this.stopListeningStatus?.(),this.stopListeningColor?.(),this.stopListeningStatus=t.statusSource.onChange(this.updateState.bind(this)),this.stopListeningColor=t.colorSource.onChange(this.updateState.bind(this))}afterDelete(){this.internal.statusSource.cleanup?.(),this.internal.colorSource.cleanup?.()}render(){}updateState(){const e=this.internal.colorSource.value(),t=this.internal.statusSource.value();i.cr.equals(e,this.state.color)&&t.message===this.state.status.message||this.setState(r=>({...r,color:e,status:t}))}}const qi=d.z.object({needsControlOf:p.Xm.keyZ.array(),states:zi.array()});class Ln extends p.Leaf{static TYPE="Legend";schema=qi;afterUpdate(e){const{internal:t}=this;t.stateProv=Xe.use(e);const r=this.state.needsControlOf;t.disconnectStateProv?.();const s=i.lr.filterTransfersByChannelKey(...r),o=t.stateProv.get(r);this.setState(a=>({...a,states:o})),t.disconnectStateProv=t.stateProv.onChange(a=>{if(s(a).length===0)return;const l=t.stateProv.get(r);this.setState(u=>({...u,states:l}))})}afterDelete(){const{internal:e}=this;e.disconnectStateProv?.()}render(){}}const xu={[On.TYPE]:On,[Xe.TYPE]:Xe,[Dn.TYPE]:Dn,[Mn.TYPE]:Mn,[Ln.TYPE]:Ln},Fi=["fire","momentary","pulse"],Tu=d.z.enum(Fi),Ki=d.z.object({trigger:d.z.number(),sink:Gt.optional().default(Kt),mode:Tu.optional().default("fire")}),Wi=2,ji=1;class _n extends p.Leaf{static TYPE="Button";schema=Ki;afterUpdate(e){const{sink:t,mode:r,trigger:s}=this.state,{internal:o}=this;o.prevTrigger??=s,o.sink=rt(e,t,o.sink);const a=o.prevTrigger;o.prevTrigger=s;const l=s===a+Wi;s===a+ji?r=="fire"?this.internal.sink.set(!0):r=="momentary"&&this.internal.sink.set(!1):l&&(r=="momentary"?this.internal.sink.set(!0):r=="pulse"&&this.internal.sink.set(!0,!1))}afterDelete(){this.internal.sink.cleanup?.()}}const Eu={[_n.TYPE]:_n},wr=d.z.object({dpr:d.z.number(),region:i.Ho.box,bootstrap:d.z.boolean().optional().default(!1),bootstrapped:d.z.boolean().optional().default(!1),glCanvas:d.z.any().optional(),upper2dCanvas:d.z.any().optional(),lower2dCanvas:d.z.any().optional(),os:i.S.osZ});class Nt extends p.Composite{static TYPE="Canvas";schema=wr;renderCtx=null;afterUpdate(e){if(this.renderCtx==null){if(!this.state.bootstrap)return;const{glCanvas:t,lower2dCanvas:r,upper2dCanvas:s,os:o}=this.state;if(t==null||r==null||s==null)throw new p.ht("[vis.worker.Canvas] - expected render context bootstrap to include all canvases");this.renderCtx=p.Context.create(e,t,r,s,o),xe.create(e,this.renderCtx),this.setState(a=>({...a,bootstrap:!1,bootstrapped:!0,glCanvas:void 0,lower2dCanvas:void 0,upper2dCanvas:void 0}))}else this.renderCtx.update(e);this.renderCtx.resize(this.state.region,this.state.dpr)}}const Gi={[Nt.TYPE]:Nt},Cu=Object.freeze(Object.defineProperty({__proto__:null,Canvas:Nt,REGISTRY:Gi,canvasStateZ:wr},Symbol.toStringTag,{value:"Module"})),Sr=d.z.object({position:i.K.xy,zoom:d.z.number(),region:i.Ho.box,clearOverScan:i.K.crudeZ.optional().default(10),visible:d.z.boolean().optional().default(!0)}),dt=["upper2d","lower2d"];class ce extends p.Composite{static TYPE="Diagram";static stateZ=Sr;schema=ce.stateZ;afterUpdate(e){this.internal.renderCtx=p.Context.use(e),this.internal.handleError=p.useErrorHandler(e),qt(e,()=>{this.state.visible&&this.requestRender("low")}),!(!this.state.visible&&!this.prevState.visible)&&(this.internal.viewportScale=i.C.XY.magnify(i.K.construct(this.state.zoom)).translate(i.Ho.topLeft(this.state.region)).translate(this.state.position),this.requestRender("high"))}afterDelete(){this.requestRender("high")}render(){if(this.deleted)return;const{renderCtx:e,handleError:t,viewportScale:r}=this.internal,s=i.Ho.construct(this.state.region);if(!this.state.visible)return()=>e.erase(s,this.state.clearOverScan,...dt);const o=e.scissor(s,i.K.ZERO,dt);try{this.children.forEach(l=>l.render?.({viewportScale:r}))}catch(l){t(l,"failed to render diagram")}finally{o()}const a=i.Ho.copy(this.state.region);return()=>{e.lower2d.fillStyle=i.cr.hex(i.cr.BLACK),e.lower2d.fillRect(...i.K.couple(i.Ho.topLeft(a)),i.Ho.width(a),i.Ho.height(a)),e.erase(a,this.state.clearOverScan,...dt)}}requestRender(e){const{renderCtx:t}=this.internal;t.loop.set({key:`${ce.TYPE}-${this.key}`,render:this.render.bind(this),priority:e,canvases:dt})}}const Vi={[ce.TYPE]:ce},Pu=Object.freeze(Object.defineProperty({__proto__:null,Diagram:ce,REGISTRY:Vi,diagramStateZ:Sr},Symbol.toStringTag,{value:"Module"})),Xi=d.z.object({enabled:d.z.boolean(),source:$n.optional().default(Bn)});class Yn extends p.Leaf{static TYPE="Light";schema=Xi;afterUpdate(e){this.internal.addStatus=p.useOptionalAdder(e);const{source:t}=this.state,{internal:r}=this;this.internal.source=q(e,t,this.internal.source),r.stopListening?.(),r.stopListening=r.source.onChange(()=>this.updateEnabledState())}updateEnabledState(){const e=this.internal.source.value();e!==this.state.enabled&&this.setState(t=>({...t,enabled:e}))}afterDelete(){this.internal.stopListening(),this.internal.source.cleanup?.()}}const ku={[Yn.TYPE]:Yn},Ru=i.K.construct(12),Mu=3,Ou=14,Du=i.K.construct(6),xr=d.z.object({position:i.K.xy.or(d.z.null()),textColor:i.cr.colorZ.optional().default(i.cr.ZERO),backgroundColor:i.cr.colorZ.optional().default(i.cr.ZERO),borderColor:i.cr.colorZ.optional().default(i.cr.ZERO),ruleColor:i.cr.colorZ.optional().default(i.cr.ZERO),ruleStrokeWidth:d.z.number().optional().default(1),ruleStrokeDash:d.z.number().default(0)});class Qe extends p.Leaf{static TYPE="tooltip";schema=xr;afterUpdate(e){const t=p.use(e);i.cr.isZero(this.state.textColor)&&(this.state.textColor=t.colors.text),i.cr.isZero(this.state.backgroundColor)&&(this.state.backgroundColor=t.colors.gray.l1),i.cr.isZero(this.state.borderColor)&&(this.state.borderColor=t.colors.border),i.cr.isZero(this.state.ruleColor)&&(this.state.ruleColor=t.colors.gray.l7),this.internal.dotColor=t.colors.text,this.internal.dotColorContrast=t.colors.textInverted,this.internal.render=p.Context.use(e),this.internal.draw=new Ze(this.internal.render.upper2d,t),X(e,"tool")}afterDelete(e){X(e,"tool")}render(e){if(this.deleted||this.state.position==null)return;const{region:t}=e,r=i.C.XY.scale(i.Ho.DECIMAL).scale(t),s=i.C.XY.scale(t).scale(i.Ho.DECIMAL),o=e.findByXDecimal(s.x.pos(this.state.position.x)),a=o.filter(b=>i.K.isFinite(b.value)),{draw:l}=this.internal,u=a.reduce((b,w)=>b+w.position.x,0)/a.length,c=new i.r(a.reduce((b,w)=>b+w.value.x,0)/a.length),h=r.x.pos(u);if(!i.H.contains(i.Ho.xBounds(t),h))return;l.rule({stroke:this.state.ruleColor,lineWidth:this.state.ruleStrokeWidth,lineDash:this.state.ruleStrokeDash,direction:"y",region:t,position:h}),a.forEach(b=>{const w=r.pos(b.position);l.circle({fill:i.cr.setAlpha(b.color,.5),radius:8,position:w}),l.circle({fill:i.cr.setAlpha(b.color,.8),radius:5,position:w}),l.circle({fill:i.cr.pickByContrast(b.color,this.internal.dotColor,this.internal.dotColorContrast),radius:2,position:w})});const f=s.pos(this.state.position),g={...i.K$1.TOP_LEFT};f.x>.6&&(g.x="right"),f.y>.6&&(g.y="bottom");let y=o.reduce((b,w)=>Math.max(b,w.label?.length??0),0);const S=c.fString("preciseDate","local").length;S>y&&(y=S),l.list({root:g,offset:Ru,length:a.length+1,padding:Du,itemHeight:Ou,spacing:Mu,width:y*7+48,position:this.state.position,draw:(b,w)=>{let C="",M="",P=this.state.textColor;if(b===0)C="Time",M=c.fString("preciseDate","local");else{const D=a[b-1];C=D.label??"",M=i.or.roundBySpan(D.value.y,D.bounds).toString(),P=D.color}l.text({position:i.Ho.topLeft(w),text:C,level:"small",weight:500,color:P}),l.text({position:i.K.translateY(i.Ho.topRight(w),-1),text:M,level:"small",justify:"right",code:!0,shade:10})}})}}const Qi={[Qe.TYPE]:Qe},Lu=Object.freeze(Object.defineProperty({__proto__:null,REGISTRY:Qi,Tooltip:Qe,tooltipStateZ:xr},Symbol.toStringTag,{value:"Module"})),Ji=d.z.object({region:i.Ho.box,wheelPos:d.z.number(),scrolling:d.z.boolean(),empty:d.z.boolean(),visible:d.z.boolean(),telem:pt.optional().default(us),font:p.levelZ.optional().default("p"),color:i.cr.colorZ.optional().default(i.cr.ZERO),overshoot:i.K.xy.optional().default({x:0,y:0})}),_u=.98,$e="lower2d",Yu={offset:0n,offsetRef:0n,scrollRef:0};class Je extends p.Leaf{static TYPE="log";static z=Ji;schema=Je.z;values=new i.Wt([]);scrollState=Yu;afterUpdate(e){const{internal:t}=this;t.render=p.Context.use(e),t.theme=p.use(e),i.cr.isZero(this.state.color)?this.internal.textColor=t.theme.colors.gray.l11:t.textColor=this.state.color,t.telem=q(e,this.state.telem,t.telem);const{scrolling:r,wheelPos:s}=this.state;if(this.state.scrolling&&!this.prevState.scrolling){const u=this.values.alignmentBounds.upper-1n;this.scrollState={offset:u,offsetRef:u,scrollRef:this.state.wheelPos}}else if(r){const{scrollState:u,values:c}=this,h=Math.ceil((s-this.scrollState.scrollRef)/this.lineHeight);u.offset=this.values.traverseAlignment(u.offsetRef,-BigInt(h)),u.offset<c.alignmentBounds.lower+BigInt(this.visibleLineCount)&&(u.offset=c.alignmentBounds.lower,this.setState(f=>({...f,wheelPos:this.prevState.wheelPos}))),u.offset>=c.alignmentBounds.upper&&this.setState(f=>({...f,scrolling:!1}))}const[a,l]=this.internal.telem.value();this.values=l,this.checkEmpty(),t.stopListeningTelem?.(),t.stopListeningTelem=t.telem.onChange(()=>{const[u,c]=this.internal.telem.value();this.checkEmpty(),this.values=c,this.requestRender()}),!(!this.state.visible&&!this.prevState.visible)&&this.requestRender()}checkEmpty(){const e=this.values.length===0;e!==this.state.empty&&this.setState(t=>({...t,empty:e}))}afterDelete(){const{telem:e,render:t}=this.internal;e.cleanup?.(),t.erase(i.Ho.construct(this.state.region),i.K.ZERO,$e)}requestRender(){const{render:e}=this.internal;e.loop.set({key:`${this.type}-${this.key}`,render:()=>this.render(),priority:"high",canvases:[$e]})}get lineHeight(){return this.internal.theme.typography[this.state.font].size*this.internal.theme.sizes.base}get totalHeight(){return Math.ceil(this.values.length*this.lineHeight)}get visibleLineCount(){return Math.min(Math.floor((i.Ho.height(this.state.region)-12)/this.lineHeight),this.values.length)}render(){const{render:e}=this.internal,t=this.state.region;if(i.Ho.areaIsZero(t))return;if(!this.state.visible)return()=>e.erase(t,i.K.ZERO,$e);let r;if(!this.state.scrolling)r=this.values.subIterator(this.values.length-this.visibleLineCount,this.values.length);else{const c=this.values.traverseAlignment(this.scrollState.offset,-BigInt(this.visibleLineCount));r=this.values.subAlignmentSpanIterator(c,this.visibleLineCount)}const s=this.state.region,o=e[$e],a=new Ze(o,this.internal.theme),l=e.scissor(s,i.K.ZERO,[$e]);this.renderElements(a,r),this.renderScrollbar(a),l();const u=i.Ho.copy(this.state.region);return({canvases:c})=>e.erase(u,this.state.overshoot,...c)}renderScrollbar(e){const t=this.state.region,r=i.Ho.height(t)/this.totalHeight*i.Ho.height(t);if(r>=i.Ho.height(t)*_u)return;let s=i.Ho.bottom(t)-r;this.state.scrolling&&(s-=Number(this.values.distance(this.values.alignmentBounds.upper,this.scrollState.offset))/this.values.length*i.Ho.height(t)),s<0&&(s=i.Ho.top(t)),e.container({region:i.Ho.construct({x:i.Ho.right(t)-6,y:s},{width:6,height:r}),bordered:!1,backgroundColor:o=>o.colors.gray.l6})}renderElements(e,t){const r=this.state.region;let s=0;for(const o of t){const a=this.values.dataType.equals(i.n.JSON)?JSON.stringify(o):o.toString();e.text({text:a,level:this.state.font,shade:11,position:i.K.translate(i.Ho.topLeft(r),{x:6,y:s*this.lineHeight+6}),code:!0}),s++}}}const zu={[Je.TYPE]:Je},Tr=d.z.object({one:i.K.xy.nullable(),two:i.K.xy.nullable(),hover:i.K.xy.nullable(),color:d.z.union([i.cr.colorZ,d.z.object({verticalLine:i.cr.colorZ.optional().default(i.cr.ZERO),horizontalLine:i.cr.colorZ.optional().default(i.cr.ZERO),obliqueLine:i.cr.colorZ.optional().default(i.cr.ZERO)})]).optional().default(i.cr.ZERO),strokeWidth:d.z.number().optional().default(1),strokeDash:d.z.number().optional().default(2)});class et extends p.Leaf{static TYPE="measure";schema=Tr;afterUpdate(e){const t=p.Context.use(e);this.internal.theme=p.use(e),this.internal.renderCtx=t,this.internal.draw=new Ze(t.upper2d,this.internal.theme),X(e,"tool")}afterDelete(e){X(e,"layout")}get verticalLineColor(){return i.cr.isColor(this.state.color)?i.cr.isZero(this.state.color)?this.internal.theme.colors.gray.l8:this.state.color:i.cr.isZero(this.state.color.verticalLine)?this.internal.theme.colors.gray.l8:this.state.color.verticalLine}get horizontalLineColor(){return i.cr.isColor(this.state.color)?i.cr.isZero(this.state.color)?this.internal.theme.colors.gray.l8:this.state.color:i.cr.isZero(this.state.color.horizontalLine)?this.internal.theme.colors.gray.l8:this.state.color.horizontalLine}get obliqueLineColor(){return i.cr.isColor(this.state.color)?i.cr.isZero(this.state.color)?this.internal.theme.colors.gray.l8:this.state.color:i.cr.isZero(this.state.color.obliqueLine)?this.internal.theme.colors.gray.l8:this.state.color.obliqueLine}find(e){const{one:t,two:r}=this.state;if(t==null||r==null)return null;const{one:s,two:o}=this.prevState,{dataOne:a,dataTwo:l}=this.internal;if(s!=null&&i.K.equals(t,s)&&o!=null&&i.K.equals(r,o)&&a!=null&&l!=null){const[b,w]=[e.findByXValue(a.x),e.findByXValue(l.x)];return b.length===0||w.length===0?null:[b.sort((C,M)=>i.K.distance(a,C.value)-i.K.distance(a,M.value))[0],w.sort((C,M)=>i.K.distance(l,C.value)-i.K.distance(l,M.value))[0]]}const u=i.C.XY.scale(e.region).scale(i.Ho.DECIMAL),[c,h]=[u.pos(t),u.pos(r)],[f,g]=[e.findByXDecimal(c.x),e.findByXDecimal(h.x)];if(f.length===0||g.length===0)return null;const[y,S]=[f.sort((b,w)=>i.K.distance(c,b.position)-i.K.distance(c,w.position))[0],g.sort((b,w)=>i.K.distance(h,b.position)-i.K.distance(h,w.position))[0]];return this.internal.dataOne=y.value,this.internal.dataTwo=S.value,[y,S]}renderHover(e){if(this.state.hover==null)return;const t=this.state.hover,r=i.C.XY.scale(e.region).scale(i.Ho.DECIMAL),s=r.pos(t),o=e.findByXDecimal(r.pos(t).x);if(o.length===0)return;const a=o.sort((u,c)=>i.K.distance(s,u.position)-i.K.distance(s,c.position))[0],{draw:l}=this.internal;l.circle({fill:i.cr.setAlpha(a.color,.5),radius:9,position:r.reverse().pos(a.position)})}render(e){if(this.deleted)return;this.renderHover(e);const t=this.find(e);if(t==null)return;const[r,s]=t,{draw:o}=this.internal,{strokeDash:a,strokeWidth:l}=this.state,u=i.C.XY.scale(i.Ho.DECIMAL).scale(e.region),c=u.pos(r.position),h=u.pos(s.position),f=new i.i(Math.abs(r.value.x-s.value.x)),g=Math.abs(r.value.y-s.value.y),y=g/f.seconds;o.line({start:i.K.construct(c.x,c.y),end:i.K.construct(c.x,h.y),stroke:this.verticalLineColor,lineDash:a,lineWidth:l}),o.textContainer({text:[`${g.toFixed(2)} ${r.units??""}`],direction:"x",position:i.K.construct(c.x,(c.y+h.y)/2),level:"small"}),o.line({start:i.K.construct(c.x,h.y),end:i.K.construct(h.x,h.y),stroke:this.horizontalLineColor,lineDash:a,lineWidth:l}),o.textContainer({text:[f.truncate(i.i.MILLISECOND).toString()],direction:"x",position:i.K.construct((c.x+h.x)/2,h.y),level:"small"}),o.line({start:i.K.construct(c.x,c.y),end:i.K.construct(h.x,h.y),stroke:this.obliqueLineColor,lineDash:a,lineWidth:l}),o.textContainer({text:[`${y.toFixed(2)} ${r.units??""} / S`],direction:"x",position:i.K.construct((c.x+h.x)/2,(c.y+h.y)/2),level:"small"}),o.circle({fill:i.cr.setAlpha(r.color,.5),radius:8,position:c}),o.circle({fill:i.cr.setAlpha(r.color,.8),radius:5,position:c}),o.circle({fill:i.cr.WHITE,radius:2,position:c}),o.circle({fill:i.cr.setAlpha(s.color,.5),radius:8,position:h}),o.circle({fill:i.cr.setAlpha(s.color,.8),radius:5,position:h}),o.circle({fill:i.cr.WHITE,radius:2,position:h})}}const eo={[et.TYPE]:et},Au=Object.freeze(Object.defineProperty({__proto__:null,Measure:et,REGISTRY:eo,measureStateZ:Tr},Symbol.toStringTag,{value:"Module"})),to=d.z.object({trigger:d.z.number(),command:d.z.number().optional(),value:d.z.number(),sink:gs.optional().default(as),source:ps.optional().default(ls)});class zn extends p.Leaf{static TYPE="Setpoint";schema=to;afterUpdate(e){const{sink:t,source:r,trigger:s,command:o}=this.state,{internal:a}=this;a.prevTrigger??=s,(async()=>{this.internal.source=q(e,r,this.internal.source),a.sink=rt(e,t,a.sink);const l=a.prevTrigger;a.prevTrigger=s,s>l&&o!=null&&this.internal.sink.set(o),this.updateValue(),a.stopListening?.(),a.stopListening=a.source.onChange(()=>this.updateValue())})()}updateValue(){const e=this.internal.source.value();e!==this.state.value&&this.setState(t=>({...t,value:e,triggered:!1}))}afterDelete(){const{internal:e}=this;e.stopListening(),e.source.cleanup?.(),e.sink.cleanup?.()}}const Hu={[zn.TYPE]:zn},no=d.z.object({triggered:d.z.boolean(),enabled:d.z.boolean(),sink:Gt.optional().default(Kt),source:$n.optional().default(Bn)});class An extends p.Leaf{static TYPE="Toggle";schema=no;afterUpdate(e){this.internal.addStatus=p.useOptionalAdder(e);const{sink:t,source:r,triggered:s,enabled:o}=this.state,{triggered:a}=this.prevState,{internal:l}=this;l.source=q(e,r,l.source),l.sink=rt(e,t,l.sink),s&&!a&&l.sink.set(!o),this.updateEnabledState(),l.stopListening?.(),l.stopListening=l.source.onChange(()=>this.updateEnabledState())}updateEnabledState(){const e=this.internal.source.value();e!==this.state.enabled&&this.setState(t=>({...t,enabled:e,triggered:!1}))}afterDelete(){this.internal.stopListening(),this.internal.source.cleanup?.(),this.internal.sink.cleanup?.()}}const Zu={[An.TYPE]:An},un={useAtlas:!0},Iu=d.z.object({box:i.Ho.box,telem:Kn.optional().default(cs),backgroundTelem:qn.optional().default(Wt),level:p.levelZ.optional().default("p"),color:i.cr.colorZ.optional().default(i.cr.ZERO),precision:d.z.number().optional().default(2),minWidth:d.z.number().optional().default(60),width:d.z.number().optional(),notation:i.br.notationZ.optional().default("standard"),location:i.K$1.xy.optional().default({x:"left",y:"center"}),useWidthForBackground:d.z.boolean().optional().default(!1),valueBackgroundShift:i.K.xy.optional().default(i.K.ZERO),valueBackgroundOverScan:i.K.xy.optional().default(i.K.ZERO)}),Nu=["upper2d","lower2d"];class Ae extends p.Leaf{static TYPE="value";static z=Iu;schema=Ae.z;afterUpdate(e){const{internal:t}=this;t.renderCtx=p.Context.use(e),t.theme=p.use(e),i.cr.isZero(this.state.color)?t.textColor=t.theme.colors.gray.l10:t.textColor=this.state.color,t.telem=q(e,this.state.telem,t.telem),t.stopListening?.(),t.stopListening=t.telem.onChange(()=>this.requestRender()),t.fontString=qe.fontString(t.theme,{level:this.state.level,code:!0}),t.backgroundTelem=q(e,this.state.backgroundTelem,t.backgroundTelem),t.stopListeningBackground?.(),t.stopListeningBackground=t.backgroundTelem.onChange(()=>this.requestRender()),t.requestRender=os(e),this.requestRender()}afterDelete(){const{internal:e}=this;e.stopListening?.(),e.stopListeningBackground?.(),e.telem.cleanup?.(),e.backgroundTelem.cleanup?.(),e.requestRender==null?e.renderCtx.erase(i.Ho.construct(this.state.box),i.K.ZERO,...Nu):e.requestRender("layout")}requestRender(){const{requestRender:e}=this.internal;e!=null?e("layout"):this.render({})}get fontHeight(){const{theme:e}=this.internal;return e.typography[this.state.level].size*e.sizes.base}maybeUpdateWidth(e){const{theme:t}=this.internal,r=e+t.sizes.base+this.fontHeight;this.state.width==null||this.state.width+this.fontHeight*.5<r||this.state.minWidth>r&&this.state.width!==this.state.minWidth?this.setState(s=>({...s,width:Math.max(r,s.minWidth)})):this.state.width-this.fontHeight>r&&this.setState(s=>({...s,width:Math.max(r,s.minWidth)}))}render({viewportScale:e=i.C.XY.IDENTITY}){const{renderCtx:t,telem:r,backgroundTelem:s,fontString:o,requestRender:a}=this.internal,{location:l,box:u}=this.state;if(i.Ho.areaIsZero(u))return;const c=i.Ho.topLeft(u),h=i.Ho.width(u),f=i.Ho.height(u),g=t.lower2d.applyScale(e);let y=r.value();g.font=o;const S=this.fontHeight,b=y[0]=="-";b&&(y=y.slice(1));const{theme:w}=this.internal,C=g.textDimensions(y,un),M=C.width+w.sizes.base,P=C.height;a==null&&t.erase(i.Ho.construct(this.prevState.box)),this.maybeUpdateWidth(M);const D={...i.K.ZERO};l.x==="left"?D.x=6+S*.75:l.x==="center"&&(D.x=h/2-M/2),l.y==="center"&&(D.y=f/2+P/2);const _=i.K.translate(c,D);let x=!0;if(this.state.backgroundTelem.type!=Wt.type){const L=s.value();if(!i.cr.isZero(L)){x=!1,g.fillStyle=i.cr.hex(L);const Ie=this.state.useWidthForBackground?this.state.width??this.state.minWidth:i.Ho.width(u);g.fillRect(...i.K.couple(i.K.translate(c,this.state.valueBackgroundShift)),Ie+this.state.valueBackgroundOverScan.x,f+this.state.valueBackgroundOverScan.y);const pe=i.cr.pickByContrast(L,w.colors.gray.l0,w.colors.gray.l11);g.fillStyle=i.cr.hex(pe)}}x&&(g.fillStyle=i.cr.hex(this.internal.textColor)),b&&g.fillText("-",...i.K.couple(i.K.translateX(_,-S*.6)),void 0,un),g.fillText(y,...i.K.couple(_),void 0,un)}}const ro={[Ae.TYPE]:Ae},Bu=Object.freeze(Object.defineProperty({__proto__:null,REGISTRY:ro,Value:Ae},Symbol.toStringTag,{value:"Module"}));class so{entries=new Map;setListeners=new Map;deleteListeners=new Map;handleError;equal;constructor(e,t=()=>!1){this.handleError=e,this.equal=t}set(e,t,r){if(Array.isArray(t))return t.forEach(a=>this.set(e,a.key,a));const s=this.entries.get(t),o=p.executeSetter(r,s);o==null||s!=null&&this.equal(o,s,t)||(this.entries.set(t,o),this.notifySet(e,t,o))}get(e){return typeof e=="function"?Array.from(this.entries.values()).filter(e):Array.isArray(e)?e.map(t=>this.entries.get(t)).filter(t=>t!=null):this.entries.get(e)}has(e){return this.entries.has(e)}delete(e,t){p.t.toArray(t).forEach(r=>{this.entries.delete(r),this.notifyDelete(e,r)})}clear(){this.entries.clear()}onSet(e,t,r){return this.setListeners.set(t,{scope:e,key:r}),()=>{this.setListeners.delete(t)}}onDelete(e,t,r){return this.deleteListeners.set(t,{scope:e,key:r}),()=>this.deleteListeners.delete(t)}notifySet(e,t,r){this.setListeners.forEach((s,o)=>{const a=s.key==null||s.key===t,l=s.scope!==e;a&&l&&this.handleError(async()=>o(r),"Failed to notify set listener")})}notifyDelete(e,t){this.deleteListeners.forEach((r,s)=>{const o=r.key==null||r.key===t,a=r.scope!==e;o&&a&&this.handleError(async()=>s(t),"Failed to notify delete listener")})}scope(e){return{set:(t,r)=>this.set(e,t,r),get:t=>this.get(t),has:t=>this.has(t),delete:t=>this.delete(e,t),onSet:(t,r)=>this.onSet(e,t,r),onDelete:(t,r)=>this.onDelete(e,t,r)}}}const io=(n,e)=>Object.fromEntries(Object.entries(n).map(([t,{equal:r}])=>[t,new so(e,r)])),Hn=(n,e)=>Object.fromEntries(Object.entries(n).map(([t])=>[t,n[t].scope(e)])),Uu=(n,e)=>{const t=n.includes("delete"),r=e.includes("delete");return t&&!r?-1:!t&&r?1:0},$u=async({openStreamer:n,storeConfig:e,handleError:t,client:r,store:s})=>{const o=Object.values(e),a=i.c.unique(o.flatMap(({listeners:f})=>f.map(({channel:g})=>g))),l={};o.forEach(({listeners:f})=>f.forEach(g=>{const{channel:y}=g;l[y]=[...l[y]||[],g]}));const u=await p.sw.HardenedStreamer.open(n,a),c=new p.sw.ObservableStreamer(u),h=f=>{const g=[...f.uniqueNames];g.sort(Uu),t(async()=>{for(const y of g){const S=f.get(y),b=l[y];if(b!=null)for(const{onChange:w,schema:C}of b)await t(async()=>{let M;S.dataType.equals(i.n.JSON)?M=S.parseJSON(C):M=Array.from(S).map(P=>C.parse(P));for(const P of M)await t(()=>w({changed:P,client:r,store:s}),`Failed to handle streamer change for ${y}`,p._t)},`Failed to parse streamer change for ${y}`)}},`Failed to handle streamer change for ${i.vr.naturalLanguageJoin(g)}`)};return c.onChange(h),c.close.bind(c)};class oo{store;streamCloser=null;client;constructor({client:e,openStreamer:t,storeConfig:r,handleError:s,handleAsyncError:o}){this.store=io(r,s),this.client=e,e!=null&&(t??=e?.openStreamer.bind(e),this.streamCloser=$u({client:e,storeConfig:r,handleError:o,store:Hn(this.store,""),openStreamer:t}))}async awaitInitialized(){this.streamCloser!=null&&await this.streamCloser}scopedStore(e){return Hn(this.store,e)}async close(){if(this.streamCloser==null)return;await(await this.streamCloser)()}}const ao=d.object({}),Zn="flux-context",Er="flux.Provider",qu=(n,e)=>n.get(Zn).scopedStore(e),Fu=n=>{const e=(t,r)=>{if("client"in n)return n.client;const s=He(t);return r!=null&&r?.client?.key===s?.key?r:new oo({client:s,storeConfig:n.storeConfig,handleError:p.useErrorHandler(t),handleAsyncError:p.useAsyncErrorHandler(t)})};return class lo extends p.Composite{static TYPE=Er;static stateZ=ao;schema=lo.stateZ;afterUpdate(r){const{internal:s}=this;s.store=e(r,s.store),r.wasSetPreviously(Zn)||r.set(Zn,s.store)}}},Ku=n=>({[Er]:Fu(n)}),Wu=p.ww.payloadZ.extend({viewport:i.H.bounds}),co=d.z.object({cursor:i.K.xy.or(d.z.null()),hovered:Wu.or(d.z.null()),count:d.z.number()});class Bt extends p.Leaf{static TYPE="range-provider";schema=co;fetchedInitial=i.w.ZERO;afterUpdate(e){const{internal:t}=this;t.render=p.Context.use(e),t.draw=new Ze(t.render.upper2d,p.use(e)),t.requestRender=Ft(e),t.runAsync=p.useErrorHandler(e),t.ranges??=new Map;const r=He(e);if(t.requestRender("tool"),r==null)return;t.client=r;const s=qu(e,this.key);t.removeListener?.();const o=s.ranges.onSet(l=>{t.client!=null&&(i.cr.isCrude(l.color)&&t.ranges.set(l.key,t.client.ranges.sugarOne(l)),this.setState(u=>({...u,count:t.ranges.size})),t.requestRender("tool"))}),a=s.ranges.onDelete(async l=>{t.ranges.delete(l),this.setState(u=>({...u,count:t.ranges.size})),t.requestRender("tool")});t.removeListener=()=>{o(),a()}}fetchInitial(e){const{internal:t}=this,{client:r,runAsync:s}=t;r==null||this.fetchedInitial.equals(e,i.i.minutes(1))||(this.fetchedInitial=e,s(async()=>{(await r.ranges.retrieve(e)).forEach(a=>{i.cr.isCrude(a.color)&&t.ranges.set(a.key,a)}),this.setState(a=>({...a,count:t.ranges.size}))},"failed to fetch initial ranges"))}render(e){const{dataToDecimalScale:t,region:r,viewport:s,timeRange:o}=e;this.fetchInitial(o);const{draw:a,ranges:l}=this.internal,u=t.scale(i.Ho.xBounds(r)),c=this.state.cursor==null?null:this.state.cursor.x;let h=null;const f=a.canvas.scissor(i.Ho.construct({x:i.Ho.left(r),y:i.Ho.top(r)-35},{x:i.Ho.right(r),y:i.Ho.bottom(r)}));l.forEach(g=>{const y=i.cr.colorZ.safeParse(g.color);if(!y.success)return;const S=y.data;let b=u.pos(Number(g.timeRange.start.valueOf()));const w=u.pos(Number(g.timeRange.end.valueOf()));if(w<i.Ho.left(r)||b>i.Ho.right(r))return;b=i.R(b,i.Ho.left(r)-2,i.Ho.right(r)-1);let C=!1;c!=null&&(C=i.H.contains({lower:b,upper:w},c)),C&&(h={key:g.key,parent:g.parent,name:g.name,color:g.color,labels:g.labels,timeRange:g.timeRange,viewport:{lower:t.scale(i.Ho.xBounds(s)).pos(Number(g.timeRange.start.valueOf())),upper:t.scale(i.Ho.xBounds(s)).pos(Number(g.timeRange.end.valueOf()))}}),a.container({region:i.Ho.construct({x:b,y:i.Ho.top(r)-1},{x:w,y:i.Ho.bottom(r)-1}),backgroundColor:i.cr.setAlpha(S,.2),bordered:!1});const M=i.Ho.construct({x:b+1,y:i.Ho.top(r)-34},{x:w-1,y:i.Ho.top(r)-12});a.container({region:M,backgroundColor:i.Ho.width(M)<20?i.cr.setAlpha(S,.4):P=>C?P.colors.gray.l2:P.colors.gray.l0,bordered:!0,borderWidth:1,borderRadius:2,borderColor:i.cr.setAlpha(S,.8)}),a.text({text:g.name,position:{x:b+8,y:i.Ho.top(r)-30},level:"small",shade:10,weight:500,maxWidth:w-b-16})}),f(),h!=null?this.setState(g=>({...g,hovered:h})):this.state.hovered&&this.setState(g=>({...g,hovered:null}))}}const ju={[Rn.TYPE]:Rn,[Bt.TYPE]:Bt},Gu=at;class Ut extends ki{static TYPE="XAxis";schema=at;render(e){if(this.deleted)return;const[t,r]=this.dataToDecimalScale(e.hold,this.dataBounds.bind(this),e.viewport);if(this.renderAxis(e,t.reverse()),this.renderYAxes(e,t),this.renderRangeAnnotations(e,t),r!=null)throw r}findByXDecimal(e,t){const[r,s]=this.dataToDecimalScale(e.hold,this.dataBounds.bind(this),e.viewport);if(s!=null)throw s;return this.findByXValue(e,r.reverse().pos(t))}findByXValue(e,t){const[r,s]=this.dataToDecimalScale(e.hold,this.dataBounds.bind(this),e.viewport);if(s!=null)throw s;const o={...e,xDataToDecimalScale:r};return this.yAxes.map(a=>a.findByXValue(o,t)).flat()}renderYAxes(e,t){const r={...e,xDataToDecimalScale:t};this.yAxes.forEach(s=>s.render(r))}get yAxes(){return this.childrenOfType(At.TYPE)}get rangeAnnotations(){return this.childrenOfType(Bt.TYPE)}bounds(e){const[t,r]=this.iBounds(e,this.dataBounds.bind(this));if(r!=null)throw r;return t}renderRangeAnnotations(e,t){const r=this.bounds(e.hold);this.rangeAnnotations.forEach(s=>s.render({dataToDecimalScale:t,region:e.plot,viewport:e.viewport,timeRange:new i.w(r.lower,r.upper)}))}dataBounds(){return this.yAxes.map(e=>e.xBounds())}}const uo=d.z.object({container:i.Ho.box,viewport:i.Ho.box,hold:d.z.boolean().optional().default(!1),grid:d.z.record(d.z.string(),ni),visible:d.z.boolean().optional().default(!0),clearOverScan:i.K.crudeZ.optional().default(i.K.ZERO)}),Vu=(n,e)=>{const t=i.Ho.width(n)*Math.sqrt(i.Ho.height(n)),r=i.Ho.width(e)*Math.sqrt(i.Ho.height(e));return t/r},Xu=["upper2d","lower2d","gl"],Qu=["upper2d"];class In extends p.Composite{static TYPE="LinePlot";schema=uo;afterUpdate(e){this.internal.instrumentation=p.useInstrumentation(e,"lineplot"),this.internal.handleError=p.useErrorHandler(e),this.internal.renderCtx=p.Context.use(e),qt(e,t=>{this.state.visible&&this.requestRender("low",t)}),!(!this.state.visible&&!this.prevState.visible)&&this.requestRender("high","layout")}afterDelete(e){this.internal.renderCtx=p.Context.use(e),this.requestRender("high","layout")}findByXDecimal(e){const t={...this.state,plot:this.calculatePlot(),exposure:this.exposure};return this.axes.flatMap(r=>r.findByXDecimal(t,e)).flat()}findByXValue(e){const t={...this.state,plot:this.calculatePlot(),exposure:this.exposure};return this.axes.flatMap(r=>r.findByXValue(t,e)).flat()}get axes(){return this.childrenOfType(Ut.TYPE)}get tooltips(){return this.childrenOfType(Qe.TYPE)}get measures(){return this.childrenOfType(et.TYPE)}get bounds(){return this.childrenOfType(Pt.TYPE)}get exposure(){return Vu(this.state.viewport,this.state.container)}renderAxes(e,t){const r={...this.state,plot:e,canvases:t,exposure:this.exposure};this.axes.forEach(s=>s.render(r))}renderTooltips(e,t){const r={findByXDecimal:this.findByXDecimal.bind(this),region:e,canvases:t};this.tooltips.forEach(s=>s.render(r))}renderBounds(){this.bounds.forEach(e=>e.render({getBounds:()=>{const t={};return this.axes.forEach(r=>{const s=r.state.axisKey??r.key;t[s]=r.bounds(this.state.hold),r.yAxes.forEach(o=>{const a=o.state.axisKey??o.key;t[a]=o.bounds(this.state.hold)})}),t}}))}renderMeasures(e){const t={findByXDecimal:this.findByXDecimal.bind(this),findByXValue:this.findByXValue.bind(this),region:e};this.measures.forEach(r=>r.render(t))}calculatePlot(){return ga(this.state.grid,this.state.container)}render(e){const{instrumentation:t,renderCtx:r,handleError:s}=this.internal;if(this.deleted){t.L.debug("deleted, skipping render",{key:this.key});return}if(!this.state.visible)return t.L.debug("not visible, skipping render",{key:this.key}),({canvases:h})=>r.erase(this.state.container,this.state.clearOverScan,...h);const o=this.calculatePlot();t.L.debug("rendering",{key:this.key,viewport:this.state.viewport,container:this.state.container,grid:this.state.grid,plot:o,canvases:e});const a=i.K.construct(this.state.clearOverScan),l=r.scissor(this.state.container,a,e.filter(h=>h!=="gl")),u=r.scissor(o,i.K.ZERO,e.filter(h=>h==="gl"));try{this.renderAxes(o,e),this.renderTooltips(o,e),this.renderMeasures(o),this.renderBounds()}catch(h){s(h,"failed to render line plot")}finally{l(),u()}t.L.debug("rendered",{key:this.key});const c=i.Ho.copy(this.state.container);return({canvases:h})=>r.erase(c,this.state.clearOverScan,...h)}requestRender(e,t){const{renderCtx:r}=this.internal;let s=Xu;t==="tool"&&(s=Qu),r.loop.set({key:`${this.type}-${this.key}`,render:()=>this.render(s),priority:e,canvases:s})}}const Ju={[In.TYPE]:In,[Ut.TYPE]:Ut,[At.TYPE]:At,[Pt.TYPE]:Pt};exports.AcquireChannelControl=Zt;exports.Annotation=Rn;exports.AuthoritySource=It;exports.Base=fe;exports.BaseProvider=Oe;exports.Bottom=xi;exports.BoundQuerier=Pt;exports.Button=_n;exports.Canvas=Nt;exports.Chip=Mn;exports.Client=oo;exports.Controller=On;exports.Diagram=Pu;exports.Diagram$1=ce;exports.FLUX_STORE_KEY=du;exports.Indicator=Dn;exports.Legend=Ln;exports.Light=Yn;exports.Line=zt;exports.LinePlot=In;exports.Log=Je;exports.MODES=Fi;exports.MOUSE_DOWN_INCREMENT=Wi;exports.MOUSE_UP_INCREMENT=ji;exports.Measure=et;exports.PROVIDER_TYPE=Er;exports.Provider=Bt;exports.Provider$1=Ct;exports.REGISTRY=yu;exports.REGISTRY$1=zu;exports.REGISTRY$10=eo;exports.REGISTRY$11=Ju;exports.REGISTRY$12=su;exports.REGISTRY$13=ku;exports.REGISTRY$14=Vi;exports.REGISTRY$15=xu;exports.REGISTRY$16=Gi;exports.REGISTRY$17=Eu;exports.REGISTRY$2=ro;exports.REGISTRY$3=Qi;exports.REGISTRY$4=Zu;exports.REGISTRY$5=ei;exports.REGISTRY$6=Gs;exports.REGISTRY$7=Hu;exports.REGISTRY$8=Oi;exports.REGISTRY$9=ju;exports.Right=Ei;exports.Rule=Ve;exports.STATUSES=Ai;exports.STORE_CONFIG=gu;exports.ScopedUnaryStore=so;exports.SetChannelValue=Ht;exports.Setpoint=zn;exports.StateProvider=Xe;exports.Table=ze;exports.Toggle=An;exports.Tooltip=Qe;exports.Top=Ti;exports.Value=Ae;exports.XAxis=Ut;exports.YAxis=At;exports.ZERO_CONTEXT_VALUE=sr;exports.a=$t;exports.acquireChannelControl=bu;exports.acquireChannelControlPropsZ=Ni;exports.aether=cu;exports.annotationStateZ=Di;exports.authoritySource=Su;exports.authoritySourceDetailsZ=wu;exports.authoritySourceProps=Bi;exports.axisStateZ=vr;exports.boundQuerierStateZ=ti;exports.buttonStateZ=Ki;exports.canvas=Cu;exports.canvasStateZ=wr;exports.channelData=xs;exports.chipStateZ=_i;exports.chipStatusDetailsZ=Li;exports.color=De;exports.colorGradient=Zs;exports.control=qt;exports.controllerStateZ=Zi;exports.coreAxisStateZ=at;exports.createRegistry=Ku;exports.createStore=io;exports.diagramStateZ=Sr;exports.external=da;exports.indicatorStateZ=$i;exports.indicatorStatusDetailsZ=Ui;exports.interpolate=Jt;exports.interpolateNumber=je;exports.interpolateRgb=Tn;exports.interpolateString=ai;exports.legendStateZ=qi;exports.lightStateZ=Xi;exports.linePlotStateZ=uo;exports.logState=Ji;exports.measure=Au;exports.measureStateZ=Tr;exports.newCanvas=Si;exports.newTickFactory=Pn;exports.parseAutoBounds=Ri;exports.provider=qo;exports.providerStateZ=co;exports.providerStateZ$1=ao;exports.providerStateZ$2=or;exports.regions=ie;exports.request=X;exports.rollingAverage=As;exports.rollingAverageProps=tr;exports.ruleStateZ=br;exports.scaleNumber=Ns;exports.scopeStore=Hn;exports.setChannelValue=vu;exports.setChannelValuePropsZ=Ii;exports.setpoint=Ds;exports.setpointStateZ=to;exports.sinkPipeline=bs;exports.sinkPipelinePropsZ=Vn;exports.sourcePipeline=vs;exports.sourcePipelinePropsZ=jn;exports.stateProviderStateZ=Yi;exports.stateZ=Mi;exports.statusZ=Hi;exports.streamChannelData=Ts;exports.streamChannelValue=Es;exports.streamChannelValuePropsZ=Xn;exports.stringSourceSpecZ=Kn;exports.stringifyNumber=zs;exports.stringifyNumberProps=er;exports.sugaredStateZ=zi;exports.tickFactoryProps=yr;exports.tickType=mr;exports.toggleStateZ=no;exports.tooltip=Lu;exports.tooltipStateZ=xr;exports.useOptionalRequestor=os;exports.useRequestor=Ft;exports.value=Bu;exports.withinBounds=Ls;exports.withinBoundsProps=Jn;exports.withinSizeThreshold=Ci;exports.xAxisStateZ=Gu;exports.yAxisStateZ=uu;
|
|
53
|
+
`,Mi=d.z.object({x:pt,y:pt,label:d.z.string().optional(),color:i.cr.colorZ,strokeWidth:d.z.number().default(1),downsample:d.z.number().min(1).max(50).default(1),downsampleMode:nr.default("decimate"),visible:d.z.boolean().optional().default(!0)}),Gc=(n,e,t)=>n===-1||e===-1||n>=t.series.length?NaN:Number(t.series[n].at(e)),Vc=i.i.milliseconds(2);i.K.NAN,i.K.NAN,i.cr.ZERO,i.H.ZERO;const Xc=(n,e)=>e.equals(i.n.UINT8)?n.UNSIGNED_BYTE:n.FLOAT;class ns extends p.GLProgram{translationBufferCache=new Map;constructor(e,t,r){super(e,t,r),this.translationBufferCache=new Map}bindState({strokeWidth:e,color:t}){return this.uniformColor("u_color",t),this.attrStrokeWidth(e)}bindScale(e,t){const r=i.K.scale(e.scale,t.scale),s=i.K.translate(i.K.scale(t.scale,e.offset),t.offset);this.uniformXY("u_scale_aggregate",r),this.uniformXY("u_offset_aggregate",s)}draw({x:e,y:t,count:r,downsample:s,xOffset:o,yOffset:a},l,u,c){const{gl:h}=this.renderCtx;this.bindAttrBuffer("x",e.glBuffer,s,o,u),this.bindAttrBuffer("y",t.glBuffer,s,a,c),h.drawArraysInstanced(h.LINE_STRIP,0,r/s,l)}bindAttrBuffer(e,t,r,s=0,o){const{gl:a}=this.renderCtx;a.bindBuffer(a.ARRAY_BUFFER,t);const l=a.getAttribLocation(this.prog,`a_${e}`),u=Xc(a,o),c=o.density.valueOf();o.equals(i.n.UINT8)?a.vertexAttribIPointer(l,1,u,c*r,c*s):a.vertexAttribPointer(l,1,u,!1,c*r,c*s),a.enableVertexAttribArray(l)}getAndBindTranslationBuffer(e){const{gl:t}=this.renderCtx,r=`${this.renderCtx.aspect}:${e}`,s=this.translationBufferCache.get(r);if(s!=null)return t.bindBuffer(t.ARRAY_BUFFER,s.glBuffer),s;const o=t.createBuffer();if(o==null)throw new p.ht("Failed to create buffer from WebGL context");const a=Jc(this.renderCtx.aspect,e);t.bindBuffer(t.ARRAY_BUFFER,o),t.bufferData(t.ARRAY_BUFFER,a,t.DYNAMIC_DRAW);const l={glBuffer:o,jsBuffer:a};return this.translationBufferCache.set(r,l),l}attrStrokeWidth(e){const{gl:t}=this.renderCtx,{jsBuffer:r}=this.getAndBindTranslationBuffer(e),s=t.getAttribLocation(this.prog,"a_translate");return t.vertexAttribPointer(s,2,t.FLOAT,!1,0,0),t.enableVertexAttribArray(s),t.vertexAttribDivisor(s,1),r.length/2}}class xe{static CONTEXT_KEY="pluto-line-gl-program";uint8HybridProgram;float32Program;constructor(e){this.uint8HybridProgram=new ns(e,jc,ts),this.float32Program=new ns(e,Wc,ts)}get gl(){return this.uint8HybridProgram.renderCtx.gl}getProgram(e){return e.equals(i.n.UINT8)?this.uint8HybridProgram:this.float32Program}static create(e,t){const r=new xe(t);return e.set(xe.CONTEXT_KEY,r),r}static use(e){const t=e.get(xe.CONTEXT_KEY);if(t==null)throw new p.ht("GLProgram not found");return t}}class zt extends p.Leaf{static TYPE="line";schema=Mi;afterUpdate(e){const{internal:t}=this,r={onStatusChange:p.useAdder(e)};t.xTelem=q(e,this.state.x,t.xTelem,r),t.yTelem=q(e,this.state.y,t.yTelem,r),t.instrumentation=p.useInstrumentation(e,"line"),t.lineCtx=xe.use(e),t.requestRender=Ft(e),t.stopListeningXTelem?.(),t.stopListeningYTelem?.(),t.stopListeningXTelem=t.xTelem.onChange(()=>t.requestRender("data")),t.stopListeningYTelem=t.yTelem.onChange(()=>t.requestRender("data")),t.requestRender("layout"),(t.xDownsampler?.props.mode!==this.state.downsampleMode||t.xDownsampler?.props.windowSize!==this.state.downsample)&&(t.xDownsampler=new Fe({mode:this.state.downsampleMode,windowSize:this.state.downsample}),t.yDownsampler=new Fe({mode:this.state.downsampleMode,windowSize:this.state.downsample}))}afterDelete(){const{internal:e}=this;e.xTelem.cleanup?.(),e.yTelem.cleanup?.(),e.requestRender("layout")}xBounds(){return this.internal.xTelem.value()[0]}yBounds(){return this.internal.yTelem.value()[0]}findByXValue(e,t){const{xTelem:r,yTelem:s}=this.internal;let[,o]=r.value();o=this.internal.xDownsampler.transform(o);let[a,l]=[-1,-1];o.series.find((w,C)=>{const M=w.binarySearch(t),P=M>=0&&M<w.length;return P&&([a,l]=[M,C]),P});const{key:u}=this,{color:c,label:h}=this.state,f={key:u,color:c,label:h,position:{x:0,y:0},value:{x:NaN,y:NaN},bounds:{lower:0,upper:0}};if(a===-1||l===-1||!this.state.visible)return f;const g=o.series[l];f.value.x=Gc(l,a,o);let[,y]=s.value();y=this.internal.yDownsampler.transform(y);const S=y.series.find(w=>i.H.contains(w.alignmentBounds,g.alignment+BigInt(a)));if(S==null)return f;const b=Number(S.alignment-g.alignment);return f.value.y=Number(S.at(a-b)),f.bounds={...S.bounds},f.position={x:e.dataToDecimalScale.x.pos(f.value.x),y:e.dataToDecimalScale.y.pos(f.value.y)},f}render(e){if(this.deleted||!this.state.visible)return;const{downsample:t}=this.state,{xTelem:r,yTelem:s,lineCtx:o,xDownsampler:a,yDownsampler:l}=this.internal,{dataToDecimalScale:u,exposure:c}=e;let[[,h],[,f]]=[r.value(),s.value()];if(h=a.transform(h),f=l.transform(f),h.updateGLBuffer(o.gl),f.updateGLBuffer(o.gl),h.length===0||f.length===0)return;const g=o.getProgram(f.dataType),y=iu(h,f,c,t,this.state.downsampleMode,Vc);this.internal.instrumentation.L.debug("render",()=>({key:this.key,downsample:t,scale:u.transform,props:e.region,ops:ou(y)}));const S=g.setAsActive(),b=g.bindState(this.state),w=g.renderCtx.scaleRegion(e.region).transform;y.forEach(C=>{const M=ru(u,C).transform;g.bindScale(M,w),g.draw(C,b,h.dataType,f.dataType)}),S()}}const Qc=5e3,Jc=(n,e)=>nu(tu(n),e).map((t,r)=>Math.floor(r/eu)*(1/(Qc*n))*t),eu=5,tu=n=>new Float32Array([0,0,0,n,0,-n,1,0,-1,0]),nu=(n,e)=>{const t=new Float32Array(n.length*e);for(let r=0;r<e;r++)t.set(n,r*n.length);return t},ru=(n,e)=>n.translate(n.x.dim(Number(e.x.sampleOffset)),n.y.dim(Number(e.y.sampleOffset))),su={[zt.TYPE]:zt},iu=(n,e,t,r,s,o)=>{if(n.series.length===0||e.series.length===0)return[];const a=[];return n.series.forEach(l=>e.series.forEach(u=>{if(!au(l,u,o))return;let c=0,h=0;l.alignment<u.alignment?c=Number(u.alignment-l.alignment):u.alignment<l.alignment&&(h=Number(l.alignment-u.alignment));const f=Math.min(l.length-c,u.length-h);if(f===0)return;let g=i.R(Math.round(t*4*f),r,51);s!=="decimate"&&(g=1),a.push({x:l,y:u,xOffset:c,yOffset:h,count:f,downsample:g})})),a},ou=n=>n.map(e=>({...e,x:e.x.digest,y:e.y.digest})),au=(n,e,t)=>{const r=n.timeRange.overlapsWith(e.timeRange,t),s=i.H.overlapsWith(n.alignmentBounds,e.alignmentBounds);return r&&s};class Ze{canvas;theme;constructor(e,t){this.canvas=e,this.theme=t}rule({direction:e,region:t,position:r,...s}){return e==="x"?this.line({start:i.K.construct(i.Ho.left(t),r),end:i.K.construct(i.Ho.right(t),r),...s}):this.line({start:i.K.construct(r,i.Ho.top(t)),end:i.K.construct(r,i.Ho.bottom(t)),...s})}line({stroke:e,lineWidth:t,lineDash:r,start:s,end:o}){const a=this.canvas;a.strokeStyle=i.cr.hex(e),a.lineWidth=t,a.setLineDash([r]),a.beginPath(),a.moveTo(...i.K.couple(s)),a.lineTo(...i.K.couple(o)),a.stroke()}circle({fill:e,radius:t,position:r}){const s=this.canvas;s.fillStyle=i.cr.hex(e),s.beginPath(),s.arc(...i.K.couple(r),t,0,2*Math.PI),s.fill()}resolveColor(e,t){return e==null?t==null?this.theme.colors.text:this.resolveColor(t):typeof e=="function"?e(this.theme):i.cr.construct(e)}border({region:e,color:t,width:r,radius:s,location:o}){const a=this.canvas;a.strokeStyle=i.cr.hex(this.resolveColor(t,this.theme.colors.border)),a.lineWidth=r??this.theme.sizes.border.width,s??=this.theme.sizes.border.radius,o==null||o===!0?s>0?(a.roundRect(...i.K.couple(i.Ho.topLeft(e)),...i.K.couple(i.Ho.dims(e)),s),a.stroke()):(a.rect(...i.K.couple(i.Ho.topLeft(e)),...i.K.couple(i.Ho.dims(e))),a.stroke()):p.t.toArray(o).forEach(l=>{const[u,c]=i.Ho.edgePoints(e,l);a.beginPath(),a.moveTo(...i.K.couple(u)),a.lineTo(...i.K.couple(c)),a.stroke()})}container({region:e,bordered:t=!0,rounded:r=!0,borderColor:s,borderRadius:o,borderWidth:a,backgroundColor:l}){o??=this.theme.sizes.border.radius,a??=1;const u=this.canvas;u.fillStyle=i.cr.hex(this.resolveColor(l,this.theme.colors.gray.l1)),u.strokeStyle=i.cr.hex(this.resolveColor(s,this.theme.colors.border)),u.setLineDash([]),u.lineWidth=1,u.beginPath(),r?u.roundRect(...i.K.couple(i.Ho.topLeft(e)),...i.K.couple(i.Ho.dims(e)),o):u.rect(...i.K.couple(i.Ho.topLeft(e)),...i.K.couple(i.Ho.dims(e))),u.fill(),t&&this.border({region:e,color:s,radius:o,width:a,location:t})}textContainer(e){const[t,r]=this.spacedTextDrawF(e);t.width+=12,t.height+=12;const{root:s=i.K$1.TOP_LEFT,offset:o=i.K.ZERO}=e,a={...e.position};s.x==="right"?a.x-=t.width+o.x:a.x+=o.x,s.y==="bottom"?a.y-=t.height+o.y:a.y+=o.y,this.container({region:i.Ho.construct(a,t.width,t.height),...e}),this.canvas.filter="none",r(i.K.translate(a,[6,6]))}spacedTextDrawF({text:e,direction:t,spacing:r=1,level:s="p"}){const o=qe.fontString(this.theme,{level:s}),a=e.map(c=>p.dimensions(c,o,this.canvas)),l=this.theme.sizes.base*r,u=Math.max(...a.map(c=>c[i.g.dimension(t)]))+l;return[{[i.g.dimension(i.g.swap(t))]:Math.max(...a.map(c=>c[i.g.dimension(i.g.swap(t))])),[i.g.dimension(t)]:u*e.length-l},c=>{const h=qe.fontString(this.theme,{level:s});this.canvas.font=h,this.canvas.fillStyle=i.cr.hex(this.theme.colors.text),this.canvas.textBaseline="top",e.forEach((f,g)=>{this.canvas.fillText(f,c.x,c.y+u*g)})}]}list({length:e,itemHeight:t,width:r,spacing:s=0,position:o,draw:a,root:l=i.K$1.TOP_LEFT,offset:u=i.K.ZERO,padding:c=i.K.ZERO}){const h=e*t+c.y*2+s*(e-1),f=r+c.x*2,g={...o};l.x==="right"?g.x-=r+u.x*2:g.x+=u.x,l.y==="top"?g.y-=h+u.y*2:g.y+=u.y,this.container({region:i.Ho.construct(g,{width:f,height:h}),backgroundColor:y=>y.colors.gray.l1});for(let y=0;y<e;y++){const S=i.Ho.construct(i.K.construct(g.x+c.x,g.y+y*t+c.y+s*y),r,t);a(y,S)}}drawTextInCenter({box:e,text:t,level:r}){const s=p.dimensions(t,this.canvas.font,this.canvas),o=i.Ho.positionInCenter(i.Ho.construct(i.K.ZERO,s),e);return this.text({text:t,position:i.Ho.topLeft(o),level:r})}text({text:e,position:t,level:r="p",weight:s,shade:o,maxWidth:a,code:l,justify:u="left",align:c="top",color:h}){this.canvas.font=qe.fontString(this.theme,{level:r,weight:s,code:l}),h!=null?this.canvas.fillStyle=i.cr.hex(this.resolveColor(h)):o==null?this.canvas.fillStyle=i.cr.hex(this.theme.colors.text):this.canvas.fillStyle=i.cr.hex(this.theme.colors.gray[`l${o}`]),this.canvas.textAlign=u,this.canvas.textBaseline=c;let f;a!=null&&(f=this.canvas.scissor(i.Ho.construct(t,a,1e3))),this.canvas.fillText(e,t.x,t.y),f?.()}}const br=d.z.object({position:d.z.number().optional(),pixelPosition:d.z.number().optional(),dragging:d.z.boolean(),lineWidth:d.z.number().optional().default(1),lineDash:d.z.number().optional().default(20),color:i.cr.colorZ}),lu=3;class Ve extends p.Leaf{static TYPE="Rule";schema=br;lastUpdateRef=null;afterUpdate(e){this.internal.renderCtx=p.Context.use(e);const t=p.use(e);this.internal.draw=new Ze(this.internal.renderCtx.upper2d,t),X(e,"tool")}afterDelete(e){X(e,"tool")}updatePositions({decimalToDataScale:e,plot:t}){const r=this.state.dragging,s=this.prevState.dragging&&!r;if((r||s)&&this.state.pixelPosition!=null){if(this.lastUpdateRef??=this.state.pixelPosition,Math.abs(this.state.pixelPosition-this.lastUpdateRef)<lu&&!s)return this.state.pixelPosition;this.lastUpdateRef=this.state.pixelPosition;const l=e.pos(this.state.pixelPosition/i.Ho.height(t));return this.setState(u=>({...u,position:l})),this.state.pixelPosition}if(this.state.position==null){const a=e.pos(.5);this.setState(l=>({...l,position:a}))}const o=e.reverse().pos(this.state.position)*i.Ho.height(t);if(!isNaN(o)){if(this.state.pixelPosition!=null&&Math.abs(o-this.state.pixelPosition)<1)return this.state.pixelPosition;this.setState(a=>({...a,pixelPosition:o}))}return o}render(e){if(this.deleted)return;const{renderCtx:t}=this.internal,{location:r,plot:s}=e,o=i.K$1.direction(r),{upper2d:a}=t,l=this.internal.draw,u=this.updatePositions(e)+i.Ho.top(e.plot);l.rule({stroke:this.state.color,lineWidth:this.state.lineWidth,lineDash:this.state.lineDash,direction:o,region:s,position:u}),a.fillStyle=i.cr.hex(this.state.color),a.lineJoin="round",a.lineWidth=3.5,a.lineCap="round",a.beginPath();const c=4;if(r==="left"){const h=i.Ho.left(s)-1;a.moveTo(h,u),a.lineTo(h-c,u-c),a.lineTo(h-c,u+c)}else r==="right"&&(a.moveTo(i.Ho.right(s),u),a.lineTo(i.Ho.right(s)+c,u-c),a.lineTo(i.Ho.right(s)+c,u+c));a.closePath(),a.stroke()}}const Oi={[Ve.TYPE]:Ve},cu=Object.freeze(Object.defineProperty({__proto__:null,REGISTRY:Oi,Rule:Ve,ruleStateZ:br},Symbol.toStringTag,{value:"Module"})),uu=at.extend({location:i.K$1.x.optional().default("left")}),rs=2,hu=n=>i.Ho.signedWidth(n)<rs||i.Ho.signedHeight(n)<rs;class At extends ki{static TYPE="YAxis";schema=at;xBounds(){return i.H.max(this.lines.map(e=>e.xBounds()).filter(e=>i.H.isFinite(e)))}bounds(e){const[t,r]=this.iBounds(e,this.dataBounds.bind(this));if(r!=null)throw r;return t}render(e){if(this.deleted)return;const[t,r]=this.dataToDecimalScale(e.hold,this.dataBounds.bind(this),e.viewport),s=t.invert().reverse();if(this.renderAxis(e,s),this.renderLines(e,t),this.renderRules(e,s),r!=null)throw r}renderLines({xDataToDecimalScale:e,plot:t,canvases:r,exposure:s},o){if(!r.includes("gl")||hu(t))return;const a={region:t,dataToDecimalScale:new i.C.XY(e,o),exposure:s};this.lines.forEach(l=>l.render(a))}renderRules({container:e,plot:t,canvases:r},s){if(!r.includes("upper2d"))return;const{location:o}=this.state,{render:a}=this.internal,l=i.Ho.construct(i.Ho.left(e),i.Ho.top(t),i.Ho.width(e),i.Ho.height(t)),u=a.scissor(l,i.K.ZERO,["upper2d"]),c={container:e,plot:t,decimalToDataScale:s,location:o};this.rules.map(h=>h.render(c)),u()}findByXValue({xDataToDecimalScale:e,plot:t,viewport:r,hold:s,exposure:o},a){const[l,u]=this.dataToDecimalScale(s,this.dataBounds.bind(this),r);if(u!=null)throw u;const c=new i.C.XY(e,l),h={region:t,dataToDecimalScale:c,exposure:o};return this.lines.map(f=>({...f.findByXValue(h,a),units:this.state.label}))}dataBounds(){return this.lines.map(e=>e.yBounds())}get lines(){return this.childrenOfType(zt.TYPE)}get rules(){return this.childrenOfType(Ve.TYPE)}}const Di=d.z.object({start:i.r.z,end:i.r.z});class Rn extends p.Leaf{static TYPE="range-annotation";schema=Di;afterUpdate(e){this.internal.render=p.Context.use(e),this.internal.draw=new Ze(this.internal.render.upper2d,p.use(e))}}const du="ranges",fu={channel:p.ww.SET_CHANNEL_NAME,schema:p.ww.payloadZ,onChange:async({store:n,changed:e,client:t})=>{const r=t.ranges.sugarOne(e),s=n.ranges.get(e.key);let o;s?.labels==null&&(o=await r.retrieveLabels());let a=null;s?.parent==null&&(a=await r.retrieveParent()),n.ranges.set(e.key,l=>t.ranges.sugarOne({...r.payload,labels:l?.labels??o,parent:l?.parent??a}))}},pu={channel:p.ww.DELETE_CHANNEL_NAME,schema:p.ww.keyZ,onChange:({store:n,changed:e})=>n.ranges.delete(e)},gu={equal:(n,e)=>p.N.equal(n.payload,e.payload),listeners:[fu,pu]},mu=d.z.object({region:i.Ho.box,clearOverScan:i.K.crudeZ.optional().default(0),visible:d.z.boolean().optional().default(!0)}),ss=["upper2d","lower2d"];class ze extends p.Composite{static TYPE="Table";static stateZ=mu;schema=ze.stateZ;afterUpdate(e){const{internal:t}=this;t.renderCtx=p.Context.use(e),t.handleError=p.useErrorHandler(e),qt(e,()=>{this.state.visible&&this.requestRender("low")}),!(!this.state.visible&&!this.prevState.visible)&&this.requestRender("high")}afterDelete(){this.requestRender("high")}render(){if(this.deleted)return;const e=i.Ho.copy(this.state.region);if(!this.state.visible)return()=>this.internal.renderCtx.erase(e,this.state.clearOverScan);const{renderCtx:t,handleError:r}=this.internal,s=i.C.XY.translate(i.Ho.topLeft(this.state.region)),o=t.scissor(this.state.region,i.K.construct(this.state.clearOverScan),ss);try{for(const a of this.children)a.render({viewportScale:s})}catch(a){r(a,"Failed to render table")}finally{o()}return()=>this.internal.renderCtx.erase(e,this.state.clearOverScan)}requestRender(e){const{renderCtx:t}=this.internal;t.loop.set({key:`${ze.TYPE}-${this.key}`,render:this.render.bind(this),priority:e,canvases:ss})}}const yu={[ze.TYPE]:ze},Li=d.z.object({authority:i.lr.authorityZ.optional(),valid:d.z.boolean().optional()}).default({authority:void 0,valid:!1}),_i=d.z.object({triggered:d.z.boolean(),status:i.wr.statusZ(Li),sink:Gt.optional().default(Kt),source:Fn.optional().default(Un)});class Mn extends p.Leaf{static TYPE="Chip";schema=_i;afterUpdate(e){const{internal:t}=this,{sink:r,source:s}=this.state;t.source=q(e,s,t.source),t.sink=rt(e,r,t.sink),this.state.triggered&&!this.prevState.triggered&&t.sink.set(this.state.status.details?.authority!==i.lr.ABSOLUTE_AUTHORITY),this.updateEnabledState(),t.stopListening?.(),t.stopListening=t.source.onChange(()=>this.updateEnabledState())}updateEnabledState(){const e=this.internal.source.value();p.N.equal(e,this.state.status)||this.setState(t=>({...t,status:e,triggered:!1}))}afterDelete(){this.internal.stopListening(),this.internal.source.cleanup?.(),this.internal.sink.cleanup?.()}render(){}}const Yi=d.z.object({}),is="control-state-provider",zi=p.iw.stateZ.extend({subjectColor:i.cr.colorZ});class Xe extends p.Composite{static TYPE="StateProvider";schema=Yi;colors=new Map;tracker;disconnectTrackerChange;obs=new $t.Observer;static use(e){return e.get(is)}afterUpdate(e){const{internal:t}=this;t.instrumentation=p.useInstrumentation(e,"control-state");const r=p.use(e);t.palette=r.colors.visualization.palettes.default,t.defaultColor=r.colors.gray.l8;const s=He(e);if(t.client!=null&&s===t.client)return;t.client=s,e.set(is,this),p.useErrorHandler(e)(async()=>{await this.maybeCloseTracker(),t.client!=null&&(this.internal.instrumentation.L.debug("starting state tracker"),await this.openTracker(t.client))},"failed to open control state tracker")}async maybeCloseTracker(){this.tracker!=null&&(this.internal.instrumentation.L.debug("stopping state tracker"),this.disconnectTrackerChange?.(),await this.tracker.close(),this.tracker=void 0)}afterDelete(e){p.useErrorHandler(e)(async()=>{await this.maybeCloseTracker()},"failed to close control state tracker")}onChange(e){return this.obs.onChange(e)}get(e){return Array.isArray(e)?i.c.unique(e).map(t=>this.getOne(t)).filter(t=>t!=null):this.getOne(e)}getOne(e){if(this.tracker==null)return;const t=this.tracker.states.get(e);if(t!=null)return{...t,subjectColor:this.colors.get(t.subject.key)??this.internal.defaultColor}}async openTracker(e){const{internal:t}=this,{instrumentation:r}=t;try{this.tracker=await e.control.openStateTracker()}catch{r.L.error("failed to open state tracker");return}this.disconnectTrackerChange?.(),this.disconnectTrackerChange=this.tracker.onChange(s=>{if(r.L.debug("transfer",{transfers:s.map(o=>p.iw.transferString(o))}),this.tracker==null)throw new p.ht("tracker is null inside it's own onChange callback!");this.updateColors(this.tracker),this.obs.notify(s)})}updateColors(e){const t=e.subjects(),r=t.map(a=>a.key),s=Array.from(this.colors.values());this.colors.forEach((a,l)=>!r.includes(l)&&this.colors.delete(l));const{palette:o}=this.internal;t.forEach(a=>{if(this.colors.has(a.key))return;const l=o.find(u=>!s.includes(u))??o[0];this.colors.set(a.key,l),s.push(l)})}}const Ai=["acquired","released","overridden","failed"],Hi=d.z.enum(Ai),Zi=d.z.object({name:d.z.string(),authority:d.z.number().default(0),acquireTrigger:d.z.number(),status:Hi.optional(),needsControlOf:p.Xm.keyZ.array().optional().default([])});class On extends p.Composite{static TYPE="Controller";schema=Zi;registry=new Map;writer;afterUpdate(e){const{internal:t}=this;t.instrumentation=p.useInstrumentation(e),t.addStatus=p.useAdder(e),t.runAsync=p.useErrorHandler(e),(t.prevTrigger==null||Math.abs(this.state.acquireTrigger-t.prevTrigger)>1)&&(t.prevTrigger=this.state.acquireTrigger);const r=He(e),s=Xe.use(e);t.stateProv=s,t.telemCtx=Ks(e,this,t.telemCtx),t.client=r,t.runAsync(async()=>{t.client==null&&await this.release(),this.state.acquireTrigger>t.prevTrigger?await this.acquire():this.state.acquireTrigger<t.prevTrigger&&await this.release()},"failed to acquire control")}afterDelete(){const{internal:e}=this;e.runAsync(async()=>await this.release(),"failed to release control")}async updateNeedsControlOf(){const{client:e}=this.internal;if(e==null)return;const t=new Set([]);for(const s of this.registry.keys())(await s.needsControlOf(e)).forEach(a=>a!==0&&t.add(a));const r=Array.from(t);i.k.unorderedPrimitiveArrays(this.state.needsControlOf,r)!==i.k.EQUAL&&this.setState(s=>({...s,needsControlOf:r}))}async acquire(){this.internal.prevTrigger=this.state.acquireTrigger;const{client:e,addStatus:t}=this.internal;if(e==null)return t({message:`Cannot acquire control on ${this.state.name} because no cluster has been connected.`,variant:"warning"});try{await this.updateNeedsControlOf();const r=this.state.needsControlOf;if(r.length===0)return t({message:`Cannot acquire control on ${this.state.name} because there are no channels to control.`,variant:"warning"});const s=p.S.now().sub(i.i.milliseconds(1));this.writer=await e.openWriter({start:s,channels:r,controlSubject:{key:this.key,name:this.state.name},authorities:this.state.authority,enableAutoCommit:!0}),this.setState(o=>({...o,status:"acquired"}))}catch(r){if(this.setState(s=>({...s,status:"failed"})),!(r instanceof Error))throw r;t({variant:"error",message:`${this.state.name} failed to acquire control`,description:r.message})}}async release(){this.internal.prevTrigger=this.state.acquireTrigger;try{await this.writer?.close()}catch(e){this.internal.addStatus({message:`${this.state.name} failed to release control: ${e.message}`,variant:"error"})}finally{this.setState(e=>({...e,status:"released"})),this.writer=void 0}}async set(e){this.writer==null&&await this.acquire(),await this.writer?.write(e)}async setAuthority(e,t){this.writer==null&&await this.acquire(),await this.writer?.setAuthority(Object.fromEntries(e.map(r=>[r,t])))}async releaseAuthority(e){this.writer==null&&await this.acquire(),await this.writer?.setAuthority(Object.fromEntries(e.map(t=>[t,this.state.authority])))}deleteTelem(e){this.registry.delete(e),this.updateNeedsControlOf()}create(e){const{internal:t}=this,s=(()=>{switch(e.type){case Ht.TYPE:{const o=new Ht(this,t.runAsync,e.props);return this.registry.set(o,null),o}case It.TYPE:{const o=new It(this,this.internal.stateProv,e.props);return this.registry.set(o,null),o}case Zt.TYPE:return new Zt(this,t.runAsync,e.props);default:return null}})();return s!=null&&this.updateNeedsControlOf(),s}}const Ii=d.z.object({channel:d.z.number()});class Ht extends Xt{static TYPE="controlled-numeric-telem-sink";controller;runAsync;schema=Ii;constructor(e,t,r){super(r),this.controller=e,this.runAsync=t}invalidate(){}cleanup(){this.controller.deleteTelem(this)}async needsControlOf(e){if(this.props.channel===0)return[];const t=await e.channels.retrieve(this.props.channel),r=[t.key];return t.index!==0&&r.push(t.index),r}set(...e){this.runAsync(async()=>{const{client:t}=this.controller.internal;if(t==null)throw new p.Lm("No cluster connected");if(this.props.channel===0)throw new p.L("No command channel specified for actuator");const r=await t.channels.retrieve(this.props.channel),s={[r.key]:e};if(r.index!==0){const o=await t.channels.retrieve(r.index),a=p.S.now();s[o.key]=Array.from({length:e.length},(l,u)=>a.add(i.i.nanoseconds(u)))}await this.controller.set(s)},"Failed to command channel")}}const vu=n=>({type:Ht.TYPE,props:n,variant:"sink",valueType:"number"}),Ni=d.z.object({authority:d.z.number().default(p.iw.ABSOLUTE_AUTHORITY),channel:d.z.number()});class Zt extends Xt{static TYPE="acquire-channel-control";controller;runAsync;schema=Ni;constructor(e,t,r){super(r),this.controller=e,this.runAsync=t}cleanup(){this.controller.deleteTelem(this)}async needsControlOf(e){const t=await e.channels.retrieve(this.props.channel),r=[t.key];return t.index!==0&&r.push(t.index),r}set(e){this.runAsync(async()=>{const{controller:t}=this,{client:r}=t.internal;if(r==null)return;const s=await r.channels.retrieve(this.props.channel),o=[s.key];s.index!==0&&o.push(s.index),e?await this.controller.setAuthority(o,this.props.authority):await this.controller.releaseAuthority(o)},"failed to set channel authority")}}const bu=n=>({type:Zt.TYPE,props:n,variant:"sink",valueType:"boolean"}),Bi=d.z.object({channel:d.z.number()}),wu=d.z.object({valid:d.z.boolean(),color:i.cr.colorZ.optional(),authority:d.z.number()});class It extends B{static TYPE="controlled-status-source";prov;valid=!1;stopListening;controller;schema=Bi;constructor(e,t,r){super(r),this.prov=t,this.controller=e}async needsControlOf(){return[]}maybeRevalidate(){if(this.valid)return;const{channel:e}=this.props;this.stopListening?.();const t=i.lr.filterTransfersByChannelKey(e);this.stopListening=this.prov.onChange(r=>{t(r).length!==0&&this.notify?.()}),this.valid=!0}value(){this.maybeRevalidate();const e=p.S.now();if(this.props.channel===0)return{key:this.controller.key,variant:"disabled",message:"No Channel",time:e,details:{valid:!1,authority:0}};const t=this.prov.get(this.props.channel);return t==null?{key:this.controller.key,variant:"disabled",message:"Uncontrolled",time:e,details:{valid:!0,color:void 0,authority:0}}:{key:t.subject.key,variant:t.subject.key===this.controller.key?"success":"error",message:`Controlled by ${t.subject.name}`,time:e,details:{valid:!0,color:t.subjectColor,authority:t.authority}}}cleanup(){this.controller.deleteTelem(this),this.stopListening?.()}}const Su=n=>({type:It.TYPE,props:n,variant:"source",valueType:"status"}),Ui=d.z.object({color:i.cr.colorZ.optional()}).default({color:void 0}),$i=d.z.object({statusSource:Fn.optional().default(Un),colorSource:qn.optional().default(Wt),status:i.wr.statusZ(Ui),color:i.cr.colorZ.optional()});class Dn extends p.Leaf{static TYPE="Indicator";schema=$i;stopListeningStatus;stopListeningColor;afterUpdate(e){const{internal:t}=this,{statusSource:r,colorSource:s}=this.state;t.statusSource=q(e,r,t.statusSource),t.colorSource=q(e,s,t.colorSource),this.updateState(),this.stopListeningStatus?.(),this.stopListeningColor?.(),this.stopListeningStatus=t.statusSource.onChange(this.updateState.bind(this)),this.stopListeningColor=t.colorSource.onChange(this.updateState.bind(this))}afterDelete(){this.internal.statusSource.cleanup?.(),this.internal.colorSource.cleanup?.()}render(){}updateState(){const e=this.internal.colorSource.value(),t=this.internal.statusSource.value();i.cr.equals(e,this.state.color)&&t.message===this.state.status.message||this.setState(r=>({...r,color:e,status:t}))}}const qi=d.z.object({needsControlOf:p.Xm.keyZ.array(),states:zi.array()});class Ln extends p.Leaf{static TYPE="Legend";schema=qi;afterUpdate(e){const{internal:t}=this;t.stateProv=Xe.use(e);const r=this.state.needsControlOf;t.disconnectStateProv?.();const s=i.lr.filterTransfersByChannelKey(...r),o=t.stateProv.get(r);this.setState(a=>({...a,states:o})),t.disconnectStateProv=t.stateProv.onChange(a=>{if(s(a).length===0)return;const l=t.stateProv.get(r);this.setState(u=>({...u,states:l}))})}afterDelete(){const{internal:e}=this;e.disconnectStateProv?.()}render(){}}const xu={[On.TYPE]:On,[Xe.TYPE]:Xe,[Dn.TYPE]:Dn,[Mn.TYPE]:Mn,[Ln.TYPE]:Ln},Fi=["fire","momentary","pulse"],Tu=d.z.enum(Fi),Ki=d.z.object({trigger:d.z.number(),sink:Gt.optional().default(Kt),mode:Tu.optional().default("fire")}),Wi=2,ji=1;class _n extends p.Leaf{static TYPE="Button";schema=Ki;afterUpdate(e){const{sink:t,mode:r,trigger:s}=this.state,{internal:o}=this;o.prevTrigger??=s,o.sink=rt(e,t,o.sink);const a=o.prevTrigger;o.prevTrigger=s;const l=s===a+Wi;s===a+ji?r=="fire"?this.internal.sink.set(!0):r=="momentary"&&this.internal.sink.set(!1):l&&(r=="momentary"?this.internal.sink.set(!0):r=="pulse"&&this.internal.sink.set(!0,!1))}afterDelete(){this.internal.sink.cleanup?.()}}const Eu={[_n.TYPE]:_n},wr=d.z.object({dpr:d.z.number(),region:i.Ho.box,bootstrap:d.z.boolean().optional().default(!1),bootstrapped:d.z.boolean().optional().default(!1),glCanvas:d.z.any().optional(),upper2dCanvas:d.z.any().optional(),lower2dCanvas:d.z.any().optional(),os:i.S.osZ});class Nt extends p.Composite{static TYPE="Canvas";schema=wr;renderCtx=null;afterUpdate(e){if(this.renderCtx==null){if(!this.state.bootstrap)return;const{glCanvas:t,lower2dCanvas:r,upper2dCanvas:s,os:o}=this.state;if(t==null||r==null||s==null)throw new p.ht("[vis.worker.Canvas] - expected render context bootstrap to include all canvases");this.renderCtx=p.Context.create(e,t,r,s,o),xe.create(e,this.renderCtx),this.setState(a=>({...a,bootstrap:!1,bootstrapped:!0,glCanvas:void 0,lower2dCanvas:void 0,upper2dCanvas:void 0}))}else this.renderCtx.update(e);this.renderCtx.resize(this.state.region,this.state.dpr)}}const Gi={[Nt.TYPE]:Nt},Cu=Object.freeze(Object.defineProperty({__proto__:null,Canvas:Nt,REGISTRY:Gi,canvasStateZ:wr},Symbol.toStringTag,{value:"Module"})),Sr=d.z.object({position:i.K.xy,zoom:d.z.number(),region:i.Ho.box,clearOverScan:i.K.crudeZ.optional().default(10),visible:d.z.boolean().optional().default(!0)}),dt=["upper2d","lower2d"];class ce extends p.Composite{static TYPE="Diagram";static stateZ=Sr;schema=ce.stateZ;afterUpdate(e){this.internal.renderCtx=p.Context.use(e),this.internal.handleError=p.useErrorHandler(e),qt(e,()=>{this.state.visible&&this.requestRender("low")}),!(!this.state.visible&&!this.prevState.visible)&&(this.internal.viewportScale=i.C.XY.magnify(i.K.construct(this.state.zoom)).translate(i.Ho.topLeft(this.state.region)).translate(this.state.position),this.requestRender("high"))}afterDelete(){this.requestRender("high")}render(){if(this.deleted)return;const{renderCtx:e,handleError:t,viewportScale:r}=this.internal,s=i.Ho.construct(this.state.region);if(!this.state.visible)return()=>e.erase(s,this.state.clearOverScan,...dt);const o=e.scissor(s,i.K.ZERO,dt);try{this.children.forEach(l=>l.render?.({viewportScale:r}))}catch(l){t(l,"failed to render diagram")}finally{o()}const a=i.Ho.copy(this.state.region);return()=>{e.lower2d.fillStyle=i.cr.hex(i.cr.BLACK),e.lower2d.fillRect(...i.K.couple(i.Ho.topLeft(a)),i.Ho.width(a),i.Ho.height(a)),e.erase(a,this.state.clearOverScan,...dt)}}requestRender(e){const{renderCtx:t}=this.internal;t.loop.set({key:`${ce.TYPE}-${this.key}`,render:this.render.bind(this),priority:e,canvases:dt})}}const Vi={[ce.TYPE]:ce},Pu=Object.freeze(Object.defineProperty({__proto__:null,Diagram:ce,REGISTRY:Vi,diagramStateZ:Sr},Symbol.toStringTag,{value:"Module"})),Xi=d.z.object({enabled:d.z.boolean(),source:$n.optional().default(Bn)});class Yn extends p.Leaf{static TYPE="Light";schema=Xi;afterUpdate(e){const{internal:t}=this;this.internal.source=q(e,this.state.source,t.source),this.updateEnabledState(),t.stopListening?.(),t.stopListening=t.source.onChange(()=>this.updateEnabledState())}updateEnabledState(){const e=this.internal.source.value();e!==this.state.enabled&&this.setState(t=>({...t,enabled:e}))}afterDelete(){this.internal.stopListening(),this.internal.source.cleanup?.()}}const ku={[Yn.TYPE]:Yn},Ru=i.K.construct(12),Mu=3,Ou=14,Du=i.K.construct(6),xr=d.z.object({position:i.K.xy.or(d.z.null()),textColor:i.cr.colorZ.optional().default(i.cr.ZERO),backgroundColor:i.cr.colorZ.optional().default(i.cr.ZERO),borderColor:i.cr.colorZ.optional().default(i.cr.ZERO),ruleColor:i.cr.colorZ.optional().default(i.cr.ZERO),ruleStrokeWidth:d.z.number().optional().default(1),ruleStrokeDash:d.z.number().default(0)});class Qe extends p.Leaf{static TYPE="tooltip";schema=xr;afterUpdate(e){const t=p.use(e);i.cr.isZero(this.state.textColor)&&(this.state.textColor=t.colors.text),i.cr.isZero(this.state.backgroundColor)&&(this.state.backgroundColor=t.colors.gray.l1),i.cr.isZero(this.state.borderColor)&&(this.state.borderColor=t.colors.border),i.cr.isZero(this.state.ruleColor)&&(this.state.ruleColor=t.colors.gray.l7),this.internal.dotColor=t.colors.text,this.internal.dotColorContrast=t.colors.textInverted,this.internal.render=p.Context.use(e),this.internal.draw=new Ze(this.internal.render.upper2d,t),X(e,"tool")}afterDelete(e){X(e,"tool")}render(e){if(this.deleted||this.state.position==null)return;const{region:t}=e,r=i.C.XY.scale(i.Ho.DECIMAL).scale(t),s=i.C.XY.scale(t).scale(i.Ho.DECIMAL),o=e.findByXDecimal(s.x.pos(this.state.position.x)),a=o.filter(b=>i.K.isFinite(b.value)),{draw:l}=this.internal,u=a.reduce((b,w)=>b+w.position.x,0)/a.length,c=new i.r(a.reduce((b,w)=>b+w.value.x,0)/a.length),h=r.x.pos(u);if(!i.H.contains(i.Ho.xBounds(t),h))return;l.rule({stroke:this.state.ruleColor,lineWidth:this.state.ruleStrokeWidth,lineDash:this.state.ruleStrokeDash,direction:"y",region:t,position:h}),a.forEach(b=>{const w=r.pos(b.position);l.circle({fill:i.cr.setAlpha(b.color,.5),radius:8,position:w}),l.circle({fill:i.cr.setAlpha(b.color,.8),radius:5,position:w}),l.circle({fill:i.cr.pickByContrast(b.color,this.internal.dotColor,this.internal.dotColorContrast),radius:2,position:w})});const f=s.pos(this.state.position),g={...i.K$1.TOP_LEFT};f.x>.6&&(g.x="right"),f.y>.6&&(g.y="bottom");let y=o.reduce((b,w)=>Math.max(b,w.label?.length??0),0);const S=c.fString("preciseDate","local").length;S>y&&(y=S),l.list({root:g,offset:Ru,length:a.length+1,padding:Du,itemHeight:Ou,spacing:Mu,width:y*7+48,position:this.state.position,draw:(b,w)=>{let C="",M="",P=this.state.textColor;if(b===0)C="Time",M=c.fString("preciseDate","local");else{const D=a[b-1];C=D.label??"",M=i.or.roundBySpan(D.value.y,D.bounds).toString(),P=D.color}l.text({position:i.Ho.topLeft(w),text:C,level:"small",weight:500,color:P}),l.text({position:i.K.translateY(i.Ho.topRight(w),-1),text:M,level:"small",justify:"right",code:!0,shade:10})}})}}const Qi={[Qe.TYPE]:Qe},Lu=Object.freeze(Object.defineProperty({__proto__:null,REGISTRY:Qi,Tooltip:Qe,tooltipStateZ:xr},Symbol.toStringTag,{value:"Module"})),Ji=d.z.object({region:i.Ho.box,wheelPos:d.z.number(),scrolling:d.z.boolean(),empty:d.z.boolean(),visible:d.z.boolean(),telem:pt.optional().default(us),font:p.levelZ.optional().default("p"),color:i.cr.colorZ.optional().default(i.cr.ZERO),overshoot:i.K.xy.optional().default({x:0,y:0})}),_u=.98,$e="lower2d",Yu={offset:0n,offsetRef:0n,scrollRef:0};class Je extends p.Leaf{static TYPE="log";static z=Ji;schema=Je.z;values=new i.Wt([]);scrollState=Yu;afterUpdate(e){const{internal:t}=this;t.render=p.Context.use(e),t.theme=p.use(e),i.cr.isZero(this.state.color)?this.internal.textColor=t.theme.colors.gray.l11:t.textColor=this.state.color,t.telem=q(e,this.state.telem,t.telem);const{scrolling:r,wheelPos:s}=this.state;if(this.state.scrolling&&!this.prevState.scrolling){const u=this.values.alignmentBounds.upper-1n;this.scrollState={offset:u,offsetRef:u,scrollRef:this.state.wheelPos}}else if(r){const{scrollState:u,values:c}=this,h=Math.ceil((s-this.scrollState.scrollRef)/this.lineHeight);u.offset=this.values.traverseAlignment(u.offsetRef,-BigInt(h)),u.offset<c.alignmentBounds.lower+BigInt(this.visibleLineCount)&&(u.offset=c.alignmentBounds.lower,this.setState(f=>({...f,wheelPos:this.prevState.wheelPos}))),u.offset>=c.alignmentBounds.upper&&this.setState(f=>({...f,scrolling:!1}))}const[a,l]=this.internal.telem.value();this.values=l,this.checkEmpty(),t.stopListeningTelem?.(),t.stopListeningTelem=t.telem.onChange(()=>{const[u,c]=this.internal.telem.value();this.checkEmpty(),this.values=c,this.requestRender()}),!(!this.state.visible&&!this.prevState.visible)&&this.requestRender()}checkEmpty(){const e=this.values.length===0;e!==this.state.empty&&this.setState(t=>({...t,empty:e}))}afterDelete(){const{telem:e,render:t}=this.internal;e.cleanup?.(),t.erase(i.Ho.construct(this.state.region),i.K.ZERO,$e)}requestRender(){const{render:e}=this.internal;e.loop.set({key:`${this.type}-${this.key}`,render:()=>this.render(),priority:"high",canvases:[$e]})}get lineHeight(){return this.internal.theme.typography[this.state.font].size*this.internal.theme.sizes.base}get totalHeight(){return Math.ceil(this.values.length*this.lineHeight)}get visibleLineCount(){return Math.min(Math.floor((i.Ho.height(this.state.region)-12)/this.lineHeight),this.values.length)}render(){const{render:e}=this.internal,t=this.state.region;if(i.Ho.areaIsZero(t))return;if(!this.state.visible)return()=>e.erase(t,i.K.ZERO,$e);let r;if(!this.state.scrolling)r=this.values.subIterator(this.values.length-this.visibleLineCount,this.values.length);else{const c=this.values.traverseAlignment(this.scrollState.offset,-BigInt(this.visibleLineCount));r=this.values.subAlignmentSpanIterator(c,this.visibleLineCount)}const s=this.state.region,o=e[$e],a=new Ze(o,this.internal.theme),l=e.scissor(s,i.K.ZERO,[$e]);this.renderElements(a,r),this.renderScrollbar(a),l();const u=i.Ho.copy(this.state.region);return({canvases:c})=>e.erase(u,this.state.overshoot,...c)}renderScrollbar(e){const t=this.state.region,r=i.Ho.height(t)/this.totalHeight*i.Ho.height(t);if(r>=i.Ho.height(t)*_u)return;let s=i.Ho.bottom(t)-r;this.state.scrolling&&(s-=Number(this.values.distance(this.values.alignmentBounds.upper,this.scrollState.offset))/this.values.length*i.Ho.height(t)),s<0&&(s=i.Ho.top(t)),e.container({region:i.Ho.construct({x:i.Ho.right(t)-6,y:s},{width:6,height:r}),bordered:!1,backgroundColor:o=>o.colors.gray.l6})}renderElements(e,t){const r=this.state.region;let s=0;for(const o of t){const a=this.values.dataType.equals(i.n.JSON)?JSON.stringify(o):o.toString();e.text({text:a,level:this.state.font,shade:11,position:i.K.translate(i.Ho.topLeft(r),{x:6,y:s*this.lineHeight+6}),code:!0}),s++}}}const zu={[Je.TYPE]:Je},Tr=d.z.object({one:i.K.xy.nullable(),two:i.K.xy.nullable(),hover:i.K.xy.nullable(),color:d.z.union([i.cr.colorZ,d.z.object({verticalLine:i.cr.colorZ.optional().default(i.cr.ZERO),horizontalLine:i.cr.colorZ.optional().default(i.cr.ZERO),obliqueLine:i.cr.colorZ.optional().default(i.cr.ZERO)})]).optional().default(i.cr.ZERO),strokeWidth:d.z.number().optional().default(1),strokeDash:d.z.number().optional().default(2)});class et extends p.Leaf{static TYPE="measure";schema=Tr;afterUpdate(e){const t=p.Context.use(e);this.internal.theme=p.use(e),this.internal.renderCtx=t,this.internal.draw=new Ze(t.upper2d,this.internal.theme),X(e,"tool")}afterDelete(e){X(e,"layout")}get verticalLineColor(){return i.cr.isColor(this.state.color)?i.cr.isZero(this.state.color)?this.internal.theme.colors.gray.l8:this.state.color:i.cr.isZero(this.state.color.verticalLine)?this.internal.theme.colors.gray.l8:this.state.color.verticalLine}get horizontalLineColor(){return i.cr.isColor(this.state.color)?i.cr.isZero(this.state.color)?this.internal.theme.colors.gray.l8:this.state.color:i.cr.isZero(this.state.color.horizontalLine)?this.internal.theme.colors.gray.l8:this.state.color.horizontalLine}get obliqueLineColor(){return i.cr.isColor(this.state.color)?i.cr.isZero(this.state.color)?this.internal.theme.colors.gray.l8:this.state.color:i.cr.isZero(this.state.color.obliqueLine)?this.internal.theme.colors.gray.l8:this.state.color.obliqueLine}find(e){const{one:t,two:r}=this.state;if(t==null||r==null)return null;const{one:s,two:o}=this.prevState,{dataOne:a,dataTwo:l}=this.internal;if(s!=null&&i.K.equals(t,s)&&o!=null&&i.K.equals(r,o)&&a!=null&&l!=null){const[b,w]=[e.findByXValue(a.x),e.findByXValue(l.x)];return b.length===0||w.length===0?null:[b.sort((C,M)=>i.K.distance(a,C.value)-i.K.distance(a,M.value))[0],w.sort((C,M)=>i.K.distance(l,C.value)-i.K.distance(l,M.value))[0]]}const u=i.C.XY.scale(e.region).scale(i.Ho.DECIMAL),[c,h]=[u.pos(t),u.pos(r)],[f,g]=[e.findByXDecimal(c.x),e.findByXDecimal(h.x)];if(f.length===0||g.length===0)return null;const[y,S]=[f.sort((b,w)=>i.K.distance(c,b.position)-i.K.distance(c,w.position))[0],g.sort((b,w)=>i.K.distance(h,b.position)-i.K.distance(h,w.position))[0]];return this.internal.dataOne=y.value,this.internal.dataTwo=S.value,[y,S]}renderHover(e){if(this.state.hover==null)return;const t=this.state.hover,r=i.C.XY.scale(e.region).scale(i.Ho.DECIMAL),s=r.pos(t),o=e.findByXDecimal(r.pos(t).x);if(o.length===0)return;const a=o.sort((u,c)=>i.K.distance(s,u.position)-i.K.distance(s,c.position))[0],{draw:l}=this.internal;l.circle({fill:i.cr.setAlpha(a.color,.5),radius:9,position:r.reverse().pos(a.position)})}render(e){if(this.deleted)return;this.renderHover(e);const t=this.find(e);if(t==null)return;const[r,s]=t,{draw:o}=this.internal,{strokeDash:a,strokeWidth:l}=this.state,u=i.C.XY.scale(i.Ho.DECIMAL).scale(e.region),c=u.pos(r.position),h=u.pos(s.position),f=new i.i(Math.abs(r.value.x-s.value.x)),g=Math.abs(r.value.y-s.value.y),y=g/f.seconds;o.line({start:i.K.construct(c.x,c.y),end:i.K.construct(c.x,h.y),stroke:this.verticalLineColor,lineDash:a,lineWidth:l}),o.textContainer({text:[`${g.toFixed(2)} ${r.units??""}`],direction:"x",position:i.K.construct(c.x,(c.y+h.y)/2),level:"small"}),o.line({start:i.K.construct(c.x,h.y),end:i.K.construct(h.x,h.y),stroke:this.horizontalLineColor,lineDash:a,lineWidth:l}),o.textContainer({text:[f.truncate(i.i.MILLISECOND).toString()],direction:"x",position:i.K.construct((c.x+h.x)/2,h.y),level:"small"}),o.line({start:i.K.construct(c.x,c.y),end:i.K.construct(h.x,h.y),stroke:this.obliqueLineColor,lineDash:a,lineWidth:l}),o.textContainer({text:[`${y.toFixed(2)} ${r.units??""} / S`],direction:"x",position:i.K.construct((c.x+h.x)/2,(c.y+h.y)/2),level:"small"}),o.circle({fill:i.cr.setAlpha(r.color,.5),radius:8,position:c}),o.circle({fill:i.cr.setAlpha(r.color,.8),radius:5,position:c}),o.circle({fill:i.cr.WHITE,radius:2,position:c}),o.circle({fill:i.cr.setAlpha(s.color,.5),radius:8,position:h}),o.circle({fill:i.cr.setAlpha(s.color,.8),radius:5,position:h}),o.circle({fill:i.cr.WHITE,radius:2,position:h})}}const eo={[et.TYPE]:et},Au=Object.freeze(Object.defineProperty({__proto__:null,Measure:et,REGISTRY:eo,measureStateZ:Tr},Symbol.toStringTag,{value:"Module"})),to=d.z.object({trigger:d.z.number(),command:d.z.number().optional(),value:d.z.number(),sink:gs.optional().default(as),source:ps.optional().default(ls)});class zn extends p.Leaf{static TYPE="Setpoint";schema=to;afterUpdate(e){const{sink:t,source:r,trigger:s,command:o}=this.state,{internal:a}=this;a.prevTrigger??=s,(async()=>{this.internal.source=q(e,r,this.internal.source),a.sink=rt(e,t,a.sink);const l=a.prevTrigger;a.prevTrigger=s,s>l&&o!=null&&this.internal.sink.set(o),this.updateValue(),a.stopListening?.(),a.stopListening=a.source.onChange(()=>this.updateValue())})()}updateValue(){const e=this.internal.source.value();e!==this.state.value&&this.setState(t=>({...t,value:e,triggered:!1}))}afterDelete(){const{internal:e}=this;e.stopListening(),e.source.cleanup?.(),e.sink.cleanup?.()}}const Hu={[zn.TYPE]:zn},no=d.z.object({triggered:d.z.boolean(),enabled:d.z.boolean(),sink:Gt.optional().default(Kt),source:$n.optional().default(Bn)});class An extends p.Leaf{static TYPE="Toggle";schema=no;afterUpdate(e){this.internal.addStatus=p.useOptionalAdder(e);const{sink:t,source:r,triggered:s,enabled:o}=this.state,{triggered:a}=this.prevState,{internal:l}=this;l.source=q(e,r,l.source),l.sink=rt(e,t,l.sink),s&&!a&&l.sink.set(!o),this.updateEnabledState(),l.stopListening?.(),l.stopListening=l.source.onChange(()=>this.updateEnabledState())}updateEnabledState(){const e=this.internal.source.value();e!==this.state.enabled&&this.setState(t=>({...t,enabled:e,triggered:!1}))}afterDelete(){this.internal.stopListening(),this.internal.source.cleanup?.(),this.internal.sink.cleanup?.()}}const Zu={[An.TYPE]:An},un={useAtlas:!0},Iu=d.z.object({box:i.Ho.box,telem:Kn.optional().default(cs),backgroundTelem:qn.optional().default(Wt),level:p.levelZ.optional().default("p"),color:i.cr.colorZ.optional().default(i.cr.ZERO),precision:d.z.number().optional().default(2),minWidth:d.z.number().optional().default(60),width:d.z.number().optional(),notation:i.br.notationZ.optional().default("standard"),location:i.K$1.xy.optional().default({x:"left",y:"center"}),useWidthForBackground:d.z.boolean().optional().default(!1),valueBackgroundShift:i.K.xy.optional().default(i.K.ZERO),valueBackgroundOverScan:i.K.xy.optional().default(i.K.ZERO)}),Nu=["upper2d","lower2d"];class Ae extends p.Leaf{static TYPE="value";static z=Iu;schema=Ae.z;afterUpdate(e){const{internal:t}=this;t.renderCtx=p.Context.use(e),t.theme=p.use(e),i.cr.isZero(this.state.color)?t.textColor=t.theme.colors.gray.l10:t.textColor=this.state.color,t.telem=q(e,this.state.telem,t.telem),t.stopListening?.(),t.stopListening=t.telem.onChange(()=>this.requestRender()),t.fontString=qe.fontString(t.theme,{level:this.state.level,code:!0}),t.backgroundTelem=q(e,this.state.backgroundTelem,t.backgroundTelem),t.stopListeningBackground?.(),t.stopListeningBackground=t.backgroundTelem.onChange(()=>this.requestRender()),t.requestRender=os(e),this.requestRender()}afterDelete(){const{internal:e}=this;e.stopListening?.(),e.stopListeningBackground?.(),e.telem.cleanup?.(),e.backgroundTelem.cleanup?.(),e.requestRender==null?e.renderCtx.erase(i.Ho.construct(this.state.box),i.K.ZERO,...Nu):e.requestRender("layout")}requestRender(){const{requestRender:e}=this.internal;e!=null?e("layout"):this.render({})}get fontHeight(){const{theme:e}=this.internal;return e.typography[this.state.level].size*e.sizes.base}maybeUpdateWidth(e){const{theme:t}=this.internal,r=e+t.sizes.base+this.fontHeight;this.state.width==null||this.state.width+this.fontHeight*.5<r||this.state.minWidth>r&&this.state.width!==this.state.minWidth?this.setState(s=>({...s,width:Math.max(r,s.minWidth)})):this.state.width-this.fontHeight>r&&this.setState(s=>({...s,width:Math.max(r,s.minWidth)}))}render({viewportScale:e=i.C.XY.IDENTITY}){const{renderCtx:t,telem:r,backgroundTelem:s,fontString:o,requestRender:a}=this.internal,{location:l,box:u}=this.state;if(i.Ho.areaIsZero(u))return;const c=i.Ho.topLeft(u),h=i.Ho.width(u),f=i.Ho.height(u),g=t.lower2d.applyScale(e);let y=r.value();g.font=o;const S=this.fontHeight,b=y[0]=="-";b&&(y=y.slice(1));const{theme:w}=this.internal,C=g.textDimensions(y,un),M=C.width+w.sizes.base,P=C.height;a==null&&t.erase(i.Ho.construct(this.prevState.box)),this.maybeUpdateWidth(M);const D={...i.K.ZERO};l.x==="left"?D.x=6+S*.75:l.x==="center"&&(D.x=h/2-M/2),l.y==="center"&&(D.y=f/2+P/2);const _=i.K.translate(c,D);let x=!0;if(this.state.backgroundTelem.type!=Wt.type){const L=s.value();if(!i.cr.isZero(L)){x=!1,g.fillStyle=i.cr.hex(L);const Ie=this.state.useWidthForBackground?this.state.width??this.state.minWidth:i.Ho.width(u);g.fillRect(...i.K.couple(i.K.translate(c,this.state.valueBackgroundShift)),Ie+this.state.valueBackgroundOverScan.x,f+this.state.valueBackgroundOverScan.y);const pe=i.cr.pickByContrast(L,w.colors.gray.l0,w.colors.gray.l11);g.fillStyle=i.cr.hex(pe)}}x&&(g.fillStyle=i.cr.hex(this.internal.textColor)),b&&g.fillText("-",...i.K.couple(i.K.translateX(_,-S*.6)),void 0,un),g.fillText(y,...i.K.couple(_),void 0,un)}}const ro={[Ae.TYPE]:Ae},Bu=Object.freeze(Object.defineProperty({__proto__:null,REGISTRY:ro,Value:Ae},Symbol.toStringTag,{value:"Module"}));class so{entries=new Map;setListeners=new Map;deleteListeners=new Map;handleError;equal;constructor(e,t=()=>!1){this.handleError=e,this.equal=t}set(e,t,r){if(Array.isArray(t))return t.forEach(a=>this.set(e,a.key,a));const s=this.entries.get(t),o=p.executeSetter(r,s);o==null||s!=null&&this.equal(o,s,t)||(this.entries.set(t,o),this.notifySet(e,t,o))}get(e){return typeof e=="function"?Array.from(this.entries.values()).filter(e):Array.isArray(e)?e.map(t=>this.entries.get(t)).filter(t=>t!=null):this.entries.get(e)}has(e){return this.entries.has(e)}delete(e,t){p.t.toArray(t).forEach(r=>{this.entries.delete(r),this.notifyDelete(e,r)})}clear(){this.entries.clear()}onSet(e,t,r){return this.setListeners.set(t,{scope:e,key:r}),()=>{this.setListeners.delete(t)}}onDelete(e,t,r){return this.deleteListeners.set(t,{scope:e,key:r}),()=>this.deleteListeners.delete(t)}notifySet(e,t,r){this.setListeners.forEach((s,o)=>{const a=s.key==null||s.key===t,l=s.scope!==e;a&&l&&this.handleError(async()=>o(r),"Failed to notify set listener")})}notifyDelete(e,t){this.deleteListeners.forEach((r,s)=>{const o=r.key==null||r.key===t,a=r.scope!==e;o&&a&&this.handleError(async()=>s(t),"Failed to notify delete listener")})}scope(e){return{set:(t,r)=>this.set(e,t,r),get:t=>this.get(t),has:t=>this.has(t),delete:t=>this.delete(e,t),onSet:(t,r)=>this.onSet(e,t,r),onDelete:(t,r)=>this.onDelete(e,t,r)}}}const io=(n,e)=>Object.fromEntries(Object.entries(n).map(([t,{equal:r}])=>[t,new so(e,r)])),Hn=(n,e)=>Object.fromEntries(Object.entries(n).map(([t])=>[t,n[t].scope(e)])),Uu=(n,e)=>{const t=n.includes("delete"),r=e.includes("delete");return t&&!r?-1:!t&&r?1:0},$u=async({openStreamer:n,storeConfig:e,handleError:t,client:r,store:s})=>{const o=Object.values(e),a=i.c.unique(o.flatMap(({listeners:f})=>f.map(({channel:g})=>g))),l={};o.forEach(({listeners:f})=>f.forEach(g=>{const{channel:y}=g;l[y]=[...l[y]||[],g]}));const u=await p.sw.HardenedStreamer.open(n,a),c=new p.sw.ObservableStreamer(u),h=f=>{const g=[...f.uniqueNames];g.sort(Uu),t(async()=>{for(const y of g){const S=f.get(y),b=l[y];if(b!=null)for(const{onChange:w,schema:C}of b)await t(async()=>{let M;S.dataType.equals(i.n.JSON)?M=S.parseJSON(C):M=Array.from(S).map(P=>C.parse(P));for(const P of M)await t(()=>w({changed:P,client:r,store:s}),`Failed to handle streamer change for ${y}`,p._t)},`Failed to parse streamer change for ${y}`)}},`Failed to handle streamer change for ${i.vr.naturalLanguageJoin(g)}`)};return c.onChange(h),c.close.bind(c)};class oo{store;streamCloser=null;client;constructor({client:e,openStreamer:t,storeConfig:r,handleError:s,handleAsyncError:o}){this.store=io(r,s),this.client=e,e!=null&&(t??=e?.openStreamer.bind(e),this.streamCloser=$u({client:e,storeConfig:r,handleError:o,store:Hn(this.store,""),openStreamer:t}))}async awaitInitialized(){this.streamCloser!=null&&await this.streamCloser}scopedStore(e){return Hn(this.store,e)}async close(){if(this.streamCloser==null)return;await(await this.streamCloser)()}}const ao=d.object({}),Zn="flux-context",Er="flux.Provider",qu=(n,e)=>n.get(Zn).scopedStore(e),Fu=n=>{const e=(t,r)=>{if("client"in n)return n.client;const s=He(t);return r!=null&&r?.client?.key===s?.key?r:new oo({client:s,storeConfig:n.storeConfig,handleError:p.useErrorHandler(t),handleAsyncError:p.useAsyncErrorHandler(t)})};return class lo extends p.Composite{static TYPE=Er;static stateZ=ao;schema=lo.stateZ;afterUpdate(r){const{internal:s}=this;s.store=e(r,s.store),r.wasSetPreviously(Zn)||r.set(Zn,s.store)}}},Ku=n=>({[Er]:Fu(n)}),Wu=p.ww.payloadZ.extend({viewport:i.H.bounds}),co=d.z.object({cursor:i.K.xy.or(d.z.null()),hovered:Wu.or(d.z.null()),count:d.z.number()});class Bt extends p.Leaf{static TYPE="range-provider";schema=co;fetchedInitial=i.w.ZERO;afterUpdate(e){const{internal:t}=this;t.render=p.Context.use(e),t.draw=new Ze(t.render.upper2d,p.use(e)),t.requestRender=Ft(e),t.runAsync=p.useErrorHandler(e),t.ranges??=new Map;const r=He(e);if(t.requestRender("tool"),r==null)return;t.client=r;const s=qu(e,this.key);t.removeListener?.();const o=s.ranges.onSet(l=>{t.client!=null&&(i.cr.isCrude(l.color)&&t.ranges.set(l.key,t.client.ranges.sugarOne(l)),this.setState(u=>({...u,count:t.ranges.size})),t.requestRender("tool"))}),a=s.ranges.onDelete(async l=>{t.ranges.delete(l),this.setState(u=>({...u,count:t.ranges.size})),t.requestRender("tool")});t.removeListener=()=>{o(),a()}}fetchInitial(e){const{internal:t}=this,{client:r,runAsync:s}=t;r==null||this.fetchedInitial.equals(e,i.i.minutes(1))||(this.fetchedInitial=e,s(async()=>{(await r.ranges.retrieve(e)).forEach(a=>{i.cr.isCrude(a.color)&&t.ranges.set(a.key,a)}),this.setState(a=>({...a,count:t.ranges.size}))},"failed to fetch initial ranges"))}render(e){const{dataToDecimalScale:t,region:r,viewport:s,timeRange:o}=e;this.fetchInitial(o);const{draw:a,ranges:l}=this.internal,u=t.scale(i.Ho.xBounds(r)),c=this.state.cursor==null?null:this.state.cursor.x;let h=null;const f=a.canvas.scissor(i.Ho.construct({x:i.Ho.left(r),y:i.Ho.top(r)-35},{x:i.Ho.right(r),y:i.Ho.bottom(r)}));l.forEach(g=>{const y=i.cr.colorZ.safeParse(g.color);if(!y.success)return;const S=y.data;let b=u.pos(Number(g.timeRange.start.valueOf()));const w=u.pos(Number(g.timeRange.end.valueOf()));if(w<i.Ho.left(r)||b>i.Ho.right(r))return;b=i.R(b,i.Ho.left(r)-2,i.Ho.right(r)-1);let C=!1;c!=null&&(C=i.H.contains({lower:b,upper:w},c)),C&&(h={key:g.key,parent:g.parent,name:g.name,color:g.color,labels:g.labels,timeRange:g.timeRange,viewport:{lower:t.scale(i.Ho.xBounds(s)).pos(Number(g.timeRange.start.valueOf())),upper:t.scale(i.Ho.xBounds(s)).pos(Number(g.timeRange.end.valueOf()))}}),a.container({region:i.Ho.construct({x:b,y:i.Ho.top(r)-1},{x:w,y:i.Ho.bottom(r)-1}),backgroundColor:i.cr.setAlpha(S,.2),bordered:!1});const M=i.Ho.construct({x:b+1,y:i.Ho.top(r)-34},{x:w-1,y:i.Ho.top(r)-12});a.container({region:M,backgroundColor:i.Ho.width(M)<20?i.cr.setAlpha(S,.4):P=>C?P.colors.gray.l2:P.colors.gray.l0,bordered:!0,borderWidth:1,borderRadius:2,borderColor:i.cr.setAlpha(S,.8)}),a.text({text:g.name,position:{x:b+8,y:i.Ho.top(r)-30},level:"small",shade:10,weight:500,maxWidth:w-b-16})}),f(),h!=null?this.setState(g=>({...g,hovered:h})):this.state.hovered&&this.setState(g=>({...g,hovered:null}))}}const ju={[Rn.TYPE]:Rn,[Bt.TYPE]:Bt},Gu=at;class Ut extends ki{static TYPE="XAxis";schema=at;render(e){if(this.deleted)return;const[t,r]=this.dataToDecimalScale(e.hold,this.dataBounds.bind(this),e.viewport);if(this.renderAxis(e,t.reverse()),this.renderYAxes(e,t),this.renderRangeAnnotations(e,t),r!=null)throw r}findByXDecimal(e,t){const[r,s]=this.dataToDecimalScale(e.hold,this.dataBounds.bind(this),e.viewport);if(s!=null)throw s;return this.findByXValue(e,r.reverse().pos(t))}findByXValue(e,t){const[r,s]=this.dataToDecimalScale(e.hold,this.dataBounds.bind(this),e.viewport);if(s!=null)throw s;const o={...e,xDataToDecimalScale:r};return this.yAxes.map(a=>a.findByXValue(o,t)).flat()}renderYAxes(e,t){const r={...e,xDataToDecimalScale:t};this.yAxes.forEach(s=>s.render(r))}get yAxes(){return this.childrenOfType(At.TYPE)}get rangeAnnotations(){return this.childrenOfType(Bt.TYPE)}bounds(e){const[t,r]=this.iBounds(e,this.dataBounds.bind(this));if(r!=null)throw r;return t}renderRangeAnnotations(e,t){const r=this.bounds(e.hold);this.rangeAnnotations.forEach(s=>s.render({dataToDecimalScale:t,region:e.plot,viewport:e.viewport,timeRange:new i.w(r.lower,r.upper)}))}dataBounds(){return this.yAxes.map(e=>e.xBounds())}}const uo=d.z.object({container:i.Ho.box,viewport:i.Ho.box,hold:d.z.boolean().optional().default(!1),grid:d.z.record(d.z.string(),ni),visible:d.z.boolean().optional().default(!0),clearOverScan:i.K.crudeZ.optional().default(i.K.ZERO)}),Vu=(n,e)=>{const t=i.Ho.width(n)*Math.sqrt(i.Ho.height(n)),r=i.Ho.width(e)*Math.sqrt(i.Ho.height(e));return t/r},Xu=["upper2d","lower2d","gl"],Qu=["upper2d"];class In extends p.Composite{static TYPE="LinePlot";schema=uo;afterUpdate(e){this.internal.instrumentation=p.useInstrumentation(e,"lineplot"),this.internal.handleError=p.useErrorHandler(e),this.internal.renderCtx=p.Context.use(e),qt(e,t=>{this.state.visible&&this.requestRender("low",t)}),!(!this.state.visible&&!this.prevState.visible)&&this.requestRender("high","layout")}afterDelete(e){this.internal.renderCtx=p.Context.use(e),this.requestRender("high","layout")}findByXDecimal(e){const t={...this.state,plot:this.calculatePlot(),exposure:this.exposure};return this.axes.flatMap(r=>r.findByXDecimal(t,e)).flat()}findByXValue(e){const t={...this.state,plot:this.calculatePlot(),exposure:this.exposure};return this.axes.flatMap(r=>r.findByXValue(t,e)).flat()}get axes(){return this.childrenOfType(Ut.TYPE)}get tooltips(){return this.childrenOfType(Qe.TYPE)}get measures(){return this.childrenOfType(et.TYPE)}get bounds(){return this.childrenOfType(Pt.TYPE)}get exposure(){return Vu(this.state.viewport,this.state.container)}renderAxes(e,t){const r={...this.state,plot:e,canvases:t,exposure:this.exposure};this.axes.forEach(s=>s.render(r))}renderTooltips(e,t){const r={findByXDecimal:this.findByXDecimal.bind(this),region:e,canvases:t};this.tooltips.forEach(s=>s.render(r))}renderBounds(){this.bounds.forEach(e=>e.render({getBounds:()=>{const t={};return this.axes.forEach(r=>{const s=r.state.axisKey??r.key;t[s]=r.bounds(this.state.hold),r.yAxes.forEach(o=>{const a=o.state.axisKey??o.key;t[a]=o.bounds(this.state.hold)})}),t}}))}renderMeasures(e){const t={findByXDecimal:this.findByXDecimal.bind(this),findByXValue:this.findByXValue.bind(this),region:e};this.measures.forEach(r=>r.render(t))}calculatePlot(){return ga(this.state.grid,this.state.container)}render(e){const{instrumentation:t,renderCtx:r,handleError:s}=this.internal;if(this.deleted){t.L.debug("deleted, skipping render",{key:this.key});return}if(!this.state.visible)return t.L.debug("not visible, skipping render",{key:this.key}),({canvases:h})=>r.erase(this.state.container,this.state.clearOverScan,...h);const o=this.calculatePlot();t.L.debug("rendering",{key:this.key,viewport:this.state.viewport,container:this.state.container,grid:this.state.grid,plot:o,canvases:e});const a=i.K.construct(this.state.clearOverScan),l=r.scissor(this.state.container,a,e.filter(h=>h!=="gl")),u=r.scissor(o,i.K.ZERO,e.filter(h=>h==="gl"));try{this.renderAxes(o,e),this.renderTooltips(o,e),this.renderMeasures(o),this.renderBounds()}catch(h){s(h,"failed to render line plot")}finally{l(),u()}t.L.debug("rendered",{key:this.key});const c=i.Ho.copy(this.state.container);return({canvases:h})=>r.erase(c,this.state.clearOverScan,...h)}requestRender(e,t){const{renderCtx:r}=this.internal;let s=Xu;t==="tool"&&(s=Qu),r.loop.set({key:`${this.type}-${this.key}`,render:()=>this.render(s),priority:e,canvases:s})}}const Ju={[In.TYPE]:In,[Ut.TYPE]:Ut,[At.TYPE]:At,[Pt.TYPE]:Pt};exports.AcquireChannelControl=Zt;exports.Annotation=Rn;exports.AuthoritySource=It;exports.Base=fe;exports.BaseProvider=Oe;exports.Bottom=xi;exports.BoundQuerier=Pt;exports.Button=_n;exports.Canvas=Nt;exports.Chip=Mn;exports.Client=oo;exports.Controller=On;exports.Diagram=Pu;exports.Diagram$1=ce;exports.FLUX_STORE_KEY=du;exports.Indicator=Dn;exports.Legend=Ln;exports.Light=Yn;exports.Line=zt;exports.LinePlot=In;exports.Log=Je;exports.MODES=Fi;exports.MOUSE_DOWN_INCREMENT=Wi;exports.MOUSE_UP_INCREMENT=ji;exports.Measure=et;exports.PROVIDER_TYPE=Er;exports.Provider=Bt;exports.Provider$1=Ct;exports.REGISTRY=yu;exports.REGISTRY$1=zu;exports.REGISTRY$10=eo;exports.REGISTRY$11=Ju;exports.REGISTRY$12=su;exports.REGISTRY$13=ku;exports.REGISTRY$14=Vi;exports.REGISTRY$15=xu;exports.REGISTRY$16=Gi;exports.REGISTRY$17=Eu;exports.REGISTRY$2=ro;exports.REGISTRY$3=Qi;exports.REGISTRY$4=Zu;exports.REGISTRY$5=ei;exports.REGISTRY$6=Gs;exports.REGISTRY$7=Hu;exports.REGISTRY$8=Oi;exports.REGISTRY$9=ju;exports.Right=Ei;exports.Rule=Ve;exports.STATUSES=Ai;exports.STORE_CONFIG=gu;exports.ScopedUnaryStore=so;exports.SetChannelValue=Ht;exports.Setpoint=zn;exports.StateProvider=Xe;exports.Table=ze;exports.Toggle=An;exports.Tooltip=Qe;exports.Top=Ti;exports.Value=Ae;exports.XAxis=Ut;exports.YAxis=At;exports.ZERO_CONTEXT_VALUE=sr;exports.a=$t;exports.acquireChannelControl=bu;exports.acquireChannelControlPropsZ=Ni;exports.aether=cu;exports.annotationStateZ=Di;exports.authoritySource=Su;exports.authoritySourceDetailsZ=wu;exports.authoritySourceProps=Bi;exports.axisStateZ=vr;exports.boundQuerierStateZ=ti;exports.buttonStateZ=Ki;exports.canvas=Cu;exports.canvasStateZ=wr;exports.channelData=xs;exports.chipStateZ=_i;exports.chipStatusDetailsZ=Li;exports.color=De;exports.colorGradient=Zs;exports.control=qt;exports.controllerStateZ=Zi;exports.coreAxisStateZ=at;exports.createRegistry=Ku;exports.createStore=io;exports.diagramStateZ=Sr;exports.external=da;exports.indicatorStateZ=$i;exports.indicatorStatusDetailsZ=Ui;exports.interpolate=Jt;exports.interpolateNumber=je;exports.interpolateRgb=Tn;exports.interpolateString=ai;exports.legendStateZ=qi;exports.linePlotStateZ=uo;exports.logState=Ji;exports.measure=Au;exports.measureStateZ=Tr;exports.newCanvas=Si;exports.newTickFactory=Pn;exports.parseAutoBounds=Ri;exports.provider=qo;exports.providerStateZ=co;exports.providerStateZ$1=ao;exports.providerStateZ$2=or;exports.regions=ie;exports.request=X;exports.rollingAverage=As;exports.rollingAverageProps=tr;exports.ruleStateZ=br;exports.scaleNumber=Ns;exports.scopeStore=Hn;exports.setChannelValue=vu;exports.setChannelValuePropsZ=Ii;exports.setpoint=Ds;exports.setpointStateZ=to;exports.sinkPipeline=bs;exports.sinkPipelinePropsZ=Vn;exports.sourcePipeline=vs;exports.sourcePipelinePropsZ=jn;exports.stateProviderStateZ=Yi;exports.stateZ=Mi;exports.stateZ$1=Xi;exports.statusZ=Hi;exports.streamChannelData=Ts;exports.streamChannelValue=Es;exports.streamChannelValuePropsZ=Xn;exports.stringSourceSpecZ=Kn;exports.stringifyNumber=zs;exports.stringifyNumberProps=er;exports.sugaredStateZ=zi;exports.tickFactoryProps=yr;exports.tickType=mr;exports.toggleStateZ=no;exports.tooltip=Lu;exports.tooltipStateZ=xr;exports.useOptionalRequestor=os;exports.useRequestor=Ft;exports.value=Bu;exports.withinBounds=Ls;exports.withinBoundsProps=Jn;exports.withinSizeThreshold=Ci;exports.xAxisStateZ=Gu;exports.yAxisStateZ=uu;
|