@synnaxlabs/pluto 0.38.1 → 0.38.2

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.
@@ -53,4 +53,4 @@ uniform mediump vec2 u_offset_aggregate;
53
53
 
54
54
  void main(void) {
55
55
  gl_Position = vec4((u_scale_aggregate * vec2(a_x, float(a_y)) + u_offset_aggregate) + a_translate, 0.0, 1.0);
56
- }`,Za=p.z.object({x:Je,y:Je,label:p.z.string().optional(),color:l.Color.z,strokeWidth:p.z.number().default(1),downsample:p.z.number().min(1).max(50).optional().default(1)}),Nc=(e,n,t)=>e===-1||n===-1||e>=t.length?NaN:Number(t[e].at(n)),Ic=d.w.milliseconds(2);l.G.NAN,l.G.NAN,l.ZERO;const $c=(e,n)=>n.equals(d.g.UINT8)?e.UNSIGNED_BYTE:e.FLOAT;class gs extends d.GLProgram{constructor(t,r,s){super(t,r,s);h(this,"translationBufferCache",new Map);h(this,"attrLocations",{});this.translationBufferCache=new Map,this.attrLocations={x:this.renderCtx.gl.getAttribLocation(this.prog,"a_x"),y:this.renderCtx.gl.getAttribLocation(this.prog,"a_y"),translate:this.renderCtx.gl.getAttribLocation(this.prog,"a_translate")}}bindState({strokeWidth:t,color:r}){return this.uniformColor("u_color",r),this.attrStrokeWidth(t)}bindScale(t,r){const s=l.G.scale(t.scale,r.scale),a=l.G.translate(l.G.scale(r.scale,t.offset),r.offset);this.uniformXY("u_scale_aggregate",s),this.uniformXY("u_offset_aggregate",a)}draw({x:t,y:r,count:s,downsample:a,xOffset:i,yOffset:o},c,u,f){const{gl:g}=this.renderCtx;this.bindAttrBuffer("x",t.glBuffer,a,i,u),this.bindAttrBuffer("y",r.glBuffer,a,o,f),g.drawArraysInstanced(g.LINE_STRIP,0,s/a,c)}bindAttrBuffer(t,r,s,a=0,i){const{gl:o}=this.renderCtx;o.bindBuffer(o.ARRAY_BUFFER,r);const c=o.getAttribLocation(this.prog,`a_${t}`),u=$c(o,i),f=i.density.valueOf();i.equals(d.g.UINT8)?o.vertexAttribIPointer(c,1,u,f*s,f*a):o.vertexAttribPointer(c,1,u,!1,f*s,f*a),o.enableVertexAttribArray(c)}getAndBindTranslationBuffer(t){const{gl:r}=this.renderCtx,s=`${this.renderCtx.aspect}:${t}`,a=this.translationBufferCache.get(s);if(a!=null)return r.bindBuffer(r.ARRAY_BUFFER,a.glBuffer),a;const i=r.createBuffer();if(i==null)throw new d.xe("Failed to create buffer from WebGL context");const o=Bc(this.renderCtx.aspect,t);r.bindBuffer(r.ARRAY_BUFFER,i),r.bufferData(r.ARRAY_BUFFER,o,r.DYNAMIC_DRAW);const c={glBuffer:i,jsBuffer:o};return this.translationBufferCache.set(s,c),c}attrStrokeWidth(t){const{gl:r}=this.renderCtx,{jsBuffer:s}=this.getAndBindTranslationBuffer(t),a=r.getAttribLocation(this.prog,"a_translate");return r.vertexAttribPointer(a,2,r.FLOAT,!1,0,0),r.enableVertexAttribArray(a),r.vertexAttribDivisor(a,1),s.length/2}}const St=class St{constructor(n){h(this,"uint8HybridProgram");h(this,"float32Program");this.uint8HybridProgram=new gs(n,Zc,ps),this.float32Program=new gs(n,Ac,ps)}get gl(){return this.uint8HybridProgram.renderCtx.gl}getProgram(n){return n.equals(d.g.UINT8)?this.uint8HybridProgram:this.float32Program}static create(n,t){const r=new St(t);return n.set(St.CONTEXT_KEY,r),r}static use(n){const t=n.get(St.CONTEXT_KEY);if(t==null)throw new d.xe("GLProgram not found");return t}};h(St,"CONTEXT_KEY","pluto-line-gl-program");let hn=St;class Te extends d.Leaf{constructor(){super(...arguments);h(this,"schema",Za)}async afterUpdate(t){var s,a;if(this.deleted)return;const{internal:r}=this;r.xTelem=await H(t,this.state.x,r.xTelem),r.yTelem=await H(t,this.state.y,r.yTelem),r.instrumentation=De(t,"line"),r.ctx=hn.use(t),r.requestRender=N.useRequest(t),(s=r.stopListeningXTelem)==null||s.call(r),(a=r.stopListeningYTelem)==null||a.call(r),r.stopListeningXTelem=r.xTelem.onChange(()=>r.requestRender(Gn)),r.stopListeningYTelem=r.yTelem.onChange(()=>r.requestRender(Gn)),r.requestRender(K)}async afterDelete(){var r,s,a,i;const{internal:t}=this;await((s=(r=t.xTelem).cleanup)==null?void 0:s.call(r)),await((i=(a=t.yTelem).cleanup)==null?void 0:i.call(a)),t.requestRender(K)}async xBounds(){return(await this.internal.xTelem.value())[0]}async yBounds(){return(await this.internal.yTelem.value())[0]}async findByXValue(t,r){const{xTelem:s,yTelem:a}=this.internal,[,i]=await s.value();let[o,c]=[-1,-1];i.find((M,D)=>{const P=M.binarySearch(r),z=P>=0&&P<M.length;return z&&([o,c]=[P,D]),z});const{key:u}=this,{color:f,label:g}=this.state,m={key:u,color:f,label:g,position:{x:0,y:0},value:{x:NaN,y:NaN}};if(o===-1||c===-1)return m;const w=i[c];m.value.x=Nc(c,o,i);const[,b]=await a.value(),v=b.find(M=>l.H.contains(M.alignmentBounds,w.alignment+BigInt(o)));if(v==null)return m;const S=Number(v.alignment-w.alignment);return m.value.y=Number(v.at(o-S)),m.position={x:t.dataToDecimalScale.x.pos(m.value.x),y:t.dataToDecimalScale.y.pos(m.value.y)},m}async render(t){if(this.deleted)return;const{downsample:r}=this.state,{xTelem:s,yTelem:a,ctx:i}=this.internal,{dataToDecimalScale:o,exposure:c}=t,[[,u],[,f]]=await Promise.all([s.value(),a.value()]);if(u.forEach(S=>S.updateGLBuffer(i.gl)),f.forEach(S=>S.updateGLBuffer(i.gl)),u.length===0||f.length===0)return;const g=i.getProgram(f[0].dataType),m=jc(u,f,c,r,Ic);this.internal.instrumentation.L.debug("render",()=>({key:this.key,downsample:r,scale:o.transform,props:t.region,ops:Wc(m)}));const w=g.setAsActive(),b=g.bindState(this.state),v=g.renderCtx.scaleRegion(t.region).transform;m.forEach(S=>{const M=Hc(o,S).transform;g.bindScale(M,v),g.draw(S,b,u[0].dataType,f[0].dataType)}),w()}}h(Te,"TYPE","line");const Uc=5e3,Bc=(e,n)=>Fc(_c(e),n).map((t,r)=>Math.floor(r/Gc)*(1/(Uc*e))*t),Gc=5,_c=e=>new Float32Array([0,0,0,e,0,-e,1,0,-1,0]),Fc=(e,n)=>{const t=new Float32Array(e.length*n);for(let r=0;r<n;r++)t.set(e,r*e.length);return t},Hc=(e,n)=>e.translate(e.x.dim(Number(n.x.sampleOffset)),e.y.dim(Number(n.y.sampleOffset))),qc={[Te.TYPE]:Te},jc=(e,n,t,r,s)=>{if(e.length===0||n.length===0)return[];const a=[];return e.forEach(i=>n.forEach(o=>{if(!Vc(i,o,s))return;let c=0,u=0;i.alignment<o.alignment?c=Number(o.alignment-i.alignment):o.alignment<i.alignment&&(u=Number(i.alignment-o.alignment));const f=Math.min(i.length-c,o.length-u);if(f===0)return;const g=l.Y(Math.round(t*4*f),r,51);a.push({x:i,y:o,xOffset:c,yOffset:u,count:f,downsample:g})})),a},Wc=e=>e.map(n=>({...n,x:n.x.digest,y:n.y.digest})),Vc=(e,n,t)=>{if(!(e._timeRange!=null&&n._timeRange!=null))throw new d.xe(`Encountered series without time range in buildDrawOperations. X series present: ${e._timeRange!=null}, Y series present: ${n._timeRange!=null}`);const s=e.timeRange.overlapsWith(n.timeRange,t),a=l.H.overlapsWith(e.alignmentBounds,n.alignmentBounds);return s&&a};class qt{constructor(n,t){h(this,"canvas");h(this,"theme");this.canvas=n,this.theme=t}rule({direction:n,region:t,position:r,...s}){return n==="x"?this.line({start:l.G.construct(l.Tt.left(t),r),end:l.G.construct(l.Tt.right(t),r),...s}):this.line({start:l.G.construct(r,l.Tt.top(t)),end:l.G.construct(r,l.Tt.bottom(t)),...s})}line({stroke:n,lineWidth:t,lineDash:r,start:s,end:a}){const i=this.canvas;i.strokeStyle=n.hex,i.lineWidth=t,i.setLineDash([r]),i.beginPath(),i.moveTo(...l.G.couple(s)),i.lineTo(...l.G.couple(a)),i.stroke()}circle({fill:n,radius:t,position:r}){const s=this.canvas;s.fillStyle=n.hex,s.beginPath(),s.arc(...l.G.couple(r),t,0,2*Math.PI),s.fill()}resolveColor(n,t){return n==null?this.resolveColor(t):typeof n=="function"?n(this.theme):new l.Color(n)}border({region:n,color:t,width:r,radius:s,location:a}){const i=this.canvas;i.strokeStyle=this.resolveColor(t,this.theme.colors.border).hex,i.lineWidth=r??this.theme.sizes.border.width,s??(s=this.theme.sizes.border.radius),a==null||a===!0?s>0?(i.roundRect(...l.G.couple(l.Tt.topLeft(n)),...l.G.couple(l.Tt.dims(n)),s),i.stroke()):(i.rect(...l.G.couple(l.Tt.topLeft(n)),...l.G.couple(l.Tt.dims(n))),i.stroke()):d.A(a).forEach(o=>{const[c,u]=l.Tt.edgePoints(n,o);i.beginPath(),i.moveTo(...l.G.couple(c)),i.lineTo(...l.G.couple(u)),i.stroke()})}container({region:n,bordered:t=!0,rounded:r=!0,borderColor:s,borderRadius:a,borderWidth:i,backgroundColor:o}){a??(a=this.theme.sizes.border.radius),i??(i=1);const c=this.canvas;c.fillStyle=this.resolveColor(o,this.theme.colors.gray.l1).hex,c.strokeStyle=this.resolveColor(s,this.theme.colors.border).hex,c.setLineDash([]),c.lineWidth=1,c.beginPath(),r?c.roundRect(...l.G.couple(l.Tt.topLeft(n)),...l.G.couple(l.Tt.dims(n)),a):c.rect(...l.G.couple(l.Tt.topLeft(n)),...l.G.couple(l.Tt.dims(n))),c.fill(),t&&this.border({region:n,color:s,radius:a,width:i,location:t})}textContainer(n){const[t,r]=this.spacedTextDrawF(n);t.width+=12,t.height+=12;const{root:s=l.K.TOP_LEFT,offset:a=l.G.ZERO}=n,i={...n.position};s.x==="right"?i.x-=t.width+a.x:i.x+=a.x,s.y==="bottom"?i.y-=t.height+a.y:i.y+=a.y,this.container({region:l.Tt.construct(i,t.width,t.height),...n}),this.canvas.filter="none",r(l.G.translate(i,[6,6]))}spacedTextDrawF({text:n,direction:t,spacing:r=1,level:s="p"}){const a=d.fontString(this.theme,{level:s}),i=n.map(u=>d.dimensions(u,a,this.canvas)),o=this.theme.sizes.base*r,c=Math.max(...i.map(u=>u[l.g.dimension(t)]))+o;return[{[l.g.dimension(l.g.swap(t))]:Math.max(...i.map(u=>u[l.g.dimension(l.g.swap(t))])),[l.g.dimension(t)]:c*n.length-o},u=>{const f=d.fontString(this.theme,{level:s});this.canvas.font=f,this.canvas.fillStyle=this.theme.colors.text.hex,this.canvas.textBaseline="top",n.forEach((g,m)=>{this.canvas.fillText(g,u.x,u.y+c*m)})}]}drawTextInCenter({box:n,text:t,level:r}){const s=d.dimensions(t,this.canvas.font,this.canvas),a=l.Tt.positionInCenter(l.Tt.construct(l.G.ZERO,s),n);return this.text({text:t,position:l.Tt.topLeft(a),level:r})}text({text:n,position:t,level:r="p",weight:s,shade:a,maxWidth:i,code:o}){this.canvas.font=d.fontString(this.theme,{level:r,weight:s,code:o}),a==null?this.canvas.fillStyle=this.theme.colors.text.hex:this.canvas.fillStyle=this.theme.colors.gray[`l${a}`].hex,this.canvas.textBaseline="top";let c;i!=null&&(c=this.canvas.scissor(l.Tt.construct(t,i,1e3))),this.canvas.fillText(n,t.x,t.y),c==null||c()}}const Lr=p.z.object({position:p.z.number().optional(),pixelPosition:p.z.number().optional(),dragging:p.z.boolean(),lineWidth:p.z.number().optional().default(1),lineDash:p.z.number().optional().default(20),color:l.Color.z}),Xc=3;class Ut extends d.Leaf{constructor(){super(...arguments);h(this,"schema",Lr);h(this,"lastUpdateRef",null)}async afterUpdate(t){this.internal.renderCtx=d.Context.use(t);const r=d.use(t);this.internal.draw=new qt(this.internal.renderCtx.upper2d,r),N.requestRender(t,et)}async afterDelete(t){N.requestRender(t,et)}updatePositions({decimalToDataScale:t,plot:r}){const s=this.state.dragging,a=this.prevState.dragging&&!s;if((s||a)&&this.state.pixelPosition!=null){if(this.lastUpdateRef??(this.lastUpdateRef=this.state.pixelPosition),Math.abs(this.state.pixelPosition-this.lastUpdateRef)<Xc&&!a)return this.state.pixelPosition;this.lastUpdateRef=this.state.pixelPosition;const c=t.pos(this.state.pixelPosition/l.Tt.height(r));return this.setState(u=>({...u,position:c})),this.state.pixelPosition}if(this.state.position==null){const o=t.pos(.5);this.setState(c=>({...c,position:o}))}const i=t.reverse().pos(this.state.position)*l.Tt.height(r);if(!isNaN(i)){if(this.state.pixelPosition!=null&&Math.abs(i-this.state.pixelPosition)<1)return this.state.pixelPosition;this.setState(o=>({...o,pixelPosition:i}))}return i}async render(t){if(this.deleted)return;const{renderCtx:r}=this.internal,{location:s,plot:a}=t,i=l.K.direction(s),{upper2d:o}=r,c=this.internal.draw,u=this.updatePositions(t)+l.Tt.top(t.plot);c.rule({stroke:this.state.color,lineWidth:this.state.lineWidth,lineDash:this.state.lineDash,direction:i,region:a,position:u}),o.fillStyle=this.state.color.hex,o.lineJoin="round",o.lineWidth=3.5,o.lineCap="round",o.beginPath();const f=4;if(s==="left"){const g=l.Tt.left(a)-1;o.moveTo(g,u),o.lineTo(g-f,u-f),o.lineTo(g-f,u+f)}else s==="right"&&(o.moveTo(l.Tt.right(a),u),o.lineTo(l.Tt.right(a)+f,u-f),o.lineTo(l.Tt.right(a)+f,u+f));o.closePath(),o.stroke()}}h(Ut,"TYPE","Rule");const Na={[Ut.TYPE]:Ut},Kc=Object.freeze(Object.defineProperty({__proto__:null,REGISTRY:Na,Rule:Ut,ruleStateZ:Lr},Symbol.toStringTag,{value:"Module"})),Qc=Ae.extend({location:l.K.x.optional().default("left")}),ms=2,Jc=e=>l.Tt.signedWidth(e)<ms||l.Tt.signedHeight(e)<ms;class be extends Oa{constructor(){super(...arguments);h(this,"schema",Ae)}async xBounds(){return l.H.max((await Promise.all(this.lines.map(async t=>await t.xBounds()))).filter(t=>l.H.isFinite(t)))}async render(t){if(this.deleted)return;const[r,s]=await this.dataToDecimalScale(t.hold,this.dataBounds.bind(this),t.viewport),a=r.invert().reverse();if(this.renderAxis(t,a),await this.renderLines(t,r),await this.renderRules(t,a),s!=null)throw s}async renderLines({xDataToDecimalScale:t,plot:r,canvases:s,exposure:a},i){if(!s.includes("gl")||Jc(r))return;const o={region:r,dataToDecimalScale:new l.b.XY(t,i),exposure:a};await Promise.all(this.lines.map(async c=>await c.render(o)))}async renderRules({container:t,plot:r,canvases:s},a){if(!s.includes("upper2d"))return;const{location:i}=this.state,{render:o}=this.internal,c=l.Tt.construct(l.Tt.left(t),l.Tt.top(r),l.Tt.width(t),l.Tt.height(r)),u=o.scissor(c,l.G.ZERO,["upper2d"]),f={container:t,plot:r,decimalToDataScale:a,location:i};await Promise.all(this.rules.map(async g=>await g.render(f))),u()}async findByXValue({xDataToDecimalScale:t,plot:r,viewport:s,hold:a,exposure:i},o){const[c,u]=await this.dataToDecimalScale(a,this.dataBounds.bind(this),s);if(u!=null)throw u;const f=new l.b.XY(t,c),g={region:r,dataToDecimalScale:f,exposure:i};return(await Promise.all(this.lines.map(async m=>await m.findByXValue(g,o)))).map(m=>({...m,units:this.state.label}))}async dataBounds(){return await Promise.all(this.lines.map(async t=>await t.yBounds()))}get lines(){return this.childrenOfType(Te.TYPE)}get rules(){return this.childrenOfType(Ut.TYPE)}}h(be,"TYPE","YAxis");const Ia=p.z.object({start:d.m.z,end:d.m.z});class dn extends d.Leaf{constructor(){super(...arguments);h(this,"schema",Ia)}async afterUpdate(t){this.internal.render=d.Context.use(t),this.internal.draw=new qt(this.internal.render.upper2d,d.use(t))}async render(){}}h(dn,"TYPE","range-annotation");const tu=p.z.object({region:l.Tt.box,clearOverScan:l.G.crudeZ.optional().default(0),visible:p.z.boolean().optional().default(!0)}),Un=["upper2d","lower2d"],Ct=class Ct extends d.Composite{constructor(){super(...arguments);h(this,"schema",Ct.stateZ)}async afterUpdate(t){const{internal:r}=this;r.renderCtx=d.Context.use(t),r.handleException=d.useExceptionHandler(t),N.control(t,()=>this.requestRender("low")),this.requestRender("high")}async afterDelete(){this.requestRender("high")}async render(){if(this.deleted)return;const t=l.Tt.copy(this.state.region);if(!this.state.visible)return async()=>this.internal.renderCtx.erase(this.state.region,this.state.clearOverScan,...Un);const{renderCtx:r,handleException:s}=this.internal,a=l.b.XY.translate(l.Tt.topLeft(this.state.region)),i=r.scissor(this.state.region,l.G.construct(this.state.clearOverScan),Un);try{for(const o of this.children)await o.render({viewportScale:a})}catch(o){s(o,"Failed to render table")}finally{i()}return async()=>{this.internal.renderCtx.erase(t,this.state.clearOverScan)}}requestRender(t){const{renderCtx:r}=this.internal;r.loop.set({key:`${Ct.TYPE}-${this.key}`,render:this.render.bind(this),priority:t,canvases:Un})}};h(Ct,"TYPE","Table"),h(Ct,"stateZ",tu);let xe=Ct;const eu={[xe.TYPE]:xe},$a=p.z.object({triggered:p.z.boolean(),status:d.specZ$1,sink:En.optional().default(vn),source:ar.optional().default(nr)});class fn extends d.Leaf{constructor(){super(...arguments);h(this,"schema",$a)}async afterUpdate(t){var a,i,o;const{sink:r,source:s}=this.state;this.internal.source=await H(t,s,this.internal.source),this.internal.sink=await ze(t,r,this.internal.sink),this.state.triggered&&!this.prevState.triggered&&await this.internal.sink.set(((a=this.state.status.data)==null?void 0:a.authority)!==d.kp.Absolute.valueOf()),await this.updateEnabledState(),(o=(i=this.internal).stopListening)==null||o.call(i),this.internal.stopListening=this.internal.source.onChange(()=>{this.updateEnabledState()})}async updateEnabledState(){const t=await this.internal.source.value();d._.equal(t,this.state.status)||this.setState(r=>({...r,status:t,triggered:!1}))}async afterDelete(){var t,r,s,a;this.internal.stopListening(),await((r=(t=this.internal.source).cleanup)==null?void 0:r.call(t)),await((a=(s=this.internal.sink).cleanup)==null?void 0:a.call(s))}render(){}}h(fn,"TYPE","Chip");const Ua=p.z.object({}),ys="control-state-provider",Ba=d.rp.stateZ.extend({subjectColor:l.Color.z});class Bt extends d.Composite{constructor(){super(...arguments);h(this,"schema",Ua);h(this,"colors",new Map);h(this,"tracker");h(this,"disconnectTrackerChange");h(this,"obs",new Qn.Observer)}static use(t){return t.get(ys)}async afterUpdate(t){const{internal:r}=this;r.instrumentation=De(t,"control-state");const s=d.use(t);r.palette=s.colors.visualization.palettes.default,r.defaultColor=s.colors.gray.l6;const a=Me(t);r.client!=null&&a===r.client||(r.client=a,t.set(ys,this),await this.maybeCloseTracker(),r.client!=null&&(this.internal.instrumentation.L.debug("starting state tracker"),await this.openTracker(r.client)))}async maybeCloseTracker(){var t;this.tracker!=null&&(this.internal.instrumentation.L.debug("stopping state tracker"),(t=this.disconnectTrackerChange)==null||t.call(this),await this.tracker.close(),this.tracker=void 0)}async afterDelete(){await this.maybeCloseTracker()}onChange(t){return this.obs.onChange(t)}get(t){return Array.isArray(t)?d.c.unique(t).map(r=>this.getOne(r)).filter(r=>r!=null):this.getOne(t)}getOne(t){if(this.tracker==null)return;const r=this.tracker.states.get(t);if(r!=null)return{...r,subjectColor:this.colors.get(r.subject.key)??this.internal.defaultColor}}async openTracker(t){var a;const{internal:r}=this,{instrumentation:s}=r;try{this.tracker=await t.control.openStateTracker()}catch{s.L.error("failed to open state tracker");return}(a=this.disconnectTrackerChange)==null||a.call(this),this.disconnectTrackerChange=this.tracker.onChange(i=>{if(s.L.debug("transfer",{transfers:i.map(o=>d.rp.transferString(o))}),this.tracker==null)throw new d.xe("tracker is null inside it's own onChange callback!");this.updateColors(this.tracker),this.obs.notify(i)})}updateColors(t){const r=t.subjects(),s=r.map(o=>o.key),a=Array.from(this.colors.values());this.colors.forEach((o,c)=>!s.includes(c)&&this.colors.delete(c));const{palette:i}=this.internal;r.forEach(o=>{if(this.colors.has(o.key))return;const c=i.find(u=>!a.includes(u))??i[0];this.colors.set(o.key,c),a.push(c)})}}h(Bt,"TYPE","StateProvider");const Ga=["acquired","released","overridden","failed"],_a=p.z.enum(Ga),Fa=p.z.object({name:p.z.string(),authority:p.z.number().default(0),acquireTrigger:p.z.number(),status:_a.optional(),needsControlOf:d.Fg.keyZ.array().optional().default([])});class pn extends d.Composite{constructor(){super(...arguments);h(this,"schema",Fa);h(this,"registry",new Map);h(this,"writer")}async afterUpdate(t){const{internal:r}=this;r.instrumentation=De(t),(r.prevTrigger==null||Math.abs(this.state.acquireTrigger-r.prevTrigger)>1)&&(r.prevTrigger=this.state.acquireTrigger);const s=Me(t),a=Bt.use(t);r.client=s,r.client==null&&await this.release(),r.stateProv=a,r.telemCtx=sa(t,this,r.telemCtx),r.addStatus=d.useAggregator(t),this.state.acquireTrigger>r.prevTrigger?await this.acquire():this.state.acquireTrigger<r.prevTrigger&&await this.release()}async afterDelete(){await this.release()}async updateNeedsControlOf(){const{client:t}=this.internal;if(t==null)return;const r=new Set([]);for(const a of this.registry.keys())(await a.needsControlOf(t)).forEach(o=>o!==0&&r.add(o));const s=Array.from(r);d.F.unorderedPrimitiveArrays(this.state.needsControlOf,s)!==d.F.EQUAL&&this.setState(a=>({...a,needsControlOf:s}))}async acquire(){this.internal.prevTrigger=this.state.acquireTrigger;const{client:t,addStatus:r}=this.internal;if(t==null)return r({message:`Cannot acquire control on ${this.state.name} because no cluster has been connected.`,variant:"warning"});try{await this.updateNeedsControlOf();const s=this.state.needsControlOf;if(s.length===0)return r({message:`Cannot acquire control on ${this.state.name} because there are no channels to control.`,variant:"warning"});const a=d.k.now().sub(d.w.milliseconds(1));this.writer=await t.openWriter({start:a,channels:s,controlSubject:{key:this.key,name:this.state.name},authorities:this.state.authority,enableAutoCommit:!0}),this.setState(i=>({...i,status:"acquired"}))}catch(s){if(this.setState(a=>({...a,status:"failed"})),!(s instanceof Error))throw s;r({variant:"error",message:`${this.state.name} failed to acquire control`,description:s.message})}}async release(){var t;this.internal.prevTrigger=this.state.acquireTrigger;try{await((t=this.writer)==null?void 0:t.close()),this.setState(r=>({...r,status:"released"}))}catch(r){this.internal.addStatus({message:`${this.state.name} failed to release control: ${r.message}`,variant:"error"})}finally{this.writer=void 0}}async set(t){var r;this.writer==null&&await this.acquire(),await((r=this.writer)==null?void 0:r.write(t))}async setAuthority(t,r){var s;this.writer==null&&await this.acquire(),await((s=this.writer)==null?void 0:s.setAuthority(Object.fromEntries(t.map(a=>[a,r]))))}async releaseAuthority(t){var r;this.writer==null&&await this.acquire(),await((r=this.writer)==null?void 0:r.setAuthority(Object.fromEntries(t.map(s=>[s,this.state.authority]))))}deleteTelem(t){this.registry.delete(t),this.updateNeedsControlOf()}create(t){const s=(()=>{switch(t.type){case ve.TYPE:{const a=new ve(this,t.props);return this.registry.set(a,null),a}case Ce.TYPE:{const a=new Ce(this,this.internal.stateProv,t.props);return this.registry.set(a,null),a}case Se.TYPE:return new Se(this,t.props);default:return null}})();return s!=null&&this.updateNeedsControlOf(),s}}h(pn,"TYPE","Controller");const Ha=p.z.object({channel:p.z.number()});class ve extends kn{constructor(t,r){super(r);h(this,"controller");h(this,"schema",Ha);this.controller=t}invalidate(){}async cleanup(){this.controller.deleteTelem(this)}async needsControlOf(t){if(this.props.channel===0)return[];const r=await t.channels.retrieve(this.props.channel),s=[r.key];return r.index!==0&&s.push(r.index),s}async set(t){const{client:r}=this.controller.internal;if(r==null)return;const s=await r.channels.retrieve(this.props.channel),a={[s.key]:t};if(s.index!==0){const i=await r.channels.retrieve(s.index);a[i.key]=d.k.now()}await this.controller.set(a)}}h(ve,"TYPE","controlled-numeric-telem-sink");const nu=e=>({type:ve.TYPE,props:e,variant:"sink",valueType:"number"}),qa=p.z.object({authority:p.z.number().default(d.rp.Authority.Absolute.valueOf()),channel:p.z.number()});class Se extends kn{constructor(t,r){super(r);h(this,"controller");h(this,"schema",qa);this.controller=t}async cleanup(){this.controller.deleteTelem(this)}async needsControlOf(t){const r=await t.channels.retrieve(this.props.channel),s=[r.key];return r.index!==0&&s.push(r.index),s}async set(t){const{controller:r}=this,{client:s}=r.internal;if(s==null)return;const a=await s.channels.retrieve(this.props.channel),i=[a.key];a.index!==0&&i.push(a.index),t?await this.controller.setAuthority(i,this.props.authority):await this.controller.releaseAuthority(i)}}h(Se,"TYPE","acquire-channel-control");const ru=e=>({type:Se.TYPE,props:e,variant:"sink",valueType:"boolean"}),ja=p.z.object({channel:p.z.number()});class Ce extends _{constructor(t,r,s){super(s);h(this,"prov");h(this,"valid",!1);h(this,"stopListening");h(this,"controller");h(this,"schema",ja);this.prov=r,this.controller=t}async needsControlOf(){return[]}maybeRevalidate(){var s;if(this.valid)return;const{channel:t}=this.props;(s=this.stopListening)==null||s.call(this);const r=d.U.filterTransfersByChannelKey(t);this.stopListening=this.prov.onChange(a=>{var i;r(a).length!==0&&((i=this.notify)==null||i.call(this))}),this.valid=!0}async value(){this.maybeRevalidate();const t=d.k.now();if(this.props.channel===0)return{key:this.controller.key,variant:"disabled",message:"No Channel",time:t,data:{valid:!1,authority:0}};const r=this.prov.get(this.props.channel);return r==null?{key:this.controller.key,variant:"disabled",message:"Uncontrolled",time:t,data:{valid:!0,color:void 0,authority:0}}:{key:r.subject.key,variant:r.subject.key===this.controller.key?"success":"error",message:`Controlled by ${r.subject.name}`,time:t,data:{valid:!0,color:r.subjectColor,authority:r.authority}}}async cleanup(){var t;this.controller.deleteTelem(this),(t=this.stopListening)==null||t.call(this)}}h(Ce,"TYPE","controlled-status-source");const su=e=>({type:Ce.TYPE,props:e,variant:"source",valueType:"status"}),Wa=p.z.object({statusSource:ar.optional().default(nr),colorSource:sr.optional().default(Sn),status:d.specZ$1,color:l.Color.z.optional()});class gn extends d.Leaf{constructor(){super(...arguments);h(this,"schema",Wa);h(this,"stopListeningStatus");h(this,"stopListeningColor")}async afterUpdate(t){var i,o;const{internal:r}=this,{statusSource:s,colorSource:a}=this.state;r.statusSource=await H(t,s,r.statusSource),r.colorSource=await H(t,a,r.colorSource),await this.updateState(),(i=this.stopListeningStatus)==null||i.call(this),this.stopListeningStatus=r.statusSource.onChange(()=>{this.updateState()}),(o=this.stopListeningColor)==null||o.call(this),this.stopListeningColor=r.colorSource.onChange(()=>{this.updateState()})}async afterDelete(){var t,r,s,a;await((r=(t=this.internal.statusSource).cleanup)==null?void 0:r.call(t)),await((a=(s=this.internal.colorSource).cleanup)==null?void 0:a.call(s))}async render(){}async updateState(){const t=await this.internal.colorSource.value(),r=await this.internal.statusSource.value();t.equals(this.state.color)&&r.message===this.state.status.message||this.setState(s=>({...s,color:t,status:r}))}}h(gn,"TYPE","Indicator");const Va=p.z.object({needsControlOf:d.Fg.keyZ.array(),states:Ba.array()});class mn extends d.Leaf{constructor(){super(...arguments);h(this,"schema",Va)}async afterUpdate(t){var o;const{internal:r}=this;r.stateProv=Bt.use(t);const s=this.state.needsControlOf;(o=r.disconnectStateProv)==null||o.call(r);const a=d.U.filterTransfersByChannelKey(...s),i=r.stateProv.get(s);this.setState(c=>({...c,states:i})),r.disconnectStateProv=r.stateProv.onChange(c=>{if(a(c).length===0)return;const u=r.stateProv.get(s);this.setState(f=>({...f,states:u}))})}async afterDelete(){var r;const{internal:t}=this;(r=t.disconnectStateProv)==null||r.call(t)}async render(){}}h(mn,"TYPE","Legend");const au={[pn.TYPE]:pn,[Bt.TYPE]:Bt,[gn.TYPE]:gn,[fn.TYPE]:fn,[mn.TYPE]:mn},Xa=p.z.object({trigger:p.z.number(),sink:En.optional().default(vn)});class yn extends d.Leaf{constructor(){super(...arguments);h(this,"schema",Xa)}async afterUpdate(t){var a;const{sink:r}=this.state;(a=this.internal).prevTrigger??(a.prevTrigger=this.state.trigger),this.internal.sink=await ze(t,r,this.internal.sink);const s=this.internal.prevTrigger;this.internal.prevTrigger=this.state.trigger,!(this.state.trigger<=s)&&await this.internal.sink.set(!0)}render(){}async afterDelete(){await this.internalAfterDelete()}async internalAfterDelete(){var r,s;const{internal:t}=this;await((s=(r=t.sink).cleanup)==null?void 0:s.call(r))}}h(yn,"TYPE","Button");const iu={[yn.TYPE]:yn},Or=p.z.object({dpr:p.z.number(),region:l.Tt.box,bootstrap:p.z.boolean().optional().default(!1),bootstrapped:p.z.boolean().optional().default(!1),glCanvas:p.z.any().optional(),upper2dCanvas:p.z.any().optional(),lower2dCanvas:p.z.any().optional(),os:d.S.osZ});class Ee extends d.Composite{constructor(){super(...arguments);h(this,"schema",Or);h(this,"renderCtx",null)}async afterUpdate(t){if(this.renderCtx==null){if(!this.state.bootstrap)return;const{glCanvas:r,lower2dCanvas:s,upper2dCanvas:a,os:i}=this.state;if(r==null||s==null||a==null)throw new d.xe("[vis.worker.Canvas] - expected render context bootstrap to include all canvases");this.renderCtx=d.Context.create(t,r,s,a,i),hn.create(t,this.renderCtx),this.setState(o=>({...o,bootstrap:!1,bootstrapped:!0,glCanvas:void 0,lower2dCanvas:void 0,upper2dCanvas:void 0}))}else this.renderCtx.update(t);this.renderCtx.resize(this.state.region,this.state.dpr)}}h(Ee,"TYPE","Canvas");const Ka={[Ee.TYPE]:Ee},ou=Object.freeze(Object.defineProperty({__proto__:null,Canvas:Ee,REGISTRY:Ka,canvasStateZ:Or},Symbol.toStringTag,{value:"Module"})),Ar=p.z.object({position:l.G.xy,zoom:p.z.number(),region:l.Tt.box,clearOverScan:l.G.crudeZ.optional().default(10),visible:p.z.boolean().optional().default(!0)}),Be=["upper2d","lower2d"],Et=class Et extends d.Composite{constructor(){super(...arguments);h(this,"schema",Et.stateZ)}async afterUpdate(t){this.internal.renderCtx=d.Context.use(t),this.internal.addStatus=d.useAggregator(t),N.control(t,()=>this.requestRender("low")),this.requestRender("high")}async afterDelete(){this.requestRender("high")}async render(){if(this.deleted)return;const{renderCtx:t,addStatus:r}=this.internal,{zoom:s,position:a}=this.state,i=l.Tt.construct(this.state.region);if(!this.state.visible)return async()=>t.erase(i,this.state.clearOverScan,...Be);const o=t.scissor(i,l.G.ZERO,Be),c=l.b.XY.magnify(l.G.construct(s)).translate(l.Tt.topLeft(i)).translate(a);try{await Promise.all(this.children.map(async f=>await f.render({viewportScale:c})))}catch(f){if(!(f instanceof Error))throw f;r({variant:"error",message:"Failed to render diagram",description:f.message})}finally{o()}const u=l.Tt.copy(this.state.region);return async()=>{this.internal.renderCtx.erase(u,this.state.clearOverScan,...Be)}}requestRender(t){const{renderCtx:r}=this.internal;r.loop.set({key:`${Et.TYPE}-${this.key}`,render:this.render.bind(this),priority:t,canvases:Be})}};h(Et,"TYPE","Diagram"),h(Et,"stateZ",Ar);let Gt=Et;const Qa={[Gt.TYPE]:Gt},lu=Object.freeze(Object.defineProperty({__proto__:null,Diagram:Gt,REGISTRY:Qa,diagramStateZ:Ar},Symbol.toStringTag,{value:"Module"})),Ja=p.z.object({enabled:p.z.boolean(),source:rr.optional().default(er)});class wn extends d.Leaf{constructor(){super(...arguments);h(this,"schema",Ja)}async afterUpdate(t){var a;this.internal.addStatus=d.useOptionalAggregator(t);const{source:r}=this.state,{internal:s}=this;this.internal.source=await H(t,r,this.internal.source),await this.updateEnabledState(),(a=s.stopListening)==null||a.call(s),s.stopListening=s.source.onChange(()=>{this.updateEnabledState().catch(this.reportError.bind(this))})}reportError(t){this.internal.addStatus({key:this.key,variant:"error",message:`Failed to update Light: ${t.message}`})}async updateEnabledState(){const t=await this.internal.source.value();t!==this.state.enabled&&this.setState(r=>({...r,enabled:t}))}async afterDelete(){await this.internalAfterDelete()}async internalAfterDelete(){var t,r;this.internal.stopListening(),await((r=(t=this.internal.source).cleanup)==null?void 0:r.call(t))}async render(){}}h(wn,"TYPE","Light");const cu={[wn.TYPE]:wn},Zr=p.z.object({position:l.G.xy.or(p.z.null()),textColor:l.Color.z.optional().default(l.ZERO),backgroundColor:l.Color.z.optional().default(l.ZERO),borderColor:l.Color.z.optional().default(l.ZERO),ruleColor:l.Color.z.optional().default(l.ZERO),ruleStrokeWidth:p.z.number().optional().default(1),ruleStrokeDash:p.z.number().default(0)});class _t extends d.Leaf{constructor(){super(...arguments);h(this,"schema",Zr)}async afterUpdate(t){const r=d.use(t);this.state.textColor.isZero&&(this.state.textColor=r.colors.text),this.state.backgroundColor.isZero&&(this.state.backgroundColor=r.colors.gray.l1),this.state.borderColor.isZero&&(this.state.borderColor=r.colors.border),this.state.ruleColor.isZero&&(this.state.ruleColor=r.colors.gray.l5),this.internal.dotColor=r.colors.text,this.internal.dotColorContrast=r.colors.textInverted,this.internal.render=d.Context.use(t),this.internal.draw=new qt(this.internal.render.upper2d,r),N.requestRender(t,et)}async afterDelete(t){N.requestRender(t,et)}async render(t){if(this.deleted||this.state.position==null)return;const{region:r}=t,s=l.b.XY.scale(l.Tt.DECIMAL).scale(r),a=l.b.XY.scale(r).scale(l.Tt.DECIMAL),i=await t.findByXDecimal(a.x.pos(this.state.position.x)),o=i.filter(b=>l.G.isFinite(b.value)),{draw:c}=this.internal,u=o.reduce((b,v)=>b+v.position.x,0)/o.length,f=new d.m(o.reduce((b,v)=>b+v.value.x,0)/o.length),g=s.x.pos(u);if(!l.H.contains(l.Tt.xBounds(r),g))return;c.rule({stroke:this.state.ruleColor,lineWidth:this.state.ruleStrokeWidth,lineDash:this.state.ruleStrokeDash,direction:"y",region:r,position:g}),o.forEach(b=>{const v=s.pos(b.position);c.circle({fill:b.color.setAlpha(.5),radius:8,position:v}),c.circle({fill:b.color.setAlpha(.8),radius:5,position:v}),c.circle({fill:b.color.pickByContrast(this.internal.dotColor,this.internal.dotColorContrast),radius:2,position:v})});const m=i.map(b=>`${b.label??""}: ${b.value.y.toFixed(2)}`);m.unshift(`Time: ${f.fString("preciseDate","local")}`);const w=a.pos(this.state.position);c.textContainer({text:m,backgroundColor:this.state.backgroundColor,borderColor:this.state.borderColor,position:this.state.position,direction:"y",level:"small",spacing:.5,offset:{x:12,y:12},root:{x:w.x>.8?"right":"left",y:w.y>.8?"top":"bottom"}})}}h(_t,"TYPE","tooltip");const ti={[_t.TYPE]:_t},uu=Object.freeze(Object.defineProperty({__proto__:null,REGISTRY:ti,Tooltip:_t,tooltipStateZ:Zr},Symbol.toStringTag,{value:"Module"})),ei=p.z.object({region:l.Tt.box,wheelPos:p.z.number(),scrolling:p.z.boolean(),empty:p.z.boolean(),visible:p.z.boolean(),telem:Je.optional().default(Ss),font:d.levelZ.optional().default("p"),color:l.Color.z.optional().default(l.ZERO),overshoot:l.G.xy.optional().default({x:0,y:0})}),hu=.98,Xt="lower2d",du={offset:0n,offsetRef:0n,scrollRef:0},ae=class ae extends d.Leaf{constructor(){super(...arguments);h(this,"schema",ae.z);h(this,"values",new d.Dt([]));h(this,"scrollState",du)}async afterUpdate(t){var f;const{internal:r}=this;r.render=d.Context.use(t),r.theme=d.use(t),this.state.color.isZero?this.internal.textColor=r.theme.colors.gray.l8:r.textColor=this.state.color,r.telem=await H(t,this.state.telem,r.telem);const s=d.useExceptionHandler(t),{scrolling:a,wheelPos:i}=this.state;if(this.state.scrolling&&!this.prevState.scrolling){const g=this.values.alignmentBounds.upper-1n;this.scrollState={offset:g,offsetRef:g,scrollRef:this.state.wheelPos}}else if(a){const{scrollState:g,values:m}=this,w=Math.ceil((i-this.scrollState.scrollRef)/this.lineHeight);g.offset=this.values.traverseAlignment(g.offsetRef,-BigInt(w)),g.offset<m.alignmentBounds.lower+BigInt(this.visibleLineCount)&&(g.offset=m.alignmentBounds.lower,this.setState(b=>({...b,wheelPos:this.prevState.wheelPos}))),g.offset>=m.alignmentBounds.upper&&this.setState(b=>({...b,scrolling:!1}))}const[c,u]=await this.internal.telem.value();this.values=new d.Dt(u),this.checkEmpty(),(f=r.stopListeningTelem)==null||f.call(r),r.stopListeningTelem=r.telem.onChange(()=>{this.internal.telem.value().then(([g,m])=>{this.checkEmpty(),this.values=new d.Dt(m),this.requestRender()}).catch(g=>s(g,"Failed to update log"))}),this.requestRender()}checkEmpty(){const t=this.values.length===0;t!==this.state.empty&&this.setState(r=>({...r,empty:t}))}async afterDelete(){var s;const{telem:t,render:r}=this.internal;await((s=t.cleanup)==null?void 0:s.call(t)),r.erase(l.Tt.construct(this.state.region),l.G.ZERO,Xt)}async requestRender(){const{render:t}=this.internal;await t.loop.set({key:`${this.type}-${this.key}`,render:async()=>await this.render(),priority:"high",canvases:[Xt]})}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((l.Tt.height(this.state.region)-12)/this.lineHeight),this.values.length)}async render(){const{render:t}=this.internal,r=this.state.region;if(l.Tt.areaIsZero(r))return;if(!this.state.visible)return async()=>t.erase(r,l.G.ZERO,Xt);let s;if(!this.state.scrolling)s=this.values.subIterator(this.values.length-this.visibleLineCount,this.values.length);else{const f=this.values.traverseAlignment(this.scrollState.offset,-BigInt(this.visibleLineCount));s=this.values.subAlignmentSpanIterator(f,this.visibleLineCount)}const a=this.state.region,i=t[Xt],o=new qt(i,this.internal.theme),c=t.scissor(a,l.G.ZERO,[Xt]);this.renderElements(o,s),this.renderScrollbar(o),c();const u=l.Tt.copy(this.state.region);return async({canvases:f})=>t.erase(u,this.state.overshoot,...f)}renderScrollbar(t){const r=this.state.region,s=l.Tt.height(r)/this.totalHeight*l.Tt.height(r);if(s>=l.Tt.height(r)*hu)return;let a=l.Tt.bottom(r)-s;this.state.scrolling&&(a-=Number(this.values.distance(this.values.alignmentBounds.upper,this.scrollState.offset))/this.values.length*l.Tt.height(r)),a<0&&(a=l.Tt.top(r)),t.container({region:l.Tt.construct({x:l.Tt.right(r)-6,y:a},{width:6,height:s}),bordered:!1,backgroundColor:i=>i.colors.gray.l4})}renderElements(t,r){const s=this.state.region;let a=0;for(const i of r){const o=this.values.dataType.equals(d.g.JSON)?JSON.stringify(i):i.toString();t.text({text:o,level:this.state.font,shade:9,position:l.G.translate(l.Tt.topLeft(s),{x:6,y:a*this.lineHeight+6}),code:!0}),a++}}};h(ae,"TYPE","log"),h(ae,"z",ei);let Pe=ae;const fu={[Pe.TYPE]:Pe},Nr=p.z.object({one:l.G.xy.nullable(),two:l.G.xy.nullable(),hover:l.G.xy.nullable(),color:p.z.union([l.Color.z,p.z.object({verticalLine:l.Color.z.optional().default(l.ZERO),horizontalLine:l.Color.z.optional().default(l.ZERO),obliqueLine:l.Color.z.optional().default(l.ZERO)})]).optional().default(l.ZERO),strokeWidth:p.z.number().optional().default(1),strokeDash:p.z.number().optional().default(2)});class Ft extends d.Leaf{constructor(){super(...arguments);h(this,"schema",Nr)}async afterUpdate(t){const r=d.Context.use(t);this.internal.theme=d.use(t),this.internal.renderCtx=r,this.internal.draw=new qt(r.upper2d,this.internal.theme),N.requestRender(t,et)}async afterDelete(t){N.requestRender(t,K)}get verticalLineColor(){return this.state.color instanceof l.Color?this.state.color.isZero?this.internal.theme.colors.gray.l6:this.state.color:this.state.color.verticalLine.isZero?this.internal.theme.colors.gray.l6:this.state.color.verticalLine}get horizontalLineColor(){return this.state.color instanceof l.Color?this.state.color.isZero?this.internal.theme.colors.gray.l6:this.state.color:this.state.color.horizontalLine.isZero?this.internal.theme.colors.gray.l6:this.state.color.horizontalLine}get obliqueLineColor(){return this.state.color instanceof l.Color?this.state.color.isZero?this.internal.theme.colors.gray.l6:this.state.color:this.state.color.obliqueLine.isZero?this.internal.theme.colors.gray.l6:this.state.color.obliqueLine}async find(t){const{one:r,two:s}=this.state;if(r==null||s==null)return null;const{one:a,two:i}=this.prevState,{dataOne:o,dataTwo:c}=this.internal;if(a!=null&&l.G.equals(r,a)&&i!=null&&l.G.equals(s,i)&&o!=null&&c!=null){const[S,M]=[await t.findByXValue(o.x),await t.findByXValue(c.x)];return S.length===0||M.length===0?null:[S.sort((D,P)=>l.G.distance(o,D.value)-l.G.distance(o,P.value))[0],M.sort((D,P)=>l.G.distance(c,D.value)-l.G.distance(c,P.value))[0]]}const u=l.b.XY.scale(t.region).scale(l.Tt.DECIMAL),[f,g]=[u.pos(r),u.pos(s)],[m,w]=[await t.findByXDecimal(f.x),await t.findByXDecimal(g.x)];if(m.length===0||w.length===0)return null;const[b,v]=[m.sort((S,M)=>l.G.distance(f,S.position)-l.G.distance(f,M.position))[0],w.sort((S,M)=>l.G.distance(g,S.position)-l.G.distance(g,M.position))[0]];return this.internal.dataOne=b.value,this.internal.dataTwo=v.value,[b,v]}async renderHover(t){if(this.state.hover==null)return;const r=this.state.hover,s=l.b.XY.scale(t.region).scale(l.Tt.DECIMAL),a=s.pos(r),i=await t.findByXDecimal(s.pos(r).x);if(i.length===0)return;const o=i.sort((u,f)=>l.G.distance(a,u.position)-l.G.distance(a,f.position))[0],{draw:c}=this.internal;c.circle({fill:o.color.setAlpha(.5),radius:9,position:s.reverse().pos(o.position)})}async render(t){if(this.deleted)return;await this.renderHover(t);const r=await this.find(t);if(r==null)return;const[s,a]=r,{draw:i}=this.internal,{strokeDash:o,strokeWidth:c}=this.state,u=l.b.XY.scale(l.Tt.DECIMAL).scale(t.region),f=u.pos(s.position),g=u.pos(a.position),m=new d.w(Math.abs(s.value.x-a.value.x)),w=Math.abs(s.value.y-a.value.y),b=w/m.seconds;i.line({start:l.G.construct(f.x,f.y),end:l.G.construct(f.x,g.y),stroke:this.verticalLineColor,lineDash:o,lineWidth:c}),i.textContainer({text:[`${w.toFixed(2)} ${s.units??""}`],direction:"x",position:l.G.construct(f.x,(f.y+g.y)/2),level:"small"}),i.line({start:l.G.construct(f.x,g.y),end:l.G.construct(g.x,g.y),stroke:this.horizontalLineColor,lineDash:o,lineWidth:c}),i.textContainer({text:[m.truncate(d.w.MILLISECOND).toString()],direction:"x",position:l.G.construct((f.x+g.x)/2,g.y),level:"small"}),i.line({start:l.G.construct(f.x,f.y),end:l.G.construct(g.x,g.y),stroke:this.obliqueLineColor,lineDash:o,lineWidth:c}),i.textContainer({text:[`${b.toFixed(2)} ${s.units??""} / S`],direction:"x",position:l.G.construct((f.x+g.x)/2,(f.y+g.y)/2),level:"small"}),i.circle({fill:s.color.setAlpha(.5),radius:8,position:f}),i.circle({fill:s.color.setAlpha(.8),radius:5,position:f}),i.circle({fill:new l.Color("#ffffff"),radius:2,position:f}),i.circle({fill:a.color.setAlpha(.5),radius:8,position:g}),i.circle({fill:a.color.setAlpha(.8),radius:5,position:g}),i.circle({fill:new l.Color("#ffffff"),radius:2,position:g})}}h(Ft,"TYPE","measure");const ni={[Ft.TYPE]:Ft},pu=Object.freeze(Object.defineProperty({__proto__:null,Measure:Ft,REGISTRY:ni,measureStateZ:Nr},Symbol.toStringTag,{value:"Module"})),ri=p.z.object({trigger:p.z.number(),command:p.z.number().optional(),value:p.z.number(),sink:Rs.optional().default(bs),source:ks.optional().default(xs)});class Tn extends d.Leaf{constructor(){super(...arguments);h(this,"schema",ri)}async afterUpdate(t){var u;this.internal.addStatus=d.useOptionalAggregator(t);const{sink:r,source:s,trigger:a,command:i}=this.state,{internal:o}=this;o.prevTrigger??(o.prevTrigger=a),this.internal.source=await H(t,s,this.internal.source),o.sink=await ze(t,r,o.sink);const c=o.prevTrigger;o.prevTrigger=a,a>c&&i!=null&&await this.internal.sink.set(i),await this.updateValue(),(u=o.stopListening)==null||u.call(o),o.stopListening=o.source.onChange(()=>{this.updateValue().catch(this.reportError.bind(this))})}reportError(t){this.internal.addStatus({key:this.key,variant:"error",message:`Failed to update Setpoint: ${t.message}`})}async updateValue(){const t=await this.internal.source.value();t!==this.state.value&&this.setState(r=>({...r,value:t,triggered:!1}))}async afterDelete(){var r,s,a,i;const{internal:t}=this;t.stopListening(),await((s=(r=t.source).cleanup)==null?void 0:s.call(r)),await((i=(a=t.sink).cleanup)==null?void 0:i.call(a))}async render(){}}h(Tn,"TYPE","Setpoint");const gu={[Tn.TYPE]:Tn},si=p.z.object({triggered:p.z.boolean(),enabled:p.z.boolean(),sink:En.optional().default(vn),source:rr.optional().default(er)});class bn extends d.Leaf{constructor(){super(...arguments);h(this,"schema",si)}async afterUpdate(t){var u;this.internal.addStatus=d.useOptionalAggregator(t);const{sink:r,source:s,triggered:a,enabled:i}=this.state,{triggered:o}=this.prevState,{internal:c}=this;c.source=await H(t,s,c.source),c.sink=await ze(t,r,c.sink),a&&!o&&await c.sink.set(!i),await this.updateEnabledState(),(u=c.stopListening)==null||u.call(c),c.stopListening=c.source.onChange(()=>{this.updateEnabledState().catch(this.reportError.bind(this))})}reportError(t){this.internal.addStatus({key:this.key,variant:"error",message:`Failed to update Toggle: ${t.message}`})}async updateEnabledState(){const t=await this.internal.source.value();t!==this.state.enabled&&this.setState(r=>({...r,enabled:t,triggered:!1}))}async afterDelete(){await this.internalAfterDelete()}async internalAfterDelete(){var t,r,s,a;this.internal.stopListening(),await((r=(t=this.internal.source).cleanup)==null?void 0:r.call(t)),await((a=(s=this.internal.sink).cleanup)==null?void 0:a.call(s))}async render(){}}h(bn,"TYPE","Toggle");const mu={[bn.TYPE]:bn},yu=p.z.object({box:l.Tt.box,telem:ir.optional().default(vs),backgroundTelem:sr.optional().default(Sn),level:d.levelZ.optional().default("p"),color:l.Color.z.optional().default(l.ZERO),precision:p.z.number().optional().default(2),minWidth:p.z.number().optional().default(60),width:p.z.number().optional(),notation:Gs.optional().default("standard"),location:l.K.xy.optional().default({x:"left",y:"center"})}),wu=["upper2d","lower2d"],ie=class ie extends d.Leaf{constructor(){super(...arguments);h(this,"schema",ie.z)}async afterUpdate(t){var s,a;const{internal:r}=this;r.renderCtx=d.Context.use(t),r.theme=d.use(t),this.state.color.isZero?this.internal.textColor=r.theme.colors.gray.l8:r.textColor=this.state.color,r.telem=await H(t,this.state.telem,r.telem),(s=r.stopListening)==null||s.call(r),r.stopListening=this.internal.telem.onChange(()=>this.requestRender()),r.backgroundTelem=await H(t,this.state.backgroundTelem,r.backgroundTelem),(a=r.stopListeningBackground)==null||a.call(r),r.stopListeningBackground=this.internal.backgroundTelem.onChange(()=>this.requestRender()),this.internal.requestRender=N.useOptionalRequest(t),this.requestRender()}async afterDelete(){var r,s,a,i,o,c;const{internal:t}=this;(r=t.stopListening)==null||r.call(t),(s=t.stopListeningBackground)==null||s.call(t),await((i=(a=t.telem).cleanup)==null?void 0:i.call(a)),await((c=(o=t.backgroundTelem).cleanup)==null?void 0:c.call(o)),t.requestRender==null?t.renderCtx.erase(l.Tt.construct(this.state.box),l.G.ZERO,...wu):t.requestRender(K)}requestRender(){const{requestRender:t}=this.internal;t!=null?t(K):this.render({})}get fontHeight(){const{theme:t}=this.internal;return t.typography[this.state.level].size*t.sizes.base}maybeUpdateWidth(t){const{theme:r}=this.internal,s=t+r.sizes.base+this.fontHeight;this.state.width==null||this.state.width+this.fontHeight*.5<s||this.state.minWidth>s&&this.state.width!==this.state.minWidth?this.setState(a=>({...a,width:Math.max(s,a.minWidth)})):this.state.width-this.fontHeight>s&&this.setState(a=>({...a,width:Math.max(s,a.minWidth)}))}async render({viewportScale:t=l.b.XY.IDENTITY}){const{renderCtx:r,telem:s,backgroundTelem:a}=this.internal,i=l.Tt.construct(this.state.box);if(l.Tt.areaIsZero(i))return;const{location:o}=this.state,c=r.lower2d.applyScale(t);let u=await s.value();const f=d.fontString(this.internal.theme,{level:this.state.level,code:!0});c.font=f;const g=this.fontHeight,m=u[0]=="-";m&&(u=u.slice(1));const{theme:w}=this.internal,b=d.dimensions(u,f,c).width+w.sizes.base;this.internal.requestRender==null&&r.erase(l.Tt.construct(this.prevState.box)),this.maybeUpdateWidth(b);const v={...l.G.ZERO};o.x==="left"&&(v.x=6+g*.75),o.x==="center"&&(v.x=l.Tt.width(i)/2-b/2),o.y==="center"&&(v.y=l.Tt.height(i)/2);const S=l.G.translate(l.Tt.topLeft(i),v),M=c.scissor(i,void 0);let D=!0;if(this.state.backgroundTelem.type!=Sn.type){const P=r.lower2d.applyScale(t),z=await a.value();D=z.isZero,z.isZero||(P.fillStyle=z.hex,P.rect(...l.G.couple(l.Tt.topLeft(i)),l.Tt.width(i),l.Tt.height(i)),P.fill(),c.fillStyle=z.pickByContrast(w.colors.gray.l0,w.colors.gray.l9).hex)}D&&(c.fillStyle=this.internal.textColor.hex),c.textBaseline="middle",m&&c.fillText("-",...l.G.couple(l.G.translateX(S,-g*.6))),c.fillText(u,...l.G.couple(S)),M()}};h(ie,"TYPE","value"),h(ie,"z",yu);let Ht=ie;const ai={[Ht.TYPE]:Ht},Tu=Object.freeze(Object.defineProperty({__proto__:null,REGISTRY:ai,Value:Ht},Symbol.toStringTag,{value:"Module"})),bu=d.mp.payloadZ.extend({viewport:l.H.bounds}),ws=e=>l.Color.z.safeParse(e).success,ii=p.z.object({cursor:l.G.xy.or(p.z.null()),hovered:bu.or(p.z.null()),count:p.z.number()});class ke extends d.Leaf{constructor(){super(...arguments);h(this,"schema",ii);h(this,"fetchedInitial",d.E.ZERO)}async afterUpdate(t){const{internal:r}=this;r.render=d.Context.use(t),r.draw=new qt(r.render.upper2d,d.use(t)),r.ranges??(r.ranges=new Map);const s=Me(t);s!=null&&(r.client=s,r.tracker==null&&(r.tracker=await r.client.ranges.openTracker(),r.tracker.onChange(a=>{a.forEach(i=>{i.variant==="delete"?r.ranges.delete(i.key):ws(i.value.color)&&r.ranges.set(i.key,i.value)}),N.requestRender(t,et),this.setState(i=>({...i,count:r.ranges.size}))}),N.requestRender(t,et)))}async fetchInitial(t){const{internal:r}=this;if(r.client==null||this.fetchedInitial.roughlyEquals(t,d.w.minutes(1)))return;this.fetchedInitial=t,(await r.client.ranges.retrieve(t)).forEach(a=>{ws(a.color)&&r.ranges.set(a.key,a)}),this.setState(a=>({...a,count:r.ranges.size}))}async render(t){const{dataToDecimalScale:r,region:s,viewport:a,timeRange:i}=t;await this.fetchInitial(i);const{draw:o,ranges:c}=this.internal,u=r.scale(l.Tt.xBounds(s)),f=this.state.cursor==null?null:this.state.cursor.x;let g=null;const m=o.canvas.scissor(l.Tt.construct({x:l.Tt.left(s),y:l.Tt.top(s)-35},{x:l.Tt.right(s),y:l.Tt.bottom(s)}));c.forEach(w=>{const b=l.Color.z.safeParse(w.color);if(!b.success)return;const v=b.data;let S=u.pos(Number(w.timeRange.start.valueOf()));const M=u.pos(Number(w.timeRange.end.valueOf()));if(M<l.Tt.left(s)||S>l.Tt.right(s))return;S=l.Y(S,l.Tt.left(s)-2,l.Tt.right(s)-1);let D=!1;f!=null&&(D=l.H.contains({lower:S,upper:M},f)),D&&(g={key:w.key,name:w.name,color:w.color,timeRange:w.timeRange,viewport:{lower:r.scale(l.Tt.xBounds(a)).pos(Number(w.timeRange.start.valueOf())),upper:r.scale(l.Tt.xBounds(a)).pos(Number(w.timeRange.end.valueOf()))}}),o.container({region:l.Tt.construct({x:S,y:l.Tt.top(s)-1},{x:M,y:l.Tt.bottom(s)-1}),backgroundColor:v.setAlpha(.2),bordered:!1});const P=l.Tt.construct({x:S+1,y:l.Tt.top(s)-34},{x:M-1,y:l.Tt.top(s)-12});o.container({region:P,backgroundColor:l.Tt.width(P)<20?v.setAlpha(.4):z=>D?z.colors.gray.l2:z.colors.gray.l0,bordered:!0,borderWidth:1,borderRadius:2,borderColor:v.setAlpha(.8)}),o.text({text:w.name,position:{x:S+8,y:l.Tt.top(s)-30},level:"small",shade:8,weight:500,maxWidth:M-S-16})}),m(),g!=null?this.setState(w=>({...w,hovered:g})):this.state.hovered&&this.setState(w=>({...w,hovered:null}))}}h(ke,"TYPE","range-provider");const xu={[dn.TYPE]:dn,[ke.TYPE]:ke},vu=Ae;class Re extends Oa{constructor(){super(...arguments);h(this,"schema",Ae)}async render(t){if(this.deleted)return;const[r,s]=await this.dataToDecimalScale(t.hold,this.dataBounds.bind(this),t.viewport);if(this.renderAxis(t,r.reverse()),await this.renderYAxes(t,r),await this.renderRangeAnnotations(t,r),s!=null)throw s}async findByXDecimal(t,r){const[s,a]=await this.dataToDecimalScale(t.hold,this.dataBounds.bind(this),t.viewport);if(a!=null)throw a;return await this.findByXValue(t,s.reverse().pos(r))}async findByXValue(t,r){const[s,a]=await this.dataToDecimalScale(t.hold,this.dataBounds.bind(this),t.viewport);if(a!=null)throw a;const i={...t,xDataToDecimalScale:s},o=this.yAxes.map(async c=>await c.findByXValue(i,r));return(await Promise.all(o)).flat()}async renderYAxes(t,r){const s={...t,xDataToDecimalScale:r};await Promise.all(this.yAxes.map(async a=>await a.render(s)))}get yAxes(){return this.childrenOfType(be.TYPE)}get rangeAnnotations(){return this.childrenOfType(ke.TYPE)}async renderRangeAnnotations(t,r){const[s,a]=await this.bounds(t.hold,this.dataBounds.bind(this));if(a!=null)throw a;await Promise.all(this.rangeAnnotations.map(async i=>await i.render({dataToDecimalScale:r,region:t.plot,viewport:t.viewport,timeRange:new d.E(s.lower,s.upper)})))}async dataBounds(){return await Promise.all(this.yAxes.map(async t=>await t.xBounds()))}}h(Re,"TYPE","XAxis");const oi=p.z.object({container:l.Tt.box,viewport:l.Tt.box,hold:p.z.boolean().optional().default(!1),grid:p.z.record(ha),visible:p.z.boolean().optional().default(!0),clearOverScan:l.G.crudeZ.optional().default(l.G.ZERO)}),Su=(e,n)=>{const t=l.Tt.width(e)*Math.sqrt(l.Tt.height(e)),r=l.Tt.width(n)*Math.sqrt(l.Tt.height(n));return t/r};class xn extends d.Composite{constructor(){super(...arguments);h(this,"schema",oi)}async afterUpdate(t){this.internal.instrumentation=De(t,"lineplot"),this.internal.aggregate=d.useAggregator(t),this.internal.renderCtx=d.Context.use(t),N.control(t,r=>this.requestRender("low",r)),this.requestRender("high",K)}async afterDelete(t){this.internal.renderCtx=d.Context.use(t),this.requestRender("high",K)}async findByXDecimal(t){const r={...this.state,plot:this.calculatePlot(),exposure:this.exposure},s=this.axes.flatMap(async a=>await a.findByXDecimal(r,t));return(await Promise.all(s)).flat()}async findByXValue(t){const r={...this.state,plot:this.calculatePlot(),exposure:this.exposure},s=this.axes.flatMap(async a=>await a.findByXValue(r,t));return(await Promise.all(s)).flat()}get axes(){return this.childrenOfType(Re.TYPE)}get tooltips(){return this.childrenOfType(_t.TYPE)}get measures(){return this.childrenOfType(Ft.TYPE)}get exposure(){return Su(this.state.viewport,this.state.container)}async renderAxes(t,r){const s={...this.state,plot:t,canvases:r,exposure:this.exposure};await Promise.all(this.axes.map(async a=>await a.render(s)))}async renderTooltips(t,r){const s={findByXDecimal:this.findByXDecimal.bind(this),region:t,canvases:r};await Promise.all(this.tooltips.map(async a=>await a.render(s)))}async renderMeasures(t){const r={findByXDecimal:this.findByXDecimal.bind(this),findByXValue:this.findByXValue.bind(this),region:t};await Promise.all(this.measures.map(async s=>await s.render(r)))}calculatePlot(){return io(this.state.grid,this.state.container)}async render(t){const{renderCtx:r}=this.internal,{instrumentation:s}=this.internal;if(this.deleted){s.L.debug("deleted, skipping render",{key:this.key});return}if(!this.state.visible)return s.L.debug("not visible, skipping render",{key:this.key}),async({canvases:f})=>r.erase(this.state.container,this.state.clearOverScan,...f);const a=this.calculatePlot();s.L.debug("rendering",{key:this.key,viewport:this.state.viewport,container:this.state.container,grid:this.state.grid,plot:a,canvases:t});const i=l.G.construct(this.state.clearOverScan),o=r.scissor(this.state.container,i,t.filter(f=>f!=="gl")),c=r.scissor(a,l.G.ZERO,t.filter(f=>f==="gl"));try{await this.renderAxes(a,t),await this.renderTooltips(a,t),await this.renderMeasures(a),r.gl.finish(),r.gl.flush(),r.gl.finish()}catch(f){if(f.message.toLowerCase().includes("bigint"))return;this.internal.aggregate({key:`${this.type}-${this.key}`,variant:"error",message:f.message})}finally{o(),c()}s.L.debug("rendered",{key:this.key});const u=l.Tt.copy(this.state.container);return async({canvases:f})=>r.erase(u,this.state.clearOverScan,...f)}requestRender(t,r){const{renderCtx:s}=this.internal;let a=["upper2d","lower2d","gl"];r===et&&(a=["upper2d"]),s.loop.set({key:`${this.type}-${this.key}`,render:async()=>await this.render(a),priority:t,canvases:a})}}h(xn,"TYPE","LinePlot");const Cu={[xn.TYPE]:xn,[Re.TYPE]:Re,[be.TYPE]:be};exports.AcquireChannelControl=Se;exports.Annotation=dn;exports.AuthoritySource=Ce;exports.BaseProvider=At;exports.Button=yn;exports.Canvas=za;exports.Canvas$1=Ee;exports.Chip=fn;exports.Controller=N;exports.Controller$1=pn;exports.Diagram=lu;exports.Diagram$1=Gt;exports.Indicator=gn;exports.Legend=mn;exports.Light=wn;exports.Line=Te;exports.LinePlot=xn;exports.Log=Pe;exports.Measure=Ft;exports.Provider=Fe;exports.Provider$1=ke;exports.Provider$2=Fn;exports.REASON_DATA=Gn;exports.REASON_LAYOUT=K;exports.REASON_TOOL=et;exports.REGISTRY=Gi;exports.REGISTRY$1=iu;exports.REGISTRY$10=Na;exports.REGISTRY$11=gu;exports.REGISTRY$12=Ts;exports.REGISTRY$13=ua;exports.REGISTRY$14=mu;exports.REGISTRY$15=ti;exports.REGISTRY$16=ai;exports.REGISTRY$17=fu;exports.REGISTRY$18=eu;exports.REGISTRY$2=Ka;exports.REGISTRY$3=au;exports.REGISTRY$4=Qa;exports.REGISTRY$5=cu;exports.REGISTRY$6=qc;exports.REGISTRY$7=Cu;exports.REGISTRY$8=ni;exports.REGISTRY$9=xu;exports.Rule=Ut;exports.STATUSES=Ga;exports.SetChannelValue=ve;exports.Setpoint=Tn;exports.StateProvider=Bt;exports.Table=xe;exports.Toggle=bn;exports.Tooltip=_t;exports.Value=Ht;exports.XAxis=Re;exports.YAxis=be;exports.ZERO_CONTEXT_VALUE=Jn;exports.acquireChannelControl=ru;exports.acquireChannelControlPropsZ=qa;exports.aether=Kc;exports.annotationStateZ=Ia;exports.authoritySource=su;exports.authoritySourceProps=ja;exports.axisStateZ=Dr;exports.buttonStateZ=Xa;exports.canvas=ou;exports.canvasStateZ=Or;exports.channelData=Os;exports.chipStateZ=$a;exports.color=Zt;exports.colorGradient=Ks;exports.controllerStateZ=Fa;exports.coreAxisStateZ=Ae;exports.diagramStateZ=Ar;exports.external=so;exports.indicatorStateZ=Wa;exports.interpolateNumber=we;exports.interpolateRgb=Wn;exports.interpolateString=ma;exports.legendStateZ=Va;exports.lightStateZ=Ja;exports.linePlotStateZ=oi;exports.logState=ei;exports.measure=pu;exports.measureStateZ=Nr;exports.newTickFactory=Kn;exports.parseAutoBounds=Aa;exports.provider=Ci;exports.providerStateZ=ii;exports.providerStateZ$1=ia;exports.providerStateZ$2=Tr;exports.regions=ut;exports.rollingAverage=Vs;exports.rollingAverageProps=mr;exports.ruleStateZ=Lr;exports.scaleNumber=Js;exports.setChannelValue=nu;exports.setChannelValuePropsZ=Ha;exports.setpoint=Fs;exports.setpointStateZ=ri;exports.sinkPipeline=Ds;exports.sinkPipelinePropsZ=ur;exports.sourcePipeline=zs;exports.sourcePipelinePropsZ=lr;exports.stateProviderStateZ=Ua;exports.stateZ=Za;exports.statusZ=_a;exports.streamChannelData=As;exports.streamChannelValue=Zs;exports.streamChannelValuePropsZ=hr;exports.stringSourceSpecZ=ir;exports.stringifyNumber=Ws;exports.stringifyNumberProps=gr;exports.sugaredStateZ=Ba;exports.tickFactoryProps=zr;exports.tickType=Yr;exports.toggleStateZ=si;exports.tooltip=uu;exports.tooltipStateZ=Zr;exports.value=Tu;exports.withinBounds=Hs;exports.withinBoundsProps=pr;exports.withinSizeThreshold=Da;exports.xAxisStateZ=vu;exports.yAxisStateZ=Qc;
56
+ }`,Za=p.z.object({x:Je,y:Je,label:p.z.string().optional(),color:l.Color.z,strokeWidth:p.z.number().default(1),downsample:p.z.number().min(1).max(50).optional().default(1)}),Nc=(e,n,t)=>e===-1||n===-1||e>=t.length?NaN:Number(t[e].at(n)),Ic=d.w.milliseconds(2);l.G.NAN,l.G.NAN,l.ZERO;const $c=(e,n)=>n.equals(d.g.UINT8)?e.UNSIGNED_BYTE:e.FLOAT;class gs extends d.GLProgram{constructor(t,r,s){super(t,r,s);h(this,"translationBufferCache",new Map);h(this,"attrLocations",{});this.translationBufferCache=new Map,this.attrLocations={x:this.renderCtx.gl.getAttribLocation(this.prog,"a_x"),y:this.renderCtx.gl.getAttribLocation(this.prog,"a_y"),translate:this.renderCtx.gl.getAttribLocation(this.prog,"a_translate")}}bindState({strokeWidth:t,color:r}){return this.uniformColor("u_color",r),this.attrStrokeWidth(t)}bindScale(t,r){const s=l.G.scale(t.scale,r.scale),a=l.G.translate(l.G.scale(r.scale,t.offset),r.offset);this.uniformXY("u_scale_aggregate",s),this.uniformXY("u_offset_aggregate",a)}draw({x:t,y:r,count:s,downsample:a,xOffset:i,yOffset:o},c,u,f){const{gl:g}=this.renderCtx;this.bindAttrBuffer("x",t.glBuffer,a,i,u),this.bindAttrBuffer("y",r.glBuffer,a,o,f),g.drawArraysInstanced(g.LINE_STRIP,0,s/a,c)}bindAttrBuffer(t,r,s,a=0,i){const{gl:o}=this.renderCtx;o.bindBuffer(o.ARRAY_BUFFER,r);const c=o.getAttribLocation(this.prog,`a_${t}`),u=$c(o,i),f=i.density.valueOf();i.equals(d.g.UINT8)?o.vertexAttribIPointer(c,1,u,f*s,f*a):o.vertexAttribPointer(c,1,u,!1,f*s,f*a),o.enableVertexAttribArray(c)}getAndBindTranslationBuffer(t){const{gl:r}=this.renderCtx,s=`${this.renderCtx.aspect}:${t}`,a=this.translationBufferCache.get(s);if(a!=null)return r.bindBuffer(r.ARRAY_BUFFER,a.glBuffer),a;const i=r.createBuffer();if(i==null)throw new d.xe("Failed to create buffer from WebGL context");const o=Bc(this.renderCtx.aspect,t);r.bindBuffer(r.ARRAY_BUFFER,i),r.bufferData(r.ARRAY_BUFFER,o,r.DYNAMIC_DRAW);const c={glBuffer:i,jsBuffer:o};return this.translationBufferCache.set(s,c),c}attrStrokeWidth(t){const{gl:r}=this.renderCtx,{jsBuffer:s}=this.getAndBindTranslationBuffer(t),a=r.getAttribLocation(this.prog,"a_translate");return r.vertexAttribPointer(a,2,r.FLOAT,!1,0,0),r.enableVertexAttribArray(a),r.vertexAttribDivisor(a,1),s.length/2}}const St=class St{constructor(n){h(this,"uint8HybridProgram");h(this,"float32Program");this.uint8HybridProgram=new gs(n,Zc,ps),this.float32Program=new gs(n,Ac,ps)}get gl(){return this.uint8HybridProgram.renderCtx.gl}getProgram(n){return n.equals(d.g.UINT8)?this.uint8HybridProgram:this.float32Program}static create(n,t){const r=new St(t);return n.set(St.CONTEXT_KEY,r),r}static use(n){const t=n.get(St.CONTEXT_KEY);if(t==null)throw new d.xe("GLProgram not found");return t}};h(St,"CONTEXT_KEY","pluto-line-gl-program");let hn=St;class Te extends d.Leaf{constructor(){super(...arguments);h(this,"schema",Za)}async afterUpdate(t){var s,a;if(this.deleted)return;const{internal:r}=this;r.xTelem=await H(t,this.state.x,r.xTelem),r.yTelem=await H(t,this.state.y,r.yTelem),r.instrumentation=De(t,"line"),r.ctx=hn.use(t),r.requestRender=N.useRequest(t),(s=r.stopListeningXTelem)==null||s.call(r),(a=r.stopListeningYTelem)==null||a.call(r),r.stopListeningXTelem=r.xTelem.onChange(()=>r.requestRender(Gn)),r.stopListeningYTelem=r.yTelem.onChange(()=>r.requestRender(Gn)),r.requestRender(K)}async afterDelete(){var r,s,a,i;const{internal:t}=this;await((s=(r=t.xTelem).cleanup)==null?void 0:s.call(r)),await((i=(a=t.yTelem).cleanup)==null?void 0:i.call(a)),t.requestRender(K)}async xBounds(){return(await this.internal.xTelem.value())[0]}async yBounds(){return(await this.internal.yTelem.value())[0]}async findByXValue(t,r){const{xTelem:s,yTelem:a}=this.internal,[,i]=await s.value();let[o,c]=[-1,-1];i.find((M,D)=>{const P=M.binarySearch(r),z=P>=0&&P<M.length;return z&&([o,c]=[P,D]),z});const{key:u}=this,{color:f,label:g}=this.state,m={key:u,color:f,label:g,position:{x:0,y:0},value:{x:NaN,y:NaN}};if(o===-1||c===-1)return m;const w=i[c];m.value.x=Nc(c,o,i);const[,b]=await a.value(),v=b.find(M=>l.H.contains(M.alignmentBounds,w.alignment+BigInt(o)));if(v==null)return m;const S=Number(v.alignment-w.alignment);return m.value.y=Number(v.at(o-S)),m.position={x:t.dataToDecimalScale.x.pos(m.value.x),y:t.dataToDecimalScale.y.pos(m.value.y)},m}async render(t){if(this.deleted)return;const{downsample:r}=this.state,{xTelem:s,yTelem:a,ctx:i}=this.internal,{dataToDecimalScale:o,exposure:c}=t,[[,u],[,f]]=await Promise.all([s.value(),a.value()]);if(u.forEach(S=>S.updateGLBuffer(i.gl)),f.forEach(S=>S.updateGLBuffer(i.gl)),u.length===0||f.length===0)return;const g=i.getProgram(f[0].dataType),m=jc(u,f,c,r,Ic);this.internal.instrumentation.L.debug("render",()=>({key:this.key,downsample:r,scale:o.transform,props:t.region,ops:Wc(m)}));const w=g.setAsActive(),b=g.bindState(this.state),v=g.renderCtx.scaleRegion(t.region).transform;m.forEach(S=>{const M=Hc(o,S).transform;g.bindScale(M,v),g.draw(S,b,u[0].dataType,f[0].dataType)}),w()}}h(Te,"TYPE","line");const Uc=5e3,Bc=(e,n)=>Fc(_c(e),n).map((t,r)=>Math.floor(r/Gc)*(1/(Uc*e))*t),Gc=5,_c=e=>new Float32Array([0,0,0,e,0,-e,1,0,-1,0]),Fc=(e,n)=>{const t=new Float32Array(e.length*n);for(let r=0;r<n;r++)t.set(e,r*e.length);return t},Hc=(e,n)=>e.translate(e.x.dim(Number(n.x.sampleOffset)),e.y.dim(Number(n.y.sampleOffset))),qc={[Te.TYPE]:Te},jc=(e,n,t,r,s)=>{if(e.length===0||n.length===0)return[];const a=[];return e.forEach(i=>n.forEach(o=>{if(!Vc(i,o,s))return;let c=0,u=0;i.alignment<o.alignment?c=Number(o.alignment-i.alignment):o.alignment<i.alignment&&(u=Number(i.alignment-o.alignment));const f=Math.min(i.length-c,o.length-u);if(f===0)return;const g=l.Y(Math.round(t*4*f),r,51);a.push({x:i,y:o,xOffset:c,yOffset:u,count:f,downsample:g})})),a},Wc=e=>e.map(n=>({...n,x:n.x.digest,y:n.y.digest})),Vc=(e,n,t)=>{if(!(e._timeRange!=null&&n._timeRange!=null))throw new d.xe(`Encountered series without time range in buildDrawOperations. X series present: ${e._timeRange!=null}, Y series present: ${n._timeRange!=null}`);const s=e.timeRange.overlapsWith(n.timeRange,t),a=l.H.overlapsWith(e.alignmentBounds,n.alignmentBounds);return s&&a};class qt{constructor(n,t){h(this,"canvas");h(this,"theme");this.canvas=n,this.theme=t}rule({direction:n,region:t,position:r,...s}){return n==="x"?this.line({start:l.G.construct(l.Tt.left(t),r),end:l.G.construct(l.Tt.right(t),r),...s}):this.line({start:l.G.construct(r,l.Tt.top(t)),end:l.G.construct(r,l.Tt.bottom(t)),...s})}line({stroke:n,lineWidth:t,lineDash:r,start:s,end:a}){const i=this.canvas;i.strokeStyle=n.hex,i.lineWidth=t,i.setLineDash([r]),i.beginPath(),i.moveTo(...l.G.couple(s)),i.lineTo(...l.G.couple(a)),i.stroke()}circle({fill:n,radius:t,position:r}){const s=this.canvas;s.fillStyle=n.hex,s.beginPath(),s.arc(...l.G.couple(r),t,0,2*Math.PI),s.fill()}resolveColor(n,t){return n==null?this.resolveColor(t):typeof n=="function"?n(this.theme):new l.Color(n)}border({region:n,color:t,width:r,radius:s,location:a}){const i=this.canvas;i.strokeStyle=this.resolveColor(t,this.theme.colors.border).hex,i.lineWidth=r??this.theme.sizes.border.width,s??(s=this.theme.sizes.border.radius),a==null||a===!0?s>0?(i.roundRect(...l.G.couple(l.Tt.topLeft(n)),...l.G.couple(l.Tt.dims(n)),s),i.stroke()):(i.rect(...l.G.couple(l.Tt.topLeft(n)),...l.G.couple(l.Tt.dims(n))),i.stroke()):d.A(a).forEach(o=>{const[c,u]=l.Tt.edgePoints(n,o);i.beginPath(),i.moveTo(...l.G.couple(c)),i.lineTo(...l.G.couple(u)),i.stroke()})}container({region:n,bordered:t=!0,rounded:r=!0,borderColor:s,borderRadius:a,borderWidth:i,backgroundColor:o}){a??(a=this.theme.sizes.border.radius),i??(i=1);const c=this.canvas;c.fillStyle=this.resolveColor(o,this.theme.colors.gray.l1).hex,c.strokeStyle=this.resolveColor(s,this.theme.colors.border).hex,c.setLineDash([]),c.lineWidth=1,c.beginPath(),r?c.roundRect(...l.G.couple(l.Tt.topLeft(n)),...l.G.couple(l.Tt.dims(n)),a):c.rect(...l.G.couple(l.Tt.topLeft(n)),...l.G.couple(l.Tt.dims(n))),c.fill(),t&&this.border({region:n,color:s,radius:a,width:i,location:t})}textContainer(n){const[t,r]=this.spacedTextDrawF(n);t.width+=12,t.height+=12;const{root:s=l.K.TOP_LEFT,offset:a=l.G.ZERO}=n,i={...n.position};s.x==="right"?i.x-=t.width+a.x:i.x+=a.x,s.y==="bottom"?i.y-=t.height+a.y:i.y+=a.y,this.container({region:l.Tt.construct(i,t.width,t.height),...n}),this.canvas.filter="none",r(l.G.translate(i,[6,6]))}spacedTextDrawF({text:n,direction:t,spacing:r=1,level:s="p"}){const a=d.fontString(this.theme,{level:s}),i=n.map(u=>d.dimensions(u,a,this.canvas)),o=this.theme.sizes.base*r,c=Math.max(...i.map(u=>u[l.g.dimension(t)]))+o;return[{[l.g.dimension(l.g.swap(t))]:Math.max(...i.map(u=>u[l.g.dimension(l.g.swap(t))])),[l.g.dimension(t)]:c*n.length-o},u=>{const f=d.fontString(this.theme,{level:s});this.canvas.font=f,this.canvas.fillStyle=this.theme.colors.text.hex,this.canvas.textBaseline="top",n.forEach((g,m)=>{this.canvas.fillText(g,u.x,u.y+c*m)})}]}drawTextInCenter({box:n,text:t,level:r}){const s=d.dimensions(t,this.canvas.font,this.canvas),a=l.Tt.positionInCenter(l.Tt.construct(l.G.ZERO,s),n);return this.text({text:t,position:l.Tt.topLeft(a),level:r})}text({text:n,position:t,level:r="p",weight:s,shade:a,maxWidth:i,code:o}){this.canvas.font=d.fontString(this.theme,{level:r,weight:s,code:o}),a==null?this.canvas.fillStyle=this.theme.colors.text.hex:this.canvas.fillStyle=this.theme.colors.gray[`l${a}`].hex,this.canvas.textBaseline="top";let c;i!=null&&(c=this.canvas.scissor(l.Tt.construct(t,i,1e3))),this.canvas.fillText(n,t.x,t.y),c==null||c()}}const Lr=p.z.object({position:p.z.number().optional(),pixelPosition:p.z.number().optional(),dragging:p.z.boolean(),lineWidth:p.z.number().optional().default(1),lineDash:p.z.number().optional().default(20),color:l.Color.z}),Xc=3;class Ut extends d.Leaf{constructor(){super(...arguments);h(this,"schema",Lr);h(this,"lastUpdateRef",null)}async afterUpdate(t){this.internal.renderCtx=d.Context.use(t);const r=d.use(t);this.internal.draw=new qt(this.internal.renderCtx.upper2d,r),N.requestRender(t,et)}async afterDelete(t){N.requestRender(t,et)}updatePositions({decimalToDataScale:t,plot:r}){const s=this.state.dragging,a=this.prevState.dragging&&!s;if((s||a)&&this.state.pixelPosition!=null){if(this.lastUpdateRef??(this.lastUpdateRef=this.state.pixelPosition),Math.abs(this.state.pixelPosition-this.lastUpdateRef)<Xc&&!a)return this.state.pixelPosition;this.lastUpdateRef=this.state.pixelPosition;const c=t.pos(this.state.pixelPosition/l.Tt.height(r));return this.setState(u=>({...u,position:c})),this.state.pixelPosition}if(this.state.position==null){const o=t.pos(.5);this.setState(c=>({...c,position:o}))}const i=t.reverse().pos(this.state.position)*l.Tt.height(r);if(!isNaN(i)){if(this.state.pixelPosition!=null&&Math.abs(i-this.state.pixelPosition)<1)return this.state.pixelPosition;this.setState(o=>({...o,pixelPosition:i}))}return i}async render(t){if(this.deleted)return;const{renderCtx:r}=this.internal,{location:s,plot:a}=t,i=l.K.direction(s),{upper2d:o}=r,c=this.internal.draw,u=this.updatePositions(t)+l.Tt.top(t.plot);c.rule({stroke:this.state.color,lineWidth:this.state.lineWidth,lineDash:this.state.lineDash,direction:i,region:a,position:u}),o.fillStyle=this.state.color.hex,o.lineJoin="round",o.lineWidth=3.5,o.lineCap="round",o.beginPath();const f=4;if(s==="left"){const g=l.Tt.left(a)-1;o.moveTo(g,u),o.lineTo(g-f,u-f),o.lineTo(g-f,u+f)}else s==="right"&&(o.moveTo(l.Tt.right(a),u),o.lineTo(l.Tt.right(a)+f,u-f),o.lineTo(l.Tt.right(a)+f,u+f));o.closePath(),o.stroke()}}h(Ut,"TYPE","Rule");const Na={[Ut.TYPE]:Ut},Kc=Object.freeze(Object.defineProperty({__proto__:null,REGISTRY:Na,Rule:Ut,ruleStateZ:Lr},Symbol.toStringTag,{value:"Module"})),Qc=Ae.extend({location:l.K.x.optional().default("left")}),ms=2,Jc=e=>l.Tt.signedWidth(e)<ms||l.Tt.signedHeight(e)<ms;class be extends Oa{constructor(){super(...arguments);h(this,"schema",Ae)}async xBounds(){return l.H.max((await Promise.all(this.lines.map(async t=>await t.xBounds()))).filter(t=>l.H.isFinite(t)))}async render(t){if(this.deleted)return;const[r,s]=await this.dataToDecimalScale(t.hold,this.dataBounds.bind(this),t.viewport),a=r.invert().reverse();if(this.renderAxis(t,a),await this.renderLines(t,r),await this.renderRules(t,a),s!=null)throw s}async renderLines({xDataToDecimalScale:t,plot:r,canvases:s,exposure:a},i){if(!s.includes("gl")||Jc(r))return;const o={region:r,dataToDecimalScale:new l.b.XY(t,i),exposure:a};await Promise.all(this.lines.map(async c=>await c.render(o)))}async renderRules({container:t,plot:r,canvases:s},a){if(!s.includes("upper2d"))return;const{location:i}=this.state,{render:o}=this.internal,c=l.Tt.construct(l.Tt.left(t),l.Tt.top(r),l.Tt.width(t),l.Tt.height(r)),u=o.scissor(c,l.G.ZERO,["upper2d"]),f={container:t,plot:r,decimalToDataScale:a,location:i};await Promise.all(this.rules.map(async g=>await g.render(f))),u()}async findByXValue({xDataToDecimalScale:t,plot:r,viewport:s,hold:a,exposure:i},o){const[c,u]=await this.dataToDecimalScale(a,this.dataBounds.bind(this),s);if(u!=null)throw u;const f=new l.b.XY(t,c),g={region:r,dataToDecimalScale:f,exposure:i};return(await Promise.all(this.lines.map(async m=>await m.findByXValue(g,o)))).map(m=>({...m,units:this.state.label}))}async dataBounds(){return await Promise.all(this.lines.map(async t=>await t.yBounds()))}get lines(){return this.childrenOfType(Te.TYPE)}get rules(){return this.childrenOfType(Ut.TYPE)}}h(be,"TYPE","YAxis");const Ia=p.z.object({start:d.m.z,end:d.m.z});class dn extends d.Leaf{constructor(){super(...arguments);h(this,"schema",Ia)}async afterUpdate(t){this.internal.render=d.Context.use(t),this.internal.draw=new qt(this.internal.render.upper2d,d.use(t))}async render(){}}h(dn,"TYPE","range-annotation");const tu=p.z.object({region:l.Tt.box,clearOverScan:l.G.crudeZ.optional().default(0),visible:p.z.boolean().optional().default(!0)}),Un=["upper2d","lower2d"],Ct=class Ct extends d.Composite{constructor(){super(...arguments);h(this,"schema",Ct.stateZ)}async afterUpdate(t){const{internal:r}=this;r.renderCtx=d.Context.use(t),r.handleException=d.useExceptionHandler(t),N.control(t,()=>this.requestRender("low")),this.requestRender("high")}async afterDelete(){this.requestRender("high")}async render(){if(this.deleted)return;const t=l.Tt.copy(this.state.region);if(!this.state.visible)return async()=>this.internal.renderCtx.erase(this.state.region,this.state.clearOverScan,...Un);const{renderCtx:r,handleException:s}=this.internal,a=l.b.XY.translate(l.Tt.topLeft(this.state.region)),i=r.scissor(this.state.region,l.G.construct(this.state.clearOverScan),Un);try{for(const o of this.children)await o.render({viewportScale:a})}catch(o){s(o,"Failed to render table")}finally{i()}return async()=>{this.internal.renderCtx.erase(t,this.state.clearOverScan)}}requestRender(t){const{renderCtx:r}=this.internal;r.loop.set({key:`${Ct.TYPE}-${this.key}`,render:this.render.bind(this),priority:t,canvases:Un})}};h(Ct,"TYPE","Table"),h(Ct,"stateZ",tu);let xe=Ct;const eu={[xe.TYPE]:xe},$a=p.z.object({triggered:p.z.boolean(),status:d.specZ$1,sink:En.optional().default(vn),source:ar.optional().default(nr)});class fn extends d.Leaf{constructor(){super(...arguments);h(this,"schema",$a)}async afterUpdate(t){var a,i,o;const{sink:r,source:s}=this.state;this.internal.source=await H(t,s,this.internal.source),this.internal.sink=await ze(t,r,this.internal.sink),this.state.triggered&&!this.prevState.triggered&&await this.internal.sink.set(((a=this.state.status.data)==null?void 0:a.authority)!==d.kp.Absolute.valueOf()),await this.updateEnabledState(),(o=(i=this.internal).stopListening)==null||o.call(i),this.internal.stopListening=this.internal.source.onChange(()=>{this.updateEnabledState()})}async updateEnabledState(){const t=await this.internal.source.value();d._.equal(t,this.state.status)||this.setState(r=>({...r,status:t,triggered:!1}))}async afterDelete(){var t,r,s,a;this.internal.stopListening(),await((r=(t=this.internal.source).cleanup)==null?void 0:r.call(t)),await((a=(s=this.internal.sink).cleanup)==null?void 0:a.call(s))}render(){}}h(fn,"TYPE","Chip");const Ua=p.z.object({}),ys="control-state-provider",Ba=d.rp.stateZ.extend({subjectColor:l.Color.z});class Bt extends d.Composite{constructor(){super(...arguments);h(this,"schema",Ua);h(this,"colors",new Map);h(this,"tracker");h(this,"disconnectTrackerChange");h(this,"obs",new Qn.Observer)}static use(t){return t.get(ys)}async afterUpdate(t){const{internal:r}=this;r.instrumentation=De(t,"control-state");const s=d.use(t);r.palette=s.colors.visualization.palettes.default,r.defaultColor=s.colors.gray.l6;const a=Me(t);r.client!=null&&a===r.client||(r.client=a,t.set(ys,this),await this.maybeCloseTracker(),r.client!=null&&(this.internal.instrumentation.L.debug("starting state tracker"),await this.openTracker(r.client)))}async maybeCloseTracker(){var t;this.tracker!=null&&(this.internal.instrumentation.L.debug("stopping state tracker"),(t=this.disconnectTrackerChange)==null||t.call(this),await this.tracker.close(),this.tracker=void 0)}async afterDelete(){await this.maybeCloseTracker()}onChange(t){return this.obs.onChange(t)}get(t){return Array.isArray(t)?d.c.unique(t).map(r=>this.getOne(r)).filter(r=>r!=null):this.getOne(t)}getOne(t){if(this.tracker==null)return;const r=this.tracker.states.get(t);if(r!=null)return{...r,subjectColor:this.colors.get(r.subject.key)??this.internal.defaultColor}}async openTracker(t){var a;const{internal:r}=this,{instrumentation:s}=r;try{this.tracker=await t.control.openStateTracker()}catch{s.L.error("failed to open state tracker");return}(a=this.disconnectTrackerChange)==null||a.call(this),this.disconnectTrackerChange=this.tracker.onChange(i=>{if(s.L.debug("transfer",{transfers:i.map(o=>d.rp.transferString(o))}),this.tracker==null)throw new d.xe("tracker is null inside it's own onChange callback!");this.updateColors(this.tracker),this.obs.notify(i)})}updateColors(t){const r=t.subjects(),s=r.map(o=>o.key),a=Array.from(this.colors.values());this.colors.forEach((o,c)=>!s.includes(c)&&this.colors.delete(c));const{palette:i}=this.internal;r.forEach(o=>{if(this.colors.has(o.key))return;const c=i.find(u=>!a.includes(u))??i[0];this.colors.set(o.key,c),a.push(c)})}}h(Bt,"TYPE","StateProvider");const Ga=["acquired","released","overridden","failed"],_a=p.z.enum(Ga),Fa=p.z.object({name:p.z.string(),authority:p.z.number().default(0),acquireTrigger:p.z.number(),status:_a.optional(),needsControlOf:d.Fg.keyZ.array().optional().default([])});class pn extends d.Composite{constructor(){super(...arguments);h(this,"schema",Fa);h(this,"registry",new Map);h(this,"writer")}async afterUpdate(t){const{internal:r}=this;r.instrumentation=De(t),(r.prevTrigger==null||Math.abs(this.state.acquireTrigger-r.prevTrigger)>1)&&(r.prevTrigger=this.state.acquireTrigger);const s=Me(t),a=Bt.use(t);r.client=s,r.client==null&&await this.release(),r.stateProv=a,r.telemCtx=sa(t,this,r.telemCtx),r.addStatus=d.useAggregator(t),this.state.acquireTrigger>r.prevTrigger?await this.acquire():this.state.acquireTrigger<r.prevTrigger&&await this.release()}async afterDelete(){await this.release()}async updateNeedsControlOf(){const{client:t}=this.internal;if(t==null)return;const r=new Set([]);for(const a of this.registry.keys())(await a.needsControlOf(t)).forEach(o=>o!==0&&r.add(o));const s=Array.from(r);d.F.unorderedPrimitiveArrays(this.state.needsControlOf,s)!==d.F.EQUAL&&this.setState(a=>({...a,needsControlOf:s}))}async acquire(){this.internal.prevTrigger=this.state.acquireTrigger;const{client:t,addStatus:r}=this.internal;if(t==null)return r({message:`Cannot acquire control on ${this.state.name} because no cluster has been connected.`,variant:"warning"});try{await this.updateNeedsControlOf();const s=this.state.needsControlOf;if(s.length===0)return r({message:`Cannot acquire control on ${this.state.name} because there are no channels to control.`,variant:"warning"});const a=d.k.now().sub(d.w.milliseconds(1));this.writer=await t.openWriter({start:a,channels:s,controlSubject:{key:this.key,name:this.state.name},authorities:this.state.authority,enableAutoCommit:!0}),this.setState(i=>({...i,status:"acquired"}))}catch(s){if(this.setState(a=>({...a,status:"failed"})),!(s instanceof Error))throw s;r({variant:"error",message:`${this.state.name} failed to acquire control`,description:s.message})}}async release(){var t;this.internal.prevTrigger=this.state.acquireTrigger;try{await((t=this.writer)==null?void 0:t.close())}catch(r){this.internal.addStatus({message:`${this.state.name} failed to release control: ${r.message}`,variant:"error"})}finally{this.setState(r=>({...r,status:"released"})),this.writer=void 0}}async set(t){var r;this.writer==null&&await this.acquire(),await((r=this.writer)==null?void 0:r.write(t))}async setAuthority(t,r){var s;this.writer==null&&await this.acquire(),await((s=this.writer)==null?void 0:s.setAuthority(Object.fromEntries(t.map(a=>[a,r]))))}async releaseAuthority(t){var r;this.writer==null&&await this.acquire(),await((r=this.writer)==null?void 0:r.setAuthority(Object.fromEntries(t.map(s=>[s,this.state.authority]))))}deleteTelem(t){this.registry.delete(t),this.updateNeedsControlOf()}create(t){const s=(()=>{switch(t.type){case ve.TYPE:{const a=new ve(this,t.props);return this.registry.set(a,null),a}case Ce.TYPE:{const a=new Ce(this,this.internal.stateProv,t.props);return this.registry.set(a,null),a}case Se.TYPE:return new Se(this,t.props);default:return null}})();return s!=null&&this.updateNeedsControlOf(),s}}h(pn,"TYPE","Controller");const Ha=p.z.object({channel:p.z.number()});class ve extends kn{constructor(t,r){super(r);h(this,"controller");h(this,"schema",Ha);this.controller=t}invalidate(){}async cleanup(){this.controller.deleteTelem(this)}async needsControlOf(t){if(this.props.channel===0)return[];const r=await t.channels.retrieve(this.props.channel),s=[r.key];return r.index!==0&&s.push(r.index),s}async set(t){const{client:r}=this.controller.internal;if(r==null)return;const s=await r.channels.retrieve(this.props.channel),a={[s.key]:t};if(s.index!==0){const i=await r.channels.retrieve(s.index);a[i.key]=d.k.now()}await this.controller.set(a)}}h(ve,"TYPE","controlled-numeric-telem-sink");const nu=e=>({type:ve.TYPE,props:e,variant:"sink",valueType:"number"}),qa=p.z.object({authority:p.z.number().default(d.rp.Authority.Absolute.valueOf()),channel:p.z.number()});class Se extends kn{constructor(t,r){super(r);h(this,"controller");h(this,"schema",qa);this.controller=t}async cleanup(){this.controller.deleteTelem(this)}async needsControlOf(t){const r=await t.channels.retrieve(this.props.channel),s=[r.key];return r.index!==0&&s.push(r.index),s}async set(t){const{controller:r}=this,{client:s}=r.internal;if(s==null)return;const a=await s.channels.retrieve(this.props.channel),i=[a.key];a.index!==0&&i.push(a.index),t?await this.controller.setAuthority(i,this.props.authority):await this.controller.releaseAuthority(i)}}h(Se,"TYPE","acquire-channel-control");const ru=e=>({type:Se.TYPE,props:e,variant:"sink",valueType:"boolean"}),ja=p.z.object({channel:p.z.number()});class Ce extends _{constructor(t,r,s){super(s);h(this,"prov");h(this,"valid",!1);h(this,"stopListening");h(this,"controller");h(this,"schema",ja);this.prov=r,this.controller=t}async needsControlOf(){return[]}maybeRevalidate(){var s;if(this.valid)return;const{channel:t}=this.props;(s=this.stopListening)==null||s.call(this);const r=d.U.filterTransfersByChannelKey(t);this.stopListening=this.prov.onChange(a=>{var i;r(a).length!==0&&((i=this.notify)==null||i.call(this))}),this.valid=!0}async value(){this.maybeRevalidate();const t=d.k.now();if(this.props.channel===0)return{key:this.controller.key,variant:"disabled",message:"No Channel",time:t,data:{valid:!1,authority:0}};const r=this.prov.get(this.props.channel);return r==null?{key:this.controller.key,variant:"disabled",message:"Uncontrolled",time:t,data:{valid:!0,color:void 0,authority:0}}:{key:r.subject.key,variant:r.subject.key===this.controller.key?"success":"error",message:`Controlled by ${r.subject.name}`,time:t,data:{valid:!0,color:r.subjectColor,authority:r.authority}}}async cleanup(){var t;this.controller.deleteTelem(this),(t=this.stopListening)==null||t.call(this)}}h(Ce,"TYPE","controlled-status-source");const su=e=>({type:Ce.TYPE,props:e,variant:"source",valueType:"status"}),Wa=p.z.object({statusSource:ar.optional().default(nr),colorSource:sr.optional().default(Sn),status:d.specZ$1,color:l.Color.z.optional()});class gn extends d.Leaf{constructor(){super(...arguments);h(this,"schema",Wa);h(this,"stopListeningStatus");h(this,"stopListeningColor")}async afterUpdate(t){var i,o;const{internal:r}=this,{statusSource:s,colorSource:a}=this.state;r.statusSource=await H(t,s,r.statusSource),r.colorSource=await H(t,a,r.colorSource),await this.updateState(),(i=this.stopListeningStatus)==null||i.call(this),this.stopListeningStatus=r.statusSource.onChange(()=>{this.updateState()}),(o=this.stopListeningColor)==null||o.call(this),this.stopListeningColor=r.colorSource.onChange(()=>{this.updateState()})}async afterDelete(){var t,r,s,a;await((r=(t=this.internal.statusSource).cleanup)==null?void 0:r.call(t)),await((a=(s=this.internal.colorSource).cleanup)==null?void 0:a.call(s))}async render(){}async updateState(){const t=await this.internal.colorSource.value(),r=await this.internal.statusSource.value();t.equals(this.state.color)&&r.message===this.state.status.message||this.setState(s=>({...s,color:t,status:r}))}}h(gn,"TYPE","Indicator");const Va=p.z.object({needsControlOf:d.Fg.keyZ.array(),states:Ba.array()});class mn extends d.Leaf{constructor(){super(...arguments);h(this,"schema",Va)}async afterUpdate(t){var o;const{internal:r}=this;r.stateProv=Bt.use(t);const s=this.state.needsControlOf;(o=r.disconnectStateProv)==null||o.call(r);const a=d.U.filterTransfersByChannelKey(...s),i=r.stateProv.get(s);this.setState(c=>({...c,states:i})),r.disconnectStateProv=r.stateProv.onChange(c=>{if(a(c).length===0)return;const u=r.stateProv.get(s);this.setState(f=>({...f,states:u}))})}async afterDelete(){var r;const{internal:t}=this;(r=t.disconnectStateProv)==null||r.call(t)}async render(){}}h(mn,"TYPE","Legend");const au={[pn.TYPE]:pn,[Bt.TYPE]:Bt,[gn.TYPE]:gn,[fn.TYPE]:fn,[mn.TYPE]:mn},Xa=p.z.object({trigger:p.z.number(),sink:En.optional().default(vn)});class yn extends d.Leaf{constructor(){super(...arguments);h(this,"schema",Xa)}async afterUpdate(t){var a;const{sink:r}=this.state;(a=this.internal).prevTrigger??(a.prevTrigger=this.state.trigger),this.internal.sink=await ze(t,r,this.internal.sink);const s=this.internal.prevTrigger;this.internal.prevTrigger=this.state.trigger,!(this.state.trigger<=s)&&await this.internal.sink.set(!0)}render(){}async afterDelete(){await this.internalAfterDelete()}async internalAfterDelete(){var r,s;const{internal:t}=this;await((s=(r=t.sink).cleanup)==null?void 0:s.call(r))}}h(yn,"TYPE","Button");const iu={[yn.TYPE]:yn},Or=p.z.object({dpr:p.z.number(),region:l.Tt.box,bootstrap:p.z.boolean().optional().default(!1),bootstrapped:p.z.boolean().optional().default(!1),glCanvas:p.z.any().optional(),upper2dCanvas:p.z.any().optional(),lower2dCanvas:p.z.any().optional(),os:d.S.osZ});class Ee extends d.Composite{constructor(){super(...arguments);h(this,"schema",Or);h(this,"renderCtx",null)}async afterUpdate(t){if(this.renderCtx==null){if(!this.state.bootstrap)return;const{glCanvas:r,lower2dCanvas:s,upper2dCanvas:a,os:i}=this.state;if(r==null||s==null||a==null)throw new d.xe("[vis.worker.Canvas] - expected render context bootstrap to include all canvases");this.renderCtx=d.Context.create(t,r,s,a,i),hn.create(t,this.renderCtx),this.setState(o=>({...o,bootstrap:!1,bootstrapped:!0,glCanvas:void 0,lower2dCanvas:void 0,upper2dCanvas:void 0}))}else this.renderCtx.update(t);this.renderCtx.resize(this.state.region,this.state.dpr)}}h(Ee,"TYPE","Canvas");const Ka={[Ee.TYPE]:Ee},ou=Object.freeze(Object.defineProperty({__proto__:null,Canvas:Ee,REGISTRY:Ka,canvasStateZ:Or},Symbol.toStringTag,{value:"Module"})),Ar=p.z.object({position:l.G.xy,zoom:p.z.number(),region:l.Tt.box,clearOverScan:l.G.crudeZ.optional().default(10),visible:p.z.boolean().optional().default(!0)}),Be=["upper2d","lower2d"],Et=class Et extends d.Composite{constructor(){super(...arguments);h(this,"schema",Et.stateZ)}async afterUpdate(t){this.internal.renderCtx=d.Context.use(t),this.internal.addStatus=d.useAggregator(t),N.control(t,()=>this.requestRender("low")),this.requestRender("high")}async afterDelete(){this.requestRender("high")}async render(){if(this.deleted)return;const{renderCtx:t,addStatus:r}=this.internal,{zoom:s,position:a}=this.state,i=l.Tt.construct(this.state.region);if(!this.state.visible)return async()=>t.erase(i,this.state.clearOverScan,...Be);const o=t.scissor(i,l.G.ZERO,Be),c=l.b.XY.magnify(l.G.construct(s)).translate(l.Tt.topLeft(i)).translate(a);try{await Promise.all(this.children.map(async f=>await f.render({viewportScale:c})))}catch(f){if(!(f instanceof Error))throw f;r({variant:"error",message:"Failed to render diagram",description:f.message})}finally{o()}const u=l.Tt.copy(this.state.region);return async()=>{this.internal.renderCtx.erase(u,this.state.clearOverScan,...Be)}}requestRender(t){const{renderCtx:r}=this.internal;r.loop.set({key:`${Et.TYPE}-${this.key}`,render:this.render.bind(this),priority:t,canvases:Be})}};h(Et,"TYPE","Diagram"),h(Et,"stateZ",Ar);let Gt=Et;const Qa={[Gt.TYPE]:Gt},lu=Object.freeze(Object.defineProperty({__proto__:null,Diagram:Gt,REGISTRY:Qa,diagramStateZ:Ar},Symbol.toStringTag,{value:"Module"})),Ja=p.z.object({enabled:p.z.boolean(),source:rr.optional().default(er)});class wn extends d.Leaf{constructor(){super(...arguments);h(this,"schema",Ja)}async afterUpdate(t){var a;this.internal.addStatus=d.useOptionalAggregator(t);const{source:r}=this.state,{internal:s}=this;this.internal.source=await H(t,r,this.internal.source),await this.updateEnabledState(),(a=s.stopListening)==null||a.call(s),s.stopListening=s.source.onChange(()=>{this.updateEnabledState().catch(this.reportError.bind(this))})}reportError(t){this.internal.addStatus({key:this.key,variant:"error",message:`Failed to update Light: ${t.message}`})}async updateEnabledState(){const t=await this.internal.source.value();t!==this.state.enabled&&this.setState(r=>({...r,enabled:t}))}async afterDelete(){await this.internalAfterDelete()}async internalAfterDelete(){var t,r;this.internal.stopListening(),await((r=(t=this.internal.source).cleanup)==null?void 0:r.call(t))}async render(){}}h(wn,"TYPE","Light");const cu={[wn.TYPE]:wn},Zr=p.z.object({position:l.G.xy.or(p.z.null()),textColor:l.Color.z.optional().default(l.ZERO),backgroundColor:l.Color.z.optional().default(l.ZERO),borderColor:l.Color.z.optional().default(l.ZERO),ruleColor:l.Color.z.optional().default(l.ZERO),ruleStrokeWidth:p.z.number().optional().default(1),ruleStrokeDash:p.z.number().default(0)});class _t extends d.Leaf{constructor(){super(...arguments);h(this,"schema",Zr)}async afterUpdate(t){const r=d.use(t);this.state.textColor.isZero&&(this.state.textColor=r.colors.text),this.state.backgroundColor.isZero&&(this.state.backgroundColor=r.colors.gray.l1),this.state.borderColor.isZero&&(this.state.borderColor=r.colors.border),this.state.ruleColor.isZero&&(this.state.ruleColor=r.colors.gray.l5),this.internal.dotColor=r.colors.text,this.internal.dotColorContrast=r.colors.textInverted,this.internal.render=d.Context.use(t),this.internal.draw=new qt(this.internal.render.upper2d,r),N.requestRender(t,et)}async afterDelete(t){N.requestRender(t,et)}async render(t){if(this.deleted||this.state.position==null)return;const{region:r}=t,s=l.b.XY.scale(l.Tt.DECIMAL).scale(r),a=l.b.XY.scale(r).scale(l.Tt.DECIMAL),i=await t.findByXDecimal(a.x.pos(this.state.position.x)),o=i.filter(b=>l.G.isFinite(b.value)),{draw:c}=this.internal,u=o.reduce((b,v)=>b+v.position.x,0)/o.length,f=new d.m(o.reduce((b,v)=>b+v.value.x,0)/o.length),g=s.x.pos(u);if(!l.H.contains(l.Tt.xBounds(r),g))return;c.rule({stroke:this.state.ruleColor,lineWidth:this.state.ruleStrokeWidth,lineDash:this.state.ruleStrokeDash,direction:"y",region:r,position:g}),o.forEach(b=>{const v=s.pos(b.position);c.circle({fill:b.color.setAlpha(.5),radius:8,position:v}),c.circle({fill:b.color.setAlpha(.8),radius:5,position:v}),c.circle({fill:b.color.pickByContrast(this.internal.dotColor,this.internal.dotColorContrast),radius:2,position:v})});const m=i.map(b=>`${b.label??""}: ${b.value.y.toFixed(2)}`);m.unshift(`Time: ${f.fString("preciseDate","local")}`);const w=a.pos(this.state.position);c.textContainer({text:m,backgroundColor:this.state.backgroundColor,borderColor:this.state.borderColor,position:this.state.position,direction:"y",level:"small",spacing:.5,offset:{x:12,y:12},root:{x:w.x>.8?"right":"left",y:w.y>.8?"top":"bottom"}})}}h(_t,"TYPE","tooltip");const ti={[_t.TYPE]:_t},uu=Object.freeze(Object.defineProperty({__proto__:null,REGISTRY:ti,Tooltip:_t,tooltipStateZ:Zr},Symbol.toStringTag,{value:"Module"})),ei=p.z.object({region:l.Tt.box,wheelPos:p.z.number(),scrolling:p.z.boolean(),empty:p.z.boolean(),visible:p.z.boolean(),telem:Je.optional().default(Ss),font:d.levelZ.optional().default("p"),color:l.Color.z.optional().default(l.ZERO),overshoot:l.G.xy.optional().default({x:0,y:0})}),hu=.98,Xt="lower2d",du={offset:0n,offsetRef:0n,scrollRef:0},ae=class ae extends d.Leaf{constructor(){super(...arguments);h(this,"schema",ae.z);h(this,"values",new d.Dt([]));h(this,"scrollState",du)}async afterUpdate(t){var f;const{internal:r}=this;r.render=d.Context.use(t),r.theme=d.use(t),this.state.color.isZero?this.internal.textColor=r.theme.colors.gray.l8:r.textColor=this.state.color,r.telem=await H(t,this.state.telem,r.telem);const s=d.useExceptionHandler(t),{scrolling:a,wheelPos:i}=this.state;if(this.state.scrolling&&!this.prevState.scrolling){const g=this.values.alignmentBounds.upper-1n;this.scrollState={offset:g,offsetRef:g,scrollRef:this.state.wheelPos}}else if(a){const{scrollState:g,values:m}=this,w=Math.ceil((i-this.scrollState.scrollRef)/this.lineHeight);g.offset=this.values.traverseAlignment(g.offsetRef,-BigInt(w)),g.offset<m.alignmentBounds.lower+BigInt(this.visibleLineCount)&&(g.offset=m.alignmentBounds.lower,this.setState(b=>({...b,wheelPos:this.prevState.wheelPos}))),g.offset>=m.alignmentBounds.upper&&this.setState(b=>({...b,scrolling:!1}))}const[c,u]=await this.internal.telem.value();this.values=new d.Dt(u),this.checkEmpty(),(f=r.stopListeningTelem)==null||f.call(r),r.stopListeningTelem=r.telem.onChange(()=>{this.internal.telem.value().then(([g,m])=>{this.checkEmpty(),this.values=new d.Dt(m),this.requestRender()}).catch(g=>s(g,"Failed to update log"))}),this.requestRender()}checkEmpty(){const t=this.values.length===0;t!==this.state.empty&&this.setState(r=>({...r,empty:t}))}async afterDelete(){var s;const{telem:t,render:r}=this.internal;await((s=t.cleanup)==null?void 0:s.call(t)),r.erase(l.Tt.construct(this.state.region),l.G.ZERO,Xt)}async requestRender(){const{render:t}=this.internal;await t.loop.set({key:`${this.type}-${this.key}`,render:async()=>await this.render(),priority:"high",canvases:[Xt]})}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((l.Tt.height(this.state.region)-12)/this.lineHeight),this.values.length)}async render(){const{render:t}=this.internal,r=this.state.region;if(l.Tt.areaIsZero(r))return;if(!this.state.visible)return async()=>t.erase(r,l.G.ZERO,Xt);let s;if(!this.state.scrolling)s=this.values.subIterator(this.values.length-this.visibleLineCount,this.values.length);else{const f=this.values.traverseAlignment(this.scrollState.offset,-BigInt(this.visibleLineCount));s=this.values.subAlignmentSpanIterator(f,this.visibleLineCount)}const a=this.state.region,i=t[Xt],o=new qt(i,this.internal.theme),c=t.scissor(a,l.G.ZERO,[Xt]);this.renderElements(o,s),this.renderScrollbar(o),c();const u=l.Tt.copy(this.state.region);return async({canvases:f})=>t.erase(u,this.state.overshoot,...f)}renderScrollbar(t){const r=this.state.region,s=l.Tt.height(r)/this.totalHeight*l.Tt.height(r);if(s>=l.Tt.height(r)*hu)return;let a=l.Tt.bottom(r)-s;this.state.scrolling&&(a-=Number(this.values.distance(this.values.alignmentBounds.upper,this.scrollState.offset))/this.values.length*l.Tt.height(r)),a<0&&(a=l.Tt.top(r)),t.container({region:l.Tt.construct({x:l.Tt.right(r)-6,y:a},{width:6,height:s}),bordered:!1,backgroundColor:i=>i.colors.gray.l4})}renderElements(t,r){const s=this.state.region;let a=0;for(const i of r){const o=this.values.dataType.equals(d.g.JSON)?JSON.stringify(i):i.toString();t.text({text:o,level:this.state.font,shade:9,position:l.G.translate(l.Tt.topLeft(s),{x:6,y:a*this.lineHeight+6}),code:!0}),a++}}};h(ae,"TYPE","log"),h(ae,"z",ei);let Pe=ae;const fu={[Pe.TYPE]:Pe},Nr=p.z.object({one:l.G.xy.nullable(),two:l.G.xy.nullable(),hover:l.G.xy.nullable(),color:p.z.union([l.Color.z,p.z.object({verticalLine:l.Color.z.optional().default(l.ZERO),horizontalLine:l.Color.z.optional().default(l.ZERO),obliqueLine:l.Color.z.optional().default(l.ZERO)})]).optional().default(l.ZERO),strokeWidth:p.z.number().optional().default(1),strokeDash:p.z.number().optional().default(2)});class Ft extends d.Leaf{constructor(){super(...arguments);h(this,"schema",Nr)}async afterUpdate(t){const r=d.Context.use(t);this.internal.theme=d.use(t),this.internal.renderCtx=r,this.internal.draw=new qt(r.upper2d,this.internal.theme),N.requestRender(t,et)}async afterDelete(t){N.requestRender(t,K)}get verticalLineColor(){return this.state.color instanceof l.Color?this.state.color.isZero?this.internal.theme.colors.gray.l6:this.state.color:this.state.color.verticalLine.isZero?this.internal.theme.colors.gray.l6:this.state.color.verticalLine}get horizontalLineColor(){return this.state.color instanceof l.Color?this.state.color.isZero?this.internal.theme.colors.gray.l6:this.state.color:this.state.color.horizontalLine.isZero?this.internal.theme.colors.gray.l6:this.state.color.horizontalLine}get obliqueLineColor(){return this.state.color instanceof l.Color?this.state.color.isZero?this.internal.theme.colors.gray.l6:this.state.color:this.state.color.obliqueLine.isZero?this.internal.theme.colors.gray.l6:this.state.color.obliqueLine}async find(t){const{one:r,two:s}=this.state;if(r==null||s==null)return null;const{one:a,two:i}=this.prevState,{dataOne:o,dataTwo:c}=this.internal;if(a!=null&&l.G.equals(r,a)&&i!=null&&l.G.equals(s,i)&&o!=null&&c!=null){const[S,M]=[await t.findByXValue(o.x),await t.findByXValue(c.x)];return S.length===0||M.length===0?null:[S.sort((D,P)=>l.G.distance(o,D.value)-l.G.distance(o,P.value))[0],M.sort((D,P)=>l.G.distance(c,D.value)-l.G.distance(c,P.value))[0]]}const u=l.b.XY.scale(t.region).scale(l.Tt.DECIMAL),[f,g]=[u.pos(r),u.pos(s)],[m,w]=[await t.findByXDecimal(f.x),await t.findByXDecimal(g.x)];if(m.length===0||w.length===0)return null;const[b,v]=[m.sort((S,M)=>l.G.distance(f,S.position)-l.G.distance(f,M.position))[0],w.sort((S,M)=>l.G.distance(g,S.position)-l.G.distance(g,M.position))[0]];return this.internal.dataOne=b.value,this.internal.dataTwo=v.value,[b,v]}async renderHover(t){if(this.state.hover==null)return;const r=this.state.hover,s=l.b.XY.scale(t.region).scale(l.Tt.DECIMAL),a=s.pos(r),i=await t.findByXDecimal(s.pos(r).x);if(i.length===0)return;const o=i.sort((u,f)=>l.G.distance(a,u.position)-l.G.distance(a,f.position))[0],{draw:c}=this.internal;c.circle({fill:o.color.setAlpha(.5),radius:9,position:s.reverse().pos(o.position)})}async render(t){if(this.deleted)return;await this.renderHover(t);const r=await this.find(t);if(r==null)return;const[s,a]=r,{draw:i}=this.internal,{strokeDash:o,strokeWidth:c}=this.state,u=l.b.XY.scale(l.Tt.DECIMAL).scale(t.region),f=u.pos(s.position),g=u.pos(a.position),m=new d.w(Math.abs(s.value.x-a.value.x)),w=Math.abs(s.value.y-a.value.y),b=w/m.seconds;i.line({start:l.G.construct(f.x,f.y),end:l.G.construct(f.x,g.y),stroke:this.verticalLineColor,lineDash:o,lineWidth:c}),i.textContainer({text:[`${w.toFixed(2)} ${s.units??""}`],direction:"x",position:l.G.construct(f.x,(f.y+g.y)/2),level:"small"}),i.line({start:l.G.construct(f.x,g.y),end:l.G.construct(g.x,g.y),stroke:this.horizontalLineColor,lineDash:o,lineWidth:c}),i.textContainer({text:[m.truncate(d.w.MILLISECOND).toString()],direction:"x",position:l.G.construct((f.x+g.x)/2,g.y),level:"small"}),i.line({start:l.G.construct(f.x,f.y),end:l.G.construct(g.x,g.y),stroke:this.obliqueLineColor,lineDash:o,lineWidth:c}),i.textContainer({text:[`${b.toFixed(2)} ${s.units??""} / S`],direction:"x",position:l.G.construct((f.x+g.x)/2,(f.y+g.y)/2),level:"small"}),i.circle({fill:s.color.setAlpha(.5),radius:8,position:f}),i.circle({fill:s.color.setAlpha(.8),radius:5,position:f}),i.circle({fill:new l.Color("#ffffff"),radius:2,position:f}),i.circle({fill:a.color.setAlpha(.5),radius:8,position:g}),i.circle({fill:a.color.setAlpha(.8),radius:5,position:g}),i.circle({fill:new l.Color("#ffffff"),radius:2,position:g})}}h(Ft,"TYPE","measure");const ni={[Ft.TYPE]:Ft},pu=Object.freeze(Object.defineProperty({__proto__:null,Measure:Ft,REGISTRY:ni,measureStateZ:Nr},Symbol.toStringTag,{value:"Module"})),ri=p.z.object({trigger:p.z.number(),command:p.z.number().optional(),value:p.z.number(),sink:Rs.optional().default(bs),source:ks.optional().default(xs)});class Tn extends d.Leaf{constructor(){super(...arguments);h(this,"schema",ri)}async afterUpdate(t){var u;this.internal.addStatus=d.useOptionalAggregator(t);const{sink:r,source:s,trigger:a,command:i}=this.state,{internal:o}=this;o.prevTrigger??(o.prevTrigger=a),this.internal.source=await H(t,s,this.internal.source),o.sink=await ze(t,r,o.sink);const c=o.prevTrigger;o.prevTrigger=a,a>c&&i!=null&&await this.internal.sink.set(i),await this.updateValue(),(u=o.stopListening)==null||u.call(o),o.stopListening=o.source.onChange(()=>{this.updateValue().catch(this.reportError.bind(this))})}reportError(t){this.internal.addStatus({key:this.key,variant:"error",message:`Failed to update Setpoint: ${t.message}`})}async updateValue(){const t=await this.internal.source.value();t!==this.state.value&&this.setState(r=>({...r,value:t,triggered:!1}))}async afterDelete(){var r,s,a,i;const{internal:t}=this;t.stopListening(),await((s=(r=t.source).cleanup)==null?void 0:s.call(r)),await((i=(a=t.sink).cleanup)==null?void 0:i.call(a))}async render(){}}h(Tn,"TYPE","Setpoint");const gu={[Tn.TYPE]:Tn},si=p.z.object({triggered:p.z.boolean(),enabled:p.z.boolean(),sink:En.optional().default(vn),source:rr.optional().default(er)});class bn extends d.Leaf{constructor(){super(...arguments);h(this,"schema",si)}async afterUpdate(t){var u;this.internal.addStatus=d.useOptionalAggregator(t);const{sink:r,source:s,triggered:a,enabled:i}=this.state,{triggered:o}=this.prevState,{internal:c}=this;c.source=await H(t,s,c.source),c.sink=await ze(t,r,c.sink),a&&!o&&await c.sink.set(!i),await this.updateEnabledState(),(u=c.stopListening)==null||u.call(c),c.stopListening=c.source.onChange(()=>{this.updateEnabledState().catch(this.reportError.bind(this))})}reportError(t){this.internal.addStatus({key:this.key,variant:"error",message:`Failed to update Toggle: ${t.message}`})}async updateEnabledState(){const t=await this.internal.source.value();t!==this.state.enabled&&this.setState(r=>({...r,enabled:t,triggered:!1}))}async afterDelete(){await this.internalAfterDelete()}async internalAfterDelete(){var t,r,s,a;this.internal.stopListening(),await((r=(t=this.internal.source).cleanup)==null?void 0:r.call(t)),await((a=(s=this.internal.sink).cleanup)==null?void 0:a.call(s))}async render(){}}h(bn,"TYPE","Toggle");const mu={[bn.TYPE]:bn},yu=p.z.object({box:l.Tt.box,telem:ir.optional().default(vs),backgroundTelem:sr.optional().default(Sn),level:d.levelZ.optional().default("p"),color:l.Color.z.optional().default(l.ZERO),precision:p.z.number().optional().default(2),minWidth:p.z.number().optional().default(60),width:p.z.number().optional(),notation:Gs.optional().default("standard"),location:l.K.xy.optional().default({x:"left",y:"center"})}),wu=["upper2d","lower2d"],ie=class ie extends d.Leaf{constructor(){super(...arguments);h(this,"schema",ie.z)}async afterUpdate(t){var s,a;const{internal:r}=this;r.renderCtx=d.Context.use(t),r.theme=d.use(t),this.state.color.isZero?this.internal.textColor=r.theme.colors.gray.l8:r.textColor=this.state.color,r.telem=await H(t,this.state.telem,r.telem),(s=r.stopListening)==null||s.call(r),r.stopListening=this.internal.telem.onChange(()=>this.requestRender()),r.backgroundTelem=await H(t,this.state.backgroundTelem,r.backgroundTelem),(a=r.stopListeningBackground)==null||a.call(r),r.stopListeningBackground=this.internal.backgroundTelem.onChange(()=>this.requestRender()),this.internal.requestRender=N.useOptionalRequest(t),this.requestRender()}async afterDelete(){var r,s,a,i,o,c;const{internal:t}=this;(r=t.stopListening)==null||r.call(t),(s=t.stopListeningBackground)==null||s.call(t),await((i=(a=t.telem).cleanup)==null?void 0:i.call(a)),await((c=(o=t.backgroundTelem).cleanup)==null?void 0:c.call(o)),t.requestRender==null?t.renderCtx.erase(l.Tt.construct(this.state.box),l.G.ZERO,...wu):t.requestRender(K)}requestRender(){const{requestRender:t}=this.internal;t!=null?t(K):this.render({})}get fontHeight(){const{theme:t}=this.internal;return t.typography[this.state.level].size*t.sizes.base}maybeUpdateWidth(t){const{theme:r}=this.internal,s=t+r.sizes.base+this.fontHeight;this.state.width==null||this.state.width+this.fontHeight*.5<s||this.state.minWidth>s&&this.state.width!==this.state.minWidth?this.setState(a=>({...a,width:Math.max(s,a.minWidth)})):this.state.width-this.fontHeight>s&&this.setState(a=>({...a,width:Math.max(s,a.minWidth)}))}async render({viewportScale:t=l.b.XY.IDENTITY}){const{renderCtx:r,telem:s,backgroundTelem:a}=this.internal,i=l.Tt.construct(this.state.box);if(l.Tt.areaIsZero(i))return;const{location:o}=this.state,c=r.lower2d.applyScale(t);let u=await s.value();const f=d.fontString(this.internal.theme,{level:this.state.level,code:!0});c.font=f;const g=this.fontHeight,m=u[0]=="-";m&&(u=u.slice(1));const{theme:w}=this.internal,b=d.dimensions(u,f,c).width+w.sizes.base;this.internal.requestRender==null&&r.erase(l.Tt.construct(this.prevState.box)),this.maybeUpdateWidth(b);const v={...l.G.ZERO};o.x==="left"&&(v.x=6+g*.75),o.x==="center"&&(v.x=l.Tt.width(i)/2-b/2),o.y==="center"&&(v.y=l.Tt.height(i)/2);const S=l.G.translate(l.Tt.topLeft(i),v),M=c.scissor(i,void 0);let D=!0;if(this.state.backgroundTelem.type!=Sn.type){const P=r.lower2d.applyScale(t),z=await a.value();D=z.isZero,z.isZero||(P.fillStyle=z.hex,P.rect(...l.G.couple(l.Tt.topLeft(i)),l.Tt.width(i),l.Tt.height(i)),P.fill(),c.fillStyle=z.pickByContrast(w.colors.gray.l0,w.colors.gray.l9).hex)}D&&(c.fillStyle=this.internal.textColor.hex),c.textBaseline="middle",m&&c.fillText("-",...l.G.couple(l.G.translateX(S,-g*.6))),c.fillText(u,...l.G.couple(S)),M()}};h(ie,"TYPE","value"),h(ie,"z",yu);let Ht=ie;const ai={[Ht.TYPE]:Ht},Tu=Object.freeze(Object.defineProperty({__proto__:null,REGISTRY:ai,Value:Ht},Symbol.toStringTag,{value:"Module"})),bu=d.mp.payloadZ.extend({viewport:l.H.bounds}),ws=e=>l.Color.z.safeParse(e).success,ii=p.z.object({cursor:l.G.xy.or(p.z.null()),hovered:bu.or(p.z.null()),count:p.z.number()});class ke extends d.Leaf{constructor(){super(...arguments);h(this,"schema",ii);h(this,"fetchedInitial",d.E.ZERO)}async afterUpdate(t){const{internal:r}=this;r.render=d.Context.use(t),r.draw=new qt(r.render.upper2d,d.use(t)),r.ranges??(r.ranges=new Map);const s=Me(t);s!=null&&(r.client=s,r.tracker==null&&(r.tracker=await r.client.ranges.openTracker(),r.tracker.onChange(a=>{a.forEach(i=>{i.variant==="delete"?r.ranges.delete(i.key):ws(i.value.color)&&r.ranges.set(i.key,i.value)}),N.requestRender(t,et),this.setState(i=>({...i,count:r.ranges.size}))}),N.requestRender(t,et)))}async fetchInitial(t){const{internal:r}=this;if(r.client==null||this.fetchedInitial.roughlyEquals(t,d.w.minutes(1)))return;this.fetchedInitial=t,(await r.client.ranges.retrieve(t)).forEach(a=>{ws(a.color)&&r.ranges.set(a.key,a)}),this.setState(a=>({...a,count:r.ranges.size}))}async render(t){const{dataToDecimalScale:r,region:s,viewport:a,timeRange:i}=t;await this.fetchInitial(i);const{draw:o,ranges:c}=this.internal,u=r.scale(l.Tt.xBounds(s)),f=this.state.cursor==null?null:this.state.cursor.x;let g=null;const m=o.canvas.scissor(l.Tt.construct({x:l.Tt.left(s),y:l.Tt.top(s)-35},{x:l.Tt.right(s),y:l.Tt.bottom(s)}));c.forEach(w=>{const b=l.Color.z.safeParse(w.color);if(!b.success)return;const v=b.data;let S=u.pos(Number(w.timeRange.start.valueOf()));const M=u.pos(Number(w.timeRange.end.valueOf()));if(M<l.Tt.left(s)||S>l.Tt.right(s))return;S=l.Y(S,l.Tt.left(s)-2,l.Tt.right(s)-1);let D=!1;f!=null&&(D=l.H.contains({lower:S,upper:M},f)),D&&(g={key:w.key,name:w.name,color:w.color,timeRange:w.timeRange,viewport:{lower:r.scale(l.Tt.xBounds(a)).pos(Number(w.timeRange.start.valueOf())),upper:r.scale(l.Tt.xBounds(a)).pos(Number(w.timeRange.end.valueOf()))}}),o.container({region:l.Tt.construct({x:S,y:l.Tt.top(s)-1},{x:M,y:l.Tt.bottom(s)-1}),backgroundColor:v.setAlpha(.2),bordered:!1});const P=l.Tt.construct({x:S+1,y:l.Tt.top(s)-34},{x:M-1,y:l.Tt.top(s)-12});o.container({region:P,backgroundColor:l.Tt.width(P)<20?v.setAlpha(.4):z=>D?z.colors.gray.l2:z.colors.gray.l0,bordered:!0,borderWidth:1,borderRadius:2,borderColor:v.setAlpha(.8)}),o.text({text:w.name,position:{x:S+8,y:l.Tt.top(s)-30},level:"small",shade:8,weight:500,maxWidth:M-S-16})}),m(),g!=null?this.setState(w=>({...w,hovered:g})):this.state.hovered&&this.setState(w=>({...w,hovered:null}))}}h(ke,"TYPE","range-provider");const xu={[dn.TYPE]:dn,[ke.TYPE]:ke},vu=Ae;class Re extends Oa{constructor(){super(...arguments);h(this,"schema",Ae)}async render(t){if(this.deleted)return;const[r,s]=await this.dataToDecimalScale(t.hold,this.dataBounds.bind(this),t.viewport);if(this.renderAxis(t,r.reverse()),await this.renderYAxes(t,r),await this.renderRangeAnnotations(t,r),s!=null)throw s}async findByXDecimal(t,r){const[s,a]=await this.dataToDecimalScale(t.hold,this.dataBounds.bind(this),t.viewport);if(a!=null)throw a;return await this.findByXValue(t,s.reverse().pos(r))}async findByXValue(t,r){const[s,a]=await this.dataToDecimalScale(t.hold,this.dataBounds.bind(this),t.viewport);if(a!=null)throw a;const i={...t,xDataToDecimalScale:s},o=this.yAxes.map(async c=>await c.findByXValue(i,r));return(await Promise.all(o)).flat()}async renderYAxes(t,r){const s={...t,xDataToDecimalScale:r};await Promise.all(this.yAxes.map(async a=>await a.render(s)))}get yAxes(){return this.childrenOfType(be.TYPE)}get rangeAnnotations(){return this.childrenOfType(ke.TYPE)}async renderRangeAnnotations(t,r){const[s,a]=await this.bounds(t.hold,this.dataBounds.bind(this));if(a!=null)throw a;await Promise.all(this.rangeAnnotations.map(async i=>await i.render({dataToDecimalScale:r,region:t.plot,viewport:t.viewport,timeRange:new d.E(s.lower,s.upper)})))}async dataBounds(){return await Promise.all(this.yAxes.map(async t=>await t.xBounds()))}}h(Re,"TYPE","XAxis");const oi=p.z.object({container:l.Tt.box,viewport:l.Tt.box,hold:p.z.boolean().optional().default(!1),grid:p.z.record(ha),visible:p.z.boolean().optional().default(!0),clearOverScan:l.G.crudeZ.optional().default(l.G.ZERO)}),Su=(e,n)=>{const t=l.Tt.width(e)*Math.sqrt(l.Tt.height(e)),r=l.Tt.width(n)*Math.sqrt(l.Tt.height(n));return t/r};class xn extends d.Composite{constructor(){super(...arguments);h(this,"schema",oi)}async afterUpdate(t){this.internal.instrumentation=De(t,"lineplot"),this.internal.aggregate=d.useAggregator(t),this.internal.renderCtx=d.Context.use(t),N.control(t,r=>this.requestRender("low",r)),this.requestRender("high",K)}async afterDelete(t){this.internal.renderCtx=d.Context.use(t),this.requestRender("high",K)}async findByXDecimal(t){const r={...this.state,plot:this.calculatePlot(),exposure:this.exposure},s=this.axes.flatMap(async a=>await a.findByXDecimal(r,t));return(await Promise.all(s)).flat()}async findByXValue(t){const r={...this.state,plot:this.calculatePlot(),exposure:this.exposure},s=this.axes.flatMap(async a=>await a.findByXValue(r,t));return(await Promise.all(s)).flat()}get axes(){return this.childrenOfType(Re.TYPE)}get tooltips(){return this.childrenOfType(_t.TYPE)}get measures(){return this.childrenOfType(Ft.TYPE)}get exposure(){return Su(this.state.viewport,this.state.container)}async renderAxes(t,r){const s={...this.state,plot:t,canvases:r,exposure:this.exposure};await Promise.all(this.axes.map(async a=>await a.render(s)))}async renderTooltips(t,r){const s={findByXDecimal:this.findByXDecimal.bind(this),region:t,canvases:r};await Promise.all(this.tooltips.map(async a=>await a.render(s)))}async renderMeasures(t){const r={findByXDecimal:this.findByXDecimal.bind(this),findByXValue:this.findByXValue.bind(this),region:t};await Promise.all(this.measures.map(async s=>await s.render(r)))}calculatePlot(){return io(this.state.grid,this.state.container)}async render(t){const{renderCtx:r}=this.internal,{instrumentation:s}=this.internal;if(this.deleted){s.L.debug("deleted, skipping render",{key:this.key});return}if(!this.state.visible)return s.L.debug("not visible, skipping render",{key:this.key}),async({canvases:f})=>r.erase(this.state.container,this.state.clearOverScan,...f);const a=this.calculatePlot();s.L.debug("rendering",{key:this.key,viewport:this.state.viewport,container:this.state.container,grid:this.state.grid,plot:a,canvases:t});const i=l.G.construct(this.state.clearOverScan),o=r.scissor(this.state.container,i,t.filter(f=>f!=="gl")),c=r.scissor(a,l.G.ZERO,t.filter(f=>f==="gl"));try{await this.renderAxes(a,t),await this.renderTooltips(a,t),await this.renderMeasures(a),r.gl.finish(),r.gl.flush(),r.gl.finish()}catch(f){if(f.message.toLowerCase().includes("bigint"))return;this.internal.aggregate({key:`${this.type}-${this.key}`,variant:"error",message:f.message})}finally{o(),c()}s.L.debug("rendered",{key:this.key});const u=l.Tt.copy(this.state.container);return async({canvases:f})=>r.erase(u,this.state.clearOverScan,...f)}requestRender(t,r){const{renderCtx:s}=this.internal;let a=["upper2d","lower2d","gl"];r===et&&(a=["upper2d"]),s.loop.set({key:`${this.type}-${this.key}`,render:async()=>await this.render(a),priority:t,canvases:a})}}h(xn,"TYPE","LinePlot");const Cu={[xn.TYPE]:xn,[Re.TYPE]:Re,[be.TYPE]:be};exports.AcquireChannelControl=Se;exports.Annotation=dn;exports.AuthoritySource=Ce;exports.BaseProvider=At;exports.Button=yn;exports.Canvas=za;exports.Canvas$1=Ee;exports.Chip=fn;exports.Controller=N;exports.Controller$1=pn;exports.Diagram=lu;exports.Diagram$1=Gt;exports.Indicator=gn;exports.Legend=mn;exports.Light=wn;exports.Line=Te;exports.LinePlot=xn;exports.Log=Pe;exports.Measure=Ft;exports.Provider=Fe;exports.Provider$1=ke;exports.Provider$2=Fn;exports.REASON_DATA=Gn;exports.REASON_LAYOUT=K;exports.REASON_TOOL=et;exports.REGISTRY=Gi;exports.REGISTRY$1=iu;exports.REGISTRY$10=Na;exports.REGISTRY$11=gu;exports.REGISTRY$12=Ts;exports.REGISTRY$13=ua;exports.REGISTRY$14=mu;exports.REGISTRY$15=ti;exports.REGISTRY$16=ai;exports.REGISTRY$17=fu;exports.REGISTRY$18=eu;exports.REGISTRY$2=Ka;exports.REGISTRY$3=au;exports.REGISTRY$4=Qa;exports.REGISTRY$5=cu;exports.REGISTRY$6=qc;exports.REGISTRY$7=Cu;exports.REGISTRY$8=ni;exports.REGISTRY$9=xu;exports.Rule=Ut;exports.STATUSES=Ga;exports.SetChannelValue=ve;exports.Setpoint=Tn;exports.StateProvider=Bt;exports.Table=xe;exports.Toggle=bn;exports.Tooltip=_t;exports.Value=Ht;exports.XAxis=Re;exports.YAxis=be;exports.ZERO_CONTEXT_VALUE=Jn;exports.acquireChannelControl=ru;exports.acquireChannelControlPropsZ=qa;exports.aether=Kc;exports.annotationStateZ=Ia;exports.authoritySource=su;exports.authoritySourceProps=ja;exports.axisStateZ=Dr;exports.buttonStateZ=Xa;exports.canvas=ou;exports.canvasStateZ=Or;exports.channelData=Os;exports.chipStateZ=$a;exports.color=Zt;exports.colorGradient=Ks;exports.controllerStateZ=Fa;exports.coreAxisStateZ=Ae;exports.diagramStateZ=Ar;exports.external=so;exports.indicatorStateZ=Wa;exports.interpolateNumber=we;exports.interpolateRgb=Wn;exports.interpolateString=ma;exports.legendStateZ=Va;exports.lightStateZ=Ja;exports.linePlotStateZ=oi;exports.logState=ei;exports.measure=pu;exports.measureStateZ=Nr;exports.newTickFactory=Kn;exports.parseAutoBounds=Aa;exports.provider=Ci;exports.providerStateZ=ii;exports.providerStateZ$1=ia;exports.providerStateZ$2=Tr;exports.regions=ut;exports.rollingAverage=Vs;exports.rollingAverageProps=mr;exports.ruleStateZ=Lr;exports.scaleNumber=Js;exports.setChannelValue=nu;exports.setChannelValuePropsZ=Ha;exports.setpoint=Fs;exports.setpointStateZ=ri;exports.sinkPipeline=Ds;exports.sinkPipelinePropsZ=ur;exports.sourcePipeline=zs;exports.sourcePipelinePropsZ=lr;exports.stateProviderStateZ=Ua;exports.stateZ=Za;exports.statusZ=_a;exports.streamChannelData=As;exports.streamChannelValue=Zs;exports.streamChannelValuePropsZ=hr;exports.stringSourceSpecZ=ir;exports.stringifyNumber=Ws;exports.stringifyNumberProps=gr;exports.sugaredStateZ=Ba;exports.tickFactoryProps=zr;exports.tickType=Yr;exports.toggleStateZ=si;exports.tooltip=uu;exports.tooltipStateZ=Zr;exports.value=Tu;exports.withinBounds=Hs;exports.withinBoundsProps=pr;exports.withinSizeThreshold=Da;exports.xAxisStateZ=vu;exports.yAxisStateZ=Qc;
@@ -4414,14 +4414,14 @@ class cs extends ct {
4414
4414
  var t;
4415
4415
  this.internal.prevTrigger = this.state.acquireTrigger;
4416
4416
  try {
4417
- await ((t = this.writer) == null ? void 0 : t.close()), this.setState((s) => ({ ...s, status: "released" }));
4417
+ await ((t = this.writer) == null ? void 0 : t.close());
4418
4418
  } catch (s) {
4419
4419
  this.internal.addStatus({
4420
4420
  message: `${this.state.name} failed to release control: ${s.message}`,
4421
4421
  variant: "error"
4422
4422
  });
4423
4423
  } finally {
4424
- this.writer = void 0;
4424
+ this.setState((s) => ({ ...s, status: "released" })), this.writer = void 0;
4425
4425
  }
4426
4426
  }
4427
4427
  async set(t) {
package/dist/ether.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./aggregator-B4RWbN9h.cjs"),o=require("./css-DT9dIVAb.cjs"),R=require("./transformColorsToHex-CDwcIPob.cjs"),e=require("./LinePlot-C_uxbSzY.cjs"),a=Object.freeze(Object.defineProperty({__proto__:null,Color:o.Color,ZERO:o.ZERO,crudeZ:o.crudeZ,cssString:o.cssString,fromGradient:o.fromGradient,fromHSLA:o.fromHSLA,gradientZ:o.gradientZ,paletteZ:o.paletteZ,stopZ:o.stopZ,toHex:o.toHex,transformColorsToHex:R.transformColorsToHex},Symbol.toStringTag,{value:"Module"})),i=Object.freeze(Object.defineProperty({__proto__:null,Context:t.Context,Controller:e.Controller,GLProgram:t.GLProgram,Loop:t.Loop,REASON_DATA:e.REASON_DATA,REASON_LAYOUT:e.REASON_LAYOUT,REASON_TOOL:e.REASON_TOOL},Symbol.toStringTag,{value:"Module"})),s=Object.freeze(Object.defineProperty({__proto__:null,Provider:t.Provider,REGISTRY:t.REGISTRY,SYNNAX_DARK:t.SYNNAX_DARK,SYNNAX_LIGHT:t.SYNNAX_LIGHT,SYNNAX_THEMES:t.SYNNAX_THEMES,fontSpecZ:t.fontSpecZ,fontString:t.fontString,themeZ:t.themeZ,use:t.use},Symbol.toStringTag,{value:"Module"})),T=()=>{const r=new t.l((S,l)=>postMessage(S,l));onmessage=r.handle.bind(r);const n={...e.REGISTRY,...e.REGISTRY$1,...e.REGISTRY$2,...e.REGISTRY$3,...e.REGISTRY$4,...t.REGISTRY$1,...e.REGISTRY$5,...e.REGISTRY$6,...e.REGISTRY$7,...e.REGISTRY$8,...e.REGISTRY$9,...e.REGISTRY$10,...e.REGISTRY$11,...t.REGISTRY$2,...e.REGISTRY$12,...e.REGISTRY$13,...t.REGISTRY,...e.REGISTRY$14,...e.REGISTRY$15,...e.REGISTRY$16,...e.REGISTRY$17,...e.REGISTRY$18};t.render({comms:r.route("vis"),registry:n})},E=Object.freeze(Object.defineProperty({__proto__:null,render:T},Symbol.toStringTag,{value:"Module"})),Y=Object.freeze(Object.defineProperty({__proto__:null,LinePlot:e.LinePlot,REGISTRY:e.REGISTRY$7,XAxis:e.XAxis,YAxis:e.YAxis,linePlotStateZ:e.linePlotStateZ,xAxisStateZ:e.xAxisStateZ,yAxisStateZ:e.yAxisStateZ},Symbol.toStringTag,{value:"Module"}));exports.aether=t.aether;exports.canvas=e.canvas;exports.diagram=e.Diagram;exports.measure=e.measure;exports.rule=e.aether;exports.synnax=e.provider;exports.telem=e.external;exports.tooltip=e.tooltip;exports.value=e.value;exports.color=a;exports.lineplot=Y;exports.pluto=E;exports.render=i;exports.theming=s;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./aggregator-B4RWbN9h.cjs"),o=require("./css-DT9dIVAb.cjs"),R=require("./transformColorsToHex-CDwcIPob.cjs"),e=require("./LinePlot-Cys9-mEC.cjs"),a=Object.freeze(Object.defineProperty({__proto__:null,Color:o.Color,ZERO:o.ZERO,crudeZ:o.crudeZ,cssString:o.cssString,fromGradient:o.fromGradient,fromHSLA:o.fromHSLA,gradientZ:o.gradientZ,paletteZ:o.paletteZ,stopZ:o.stopZ,toHex:o.toHex,transformColorsToHex:R.transformColorsToHex},Symbol.toStringTag,{value:"Module"})),i=Object.freeze(Object.defineProperty({__proto__:null,Context:t.Context,Controller:e.Controller,GLProgram:t.GLProgram,Loop:t.Loop,REASON_DATA:e.REASON_DATA,REASON_LAYOUT:e.REASON_LAYOUT,REASON_TOOL:e.REASON_TOOL},Symbol.toStringTag,{value:"Module"})),s=Object.freeze(Object.defineProperty({__proto__:null,Provider:t.Provider,REGISTRY:t.REGISTRY,SYNNAX_DARK:t.SYNNAX_DARK,SYNNAX_LIGHT:t.SYNNAX_LIGHT,SYNNAX_THEMES:t.SYNNAX_THEMES,fontSpecZ:t.fontSpecZ,fontString:t.fontString,themeZ:t.themeZ,use:t.use},Symbol.toStringTag,{value:"Module"})),T=()=>{const r=new t.l((S,l)=>postMessage(S,l));onmessage=r.handle.bind(r);const n={...e.REGISTRY,...e.REGISTRY$1,...e.REGISTRY$2,...e.REGISTRY$3,...e.REGISTRY$4,...t.REGISTRY$1,...e.REGISTRY$5,...e.REGISTRY$6,...e.REGISTRY$7,...e.REGISTRY$8,...e.REGISTRY$9,...e.REGISTRY$10,...e.REGISTRY$11,...t.REGISTRY$2,...e.REGISTRY$12,...e.REGISTRY$13,...t.REGISTRY,...e.REGISTRY$14,...e.REGISTRY$15,...e.REGISTRY$16,...e.REGISTRY$17,...e.REGISTRY$18};t.render({comms:r.route("vis"),registry:n})},E=Object.freeze(Object.defineProperty({__proto__:null,render:T},Symbol.toStringTag,{value:"Module"})),Y=Object.freeze(Object.defineProperty({__proto__:null,LinePlot:e.LinePlot,REGISTRY:e.REGISTRY$7,XAxis:e.XAxis,YAxis:e.YAxis,linePlotStateZ:e.linePlotStateZ,xAxisStateZ:e.xAxisStateZ,yAxisStateZ:e.yAxisStateZ},Symbol.toStringTag,{value:"Module"}));exports.aether=t.aether;exports.canvas=e.canvas;exports.diagram=e.Diagram;exports.measure=e.measure;exports.rule=e.aether;exports.synnax=e.provider;exports.telem=e.external;exports.tooltip=e.tooltip;exports.value=e.value;exports.color=a;exports.lineplot=Y;exports.pluto=E;exports.render=i;exports.theming=s;
package/dist/ether.js CHANGED
@@ -2,8 +2,8 @@ import { C as R, G as n, L as l, P as S, R as a, S as i, a as T, b as E, f as m,
2
2
  import { i as $e } from "./aggregator-Bl15iClv.js";
3
3
  import { a as f, Z as I, c as g, b as u, f as b, d as x, g as O, p as A, s as y, t as j } from "./css-Bbri4zkj.js";
4
4
  import { t as v } from "./transformColorsToHex-CnZpPlL2.js";
5
- import { C as P, R as Z, a as L, b as N, c as h, d as M, e as z, f as C, g as H, h as X, i as w, j as s, k as D, l as k, m as q, n as B, o as F, p as K, q as U, r as J, s as Q, t as V, u as W, L as ee, X as ae, Y as se, E as te, F as oe, G as re } from "./LinePlot-B_tFyvNo.js";
6
- import { x as de, D as fe, z as Ie, A as ge, v as ue, w as be, y as xe, B as Oe } from "./LinePlot-B_tFyvNo.js";
5
+ import { C as P, R as Z, a as L, b as N, c as h, d as M, e as z, f as C, g as H, h as X, i as w, j as s, k as D, l as k, m as q, n as B, o as F, p as K, q as U, r as J, s as Q, t as V, u as W, L as ee, X as ae, Y as se, E as te, F as oe, G as re } from "./LinePlot-tqJ3Um1S.js";
6
+ import { x as de, D as fe, z as Ie, A as ge, v as ue, w as be, y as xe, B as Oe } from "./LinePlot-tqJ3Um1S.js";
7
7
  const Te = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
8
8
  __proto__: null,
9
9
  Color: f,