@synnaxlabs/pluto 0.53.2 → 0.54.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/aether-BBeeeA1z.cjs +10 -0
- package/dist/aether-Bl3vMZO3.js +716 -0
- package/dist/aether-DmSenWd4.js +704 -0
- package/dist/aether-VeYJQDcf.cjs +11 -0
- package/dist/button-DBdzH6Ky.cjs +1 -0
- package/dist/button-KtgabnXL.js +251 -0
- package/dist/button.cjs +1 -1
- package/dist/button.js +2 -4
- package/dist/chunk-DeC0fbbY.js +23 -0
- package/dist/chunk-FeXHwk1_.cjs +1 -0
- package/dist/color-Cspp5cKp.js +7904 -0
- package/dist/color-DCCr0Z1b.cjs +29 -0
- package/dist/color.cjs +1 -1
- package/dist/color.js +2 -4
- package/dist/css-Ce-x3HcK.cjs +1 -0
- package/dist/css-UEo6g0SR.js +69 -0
- package/dist/css.cjs +1 -1
- package/dist/css.js +2 -8
- package/dist/dialog-BTCrp5Yv.cjs +1 -0
- package/dist/dialog-ClQI4sHo.js +331 -0
- package/dist/dialog.cjs +1 -1
- package/dist/dialog.js +2 -4
- package/dist/divider-BYRH8-5K.js +13 -0
- package/dist/divider-CEyntx31.cjs +1 -0
- package/dist/ether-CZlE80D0.cjs +53 -0
- package/dist/ether-KMGPzrZR.js +6222 -0
- package/dist/ether.cjs +1 -1
- package/dist/ether.js +4 -104
- package/dist/event-Btz3eWg1.cjs +1 -0
- package/dist/event-Z4V8c501.js +4 -0
- package/dist/flex-Bgtu0DK6.js +62 -0
- package/dist/flex-D_GoD3ed.cjs +1 -0
- package/dist/flex.cjs +1 -1
- package/dist/flex.js +2 -4
- package/dist/haul-BdMc4rLJ.js +171 -0
- package/dist/haul-ZdSHqhp6.cjs +1 -0
- package/dist/header-CNx3pAkx.js +64 -0
- package/dist/header-lD0sRjCR.cjs +1 -0
- package/dist/header.cjs +1 -1
- package/dist/header.js +2 -4
- package/dist/input-CdL1OPDU.cjs +74 -0
- package/dist/input-h-4axMs7.js +47772 -0
- package/dist/input.cjs +1 -1
- package/dist/input.js +2 -4
- package/dist/list-DacuSBB3.cjs +4 -0
- package/dist/list-dZDsxTzd.js +1756 -0
- package/dist/list.cjs +1 -1
- package/dist/list.js +2 -4
- package/dist/menu-eeXfR_zT.js +170 -0
- package/dist/menu-yADx33I8.cjs +1 -0
- package/dist/menu.cjs +1 -1
- package/dist/menu.js +2 -4
- package/dist/pluto.cjs +52 -0
- package/dist/pluto.css +2 -1
- package/dist/pluto.js +36474 -0
- package/dist/select-B93mFqvf.js +1328 -0
- package/dist/select-gt7wGGO4.cjs +1 -0
- package/dist/src/access/policy/queries.d.ts +34 -34
- package/dist/src/access/policy/queries.d.ts.map +1 -1
- package/dist/src/access/queries.d.ts +1 -1
- package/dist/src/access/queries.d.ts.map +1 -1
- package/dist/src/access/role/queries.d.ts +2 -12
- package/dist/src/access/role/queries.d.ts.map +1 -1
- package/dist/src/arc/queries.d.ts +1167 -29
- package/dist/src/arc/queries.d.ts.map +1 -1
- package/dist/src/channel/LinePlot.d.ts +2 -2
- package/dist/src/channel/LinePlot.d.ts.map +1 -1
- package/dist/src/channel/queries.d.ts +108 -60
- package/dist/src/channel/queries.d.ts.map +1 -1
- package/dist/src/color/Provider.d.ts +8 -8
- package/dist/src/device/queries.d.ts +148 -363
- package/dist/src/device/queries.d.ts.map +1 -1
- package/dist/src/flux/result.d.ts +5 -5
- package/dist/src/flux/result.d.ts.map +1 -1
- package/dist/src/flux/update.d.ts +1 -1
- package/dist/src/flux/update.d.ts.map +1 -1
- package/dist/src/icon/Icon.d.ts.map +1 -1
- package/dist/src/icon/registry.d.ts +1 -0
- package/dist/src/icon/registry.d.ts.map +1 -1
- package/dist/src/label/queries.d.ts +21 -21
- package/dist/src/label/queries.d.ts.map +1 -1
- package/dist/src/lineplot/aether/XAxis.d.ts +28 -28
- package/dist/src/lineplot/aether/YAxis.d.ts +28 -28
- package/dist/src/lineplot/aether/axis.d.ts +14 -14
- package/dist/src/lineplot/queries.d.ts +2 -2
- package/dist/src/lineplot/queries.d.ts.map +1 -1
- package/dist/src/lineplot/range/aether/provider.d.ts +126 -102
- package/dist/src/lineplot/range/aether/provider.d.ts.map +1 -1
- package/dist/src/lineplot/tooltip/aether/tooltip.d.ts +56 -56
- package/dist/src/log/aether/Log.d.ts +21 -21
- package/dist/src/log/queries.d.ts +2 -2
- package/dist/src/log/queries.d.ts.map +1 -1
- package/dist/src/memo/index.d.ts +0 -1
- package/dist/src/memo/index.d.ts.map +1 -1
- package/dist/src/memo/useMemoCompare.d.ts +0 -1
- package/dist/src/memo/useMemoCompare.d.ts.map +1 -1
- package/dist/src/rack/queries.d.ts.map +1 -1
- package/dist/src/ranger/aether/queries.d.ts.map +1 -1
- package/dist/src/ranger/queries.d.ts +19 -19
- package/dist/src/ranger/queries.d.ts.map +1 -1
- package/dist/src/schematic/queries.d.ts +2 -2
- package/dist/src/schematic/queries.d.ts.map +1 -1
- package/dist/src/schematic/symbol/Forms.d.ts.map +1 -1
- package/dist/src/schematic/symbol/Primitives.d.ts +2 -1
- package/dist/src/schematic/symbol/Primitives.d.ts.map +1 -1
- package/dist/src/schematic/symbol/SelectOrientation.d.ts.map +1 -1
- package/dist/src/schematic/symbol/Symbols.d.ts +35 -34
- package/dist/src/schematic/symbol/Symbols.d.ts.map +1 -1
- package/dist/src/schematic/symbol/queries.d.ts +96 -50
- package/dist/src/schematic/symbol/queries.d.ts.map +1 -1
- package/dist/src/schematic/symbol/registry.d.ts.map +1 -1
- package/dist/src/select/Dialog.d.ts +2 -1
- package/dist/src/select/Dialog.d.ts.map +1 -1
- package/dist/src/status/Select.d.ts.map +1 -1
- package/dist/src/status/SelectMulipleVariants.spec.d.ts +2 -0
- package/dist/src/status/SelectMulipleVariants.spec.d.ts.map +1 -0
- package/dist/src/status/SelectMultipleVariants.d.ts +9 -0
- package/dist/src/status/SelectMultipleVariants.d.ts.map +1 -0
- package/dist/src/status/SelectVariant.d.ts +2 -2
- package/dist/src/status/SelectVariant.d.ts.map +1 -1
- package/dist/src/status/SelectVariant.spec.d.ts +2 -0
- package/dist/src/status/SelectVariant.spec.d.ts.map +1 -0
- package/dist/src/status/aether/aggregator.d.ts +16 -2
- package/dist/src/status/aether/aggregator.d.ts.map +1 -1
- package/dist/src/status/aether/errorHandler.d.ts +2 -1
- package/dist/src/status/aether/errorHandler.d.ts.map +1 -1
- package/dist/src/status/base/Aggregator.d.ts +3 -2
- package/dist/src/status/base/Aggregator.d.ts.map +1 -1
- package/dist/src/status/external.d.ts +1 -0
- package/dist/src/status/external.d.ts.map +1 -1
- package/dist/src/status/queries.d.ts +25 -9
- package/dist/src/status/queries.d.ts.map +1 -1
- package/dist/src/status/variantData.d.ts +4 -0
- package/dist/src/status/variantData.d.ts.map +1 -0
- package/dist/src/table/cells/Cells.d.ts +17 -17
- package/dist/src/table/queries.d.ts +2 -2
- package/dist/src/table/queries.d.ts.map +1 -1
- package/dist/src/task/queries.d.ts +3 -3
- package/dist/src/task/queries.d.ts.map +1 -1
- package/dist/src/telem/aether/noop.d.ts.map +1 -1
- package/dist/src/telem/aether/static.d.ts +10 -10
- package/dist/src/telem/aether/telem.d.ts +1 -1
- package/dist/src/telem/aether/telem.d.ts.map +1 -1
- package/dist/src/telem/aether/transformers.d.ts +15 -15
- package/dist/src/telem/aether/transformers.d.ts.map +1 -1
- package/dist/src/telem/client/cache/cache.d.ts +1 -1
- package/dist/src/telem/client/cache/cache.d.ts.map +1 -1
- package/dist/src/telem/client/client.d.ts +4 -4
- package/dist/src/telem/client/client.d.ts.map +1 -1
- package/dist/src/telem/client/reader.d.ts +1 -1
- package/dist/src/telem/client/reader.d.ts.map +1 -1
- package/dist/src/telem/client/streamer.d.ts +1 -1
- package/dist/src/telem/client/streamer.d.ts.map +1 -1
- package/dist/src/telem/control/Controller.d.ts +1 -1
- package/dist/src/telem/control/Controller.d.ts.map +1 -1
- package/dist/src/telem/control/aether/chip.d.ts +16 -2
- package/dist/src/telem/control/aether/chip.d.ts.map +1 -1
- package/dist/src/telem/control/aether/controller.d.ts +16 -16
- package/dist/src/telem/control/aether/controller.d.ts.map +1 -1
- package/dist/src/telem/control/aether/indicator.d.ts +51 -37
- package/dist/src/telem/control/aether/indicator.d.ts.map +1 -1
- package/dist/src/telem/control/aether/legend.d.ts +18 -16
- package/dist/src/telem/control/aether/legend.d.ts.map +1 -1
- package/dist/src/telem/control/aether/state.d.ts +9 -8
- package/dist/src/telem/control/aether/state.d.ts.map +1 -1
- package/dist/src/theming/aether/provider.d.ts +990 -990
- package/dist/src/theming/base/theme.d.ts +330 -330
- package/dist/src/user/queries.d.ts +2 -2
- package/dist/src/view/queries.d.ts +2 -2
- package/dist/src/vis/axis/axis.d.ts +14 -14
- package/dist/src/vis/gauge/aether/gauge.d.ts +21 -21
- package/dist/src/vis/gauge/use.d.ts +7 -7
- package/dist/src/vis/line/aether/line.d.ts +7 -7
- package/dist/src/vis/measure/aether/measure.d.ts +56 -56
- package/dist/src/vis/rule/aether/aether.d.ts +14 -14
- package/dist/src/vis/value/aether/value.d.ts +42 -42
- package/dist/src/vis/value/redline.d.ts +5 -5
- package/dist/src/vis/value/redline.d.ts.map +1 -1
- package/dist/src/vis/value/use.d.ts +14 -14
- package/dist/src/workspace/queries.d.ts +6 -4
- package/dist/src/workspace/queries.d.ts.map +1 -1
- package/dist/tabs-CB7d2_0h.cjs +1 -0
- package/dist/tabs-DEXXNOZA.js +253 -0
- package/dist/tabs.cjs +1 -1
- package/dist/tabs.js +2 -4
- package/dist/text-Dd6wYgQM.js +142 -0
- package/dist/text-n3Fetdk6.cjs +1 -0
- package/dist/text.cjs +1 -1
- package/dist/text.js +2 -5
- package/dist/theming-Blgv4Cvi.js +591 -0
- package/dist/theming-KFfFjsRJ.cjs +1 -0
- package/dist/theming.cjs +1 -1
- package/dist/theming.js +2 -5
- package/dist/tree-B4jJAzS1.js +294 -0
- package/dist/tree-CsgSEpgy.cjs +1 -0
- package/dist/tree.cjs +1 -1
- package/dist/tree.js +2 -4
- package/dist/triggers-AqBSAR_T.cjs +1 -0
- package/dist/triggers-DDlalLoO.js +4748 -0
- package/dist/triggers.cjs +1 -1
- package/dist/triggers.js +2 -4
- package/dist/types-BGbd8pRh.js +73 -0
- package/dist/types-ByXvRm2h.cjs +1 -0
- package/dist/video-Bnr-2W9p.cjs +1 -0
- package/dist/video-ByMlaeKI.js +15 -0
- package/dist/video.cjs +1 -1
- package/dist/video.js +2 -4
- package/package.json +28 -29
- package/dist/Animated-B_N04fe6.cjs +0 -1
- package/dist/Animated-BsbNkFLg.cjs +0 -1
- package/dist/Animated-CLo1CLgn.js +0 -29
- package/dist/Animated-CO--9HPM.js +0 -354
- package/dist/Box-Bi280MYh.js +0 -96
- package/dist/Box-CNUz5BsV.cjs +0 -1
- package/dist/Copy-BgRUUzWz.cjs +0 -1
- package/dist/Copy-COWBkO_v.js +0 -337
- package/dist/Dialog-Bj7FiHJD.js +0 -59
- package/dist/Dialog-DBm6Fap1.cjs +0 -1
- package/dist/Editable-C17ILP50.js +0 -202
- package/dist/Editable-HUPqTaui.cjs +0 -1
- package/dist/Haul-CnZK3e-n.js +0 -132
- package/dist/Haul-DlwI4b25.cjs +0 -1
- package/dist/Items-CXBBG9Ip.cjs +0 -4
- package/dist/Items-DQba1BFQ.js +0 -842
- package/dist/Menu-BZ6ZGIv3.cjs +0 -1
- package/dist/Menu-CniMpPmC.js +0 -139
- package/dist/Provider-cSwm-2e_.cjs +0 -1
- package/dist/Provider-jFWpR0CX.js +0 -520
- package/dist/Tags-CxzMdPpm.cjs +0 -1
- package/dist/Tags-DvfGhiWv.js +0 -925
- package/dist/Text-2MISZsc5.js +0 -1712
- package/dist/Text-XHBXXDRS.cjs +0 -1
- package/dist/Video-Bew5_j16.js +0 -10
- package/dist/Video-BryrVNlH.cjs +0 -1
- package/dist/css-CloSmhZB.cjs +0 -1
- package/dist/css-D90kZTM8.js +0 -63
- package/dist/dimensions-CdFEW3oU.cjs +0 -1
- package/dist/dimensions-DbMN4145.js +0 -19
- package/dist/eraser-BShvqlBE.js +0 -958
- package/dist/eraser-rFMFKqsg.cjs +0 -11
- package/dist/event-BxvV3arE.cjs +0 -1
- package/dist/event-nNH_pXSr.js +0 -36
- package/dist/external-4jf1Bv96.cjs +0 -1
- package/dist/external-B2YeNEwd.cjs +0 -1
- package/dist/external-B9PnwQOL.js +0 -29
- package/dist/external-BBbkXXN0.js +0 -47
- package/dist/external-BByOkVID.cjs +0 -1
- package/dist/external-BrEnYrZV.js +0 -32
- package/dist/external-BwbypKCk.cjs +0 -1
- package/dist/external-C65vBow6.cjs +0 -1
- package/dist/external-CCcIJ20u.cjs +0 -1
- package/dist/external-CF4uh-dm.js +0 -51423
- package/dist/external-Cn6EfkLd.cjs +0 -1
- package/dist/external-CovFw1fv.cjs +0 -1
- package/dist/external-D2Zb9O5J.js +0 -93
- package/dist/external-D6aLGjMg.js +0 -8969
- package/dist/external-DDvmnE2k.js +0 -341
- package/dist/external-DTi9a-iK.cjs +0 -1
- package/dist/external-DYP1_xpd.js +0 -80
- package/dist/external-DxsuBuKe.js +0 -392
- package/dist/external-DysGdnTb.js +0 -130
- package/dist/external-N2L8ffzi.js +0 -71
- package/dist/external-UzXlHlr9.js +0 -24
- package/dist/external-_Ht_yCRf.cjs +0 -1
- package/dist/external-igNfmRSB.cjs +0 -28
- package/dist/external-uUEGzmui.cjs +0 -84
- package/dist/fontString-76R2eWDd.js +0 -29
- package/dist/fontString-BNnhiwug.cjs +0 -1
- package/dist/hooks-Co6IVYNw.cjs +0 -1
- package/dist/hooks-QNj6PdUo.js +0 -73
- package/dist/index.cjs +0 -60
- package/dist/index.js +0 -36886
- package/dist/jsx-runtime-nZSsnGb7.cjs +0 -6
- package/dist/jsx-runtime-tc70JA_2.js +0 -264
- package/dist/provider-Bt-E2O6g.js +0 -810
- package/dist/provider-DQkVj3tA.cjs +0 -10
- package/dist/src/memo/proxyMemo.d.ts +0 -3
- package/dist/src/memo/proxyMemo.d.ts.map +0 -1
- package/dist/types-CGRCBVD4.js +0 -82
- package/dist/types-DI2vtOGs.cjs +0 -1
- package/dist/units-Bu36uC6z.cjs +0 -1
- package/dist/units-DMip-eZH.js +0 -14
- package/dist/useStaticData-BTwIe0Il.cjs +0 -1
- package/dist/useStaticData-p8sk2VCJ.js +0 -1051
- package/dist/value-BkUH03tl.cjs +0 -53
- package/dist/value-D0vfKEY3.js +0 -6821
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
const e=require(`./chunk-FeXHwk1_.cjs`),t=require(`./types-ByXvRm2h.cjs`),n=require(`./aether-BBeeeA1z.cjs`),r=require(`./aether-VeYJQDcf.cjs`);let i=require(`@synnaxlabs/client`),a=require(`@synnaxlabs/x`),o=require(`zod`);o=e.r(o);let s=require(`@synnaxlabs/alamos`),c=require(`@synnaxlabs/freighter`);var l=class{entries=new Map;setListeners=new Map;deleteListeners=new Map;handleError;equal;constructor(e,t=()=>!1){this.handleError=e,this.equal=t}setOne(e,n,r,i){let a=this.entries.get(n),o=t.d(r,a);if(!(o==null||a!=null&&this.equal(o,a,n)))return this.entries.set(n,o),this.notifySet(e,n,o,i),()=>{a===void 0?(this.entries.delete(n),this.notifyDelete(e,n)):(this.entries.set(n,a),this.notifySet(e,n,a,i))}}set(e,t,n,r){let i=[];if(Array.isArray(t))t.forEach(t=>{let r=this.setOne(e,t.key,t,n);r!=null&&i.push(r)});else if(typeof t==`object`&&`key`in t){let r=t,a=this.setOne(e,r.key,r,n);a!=null&&i.push(a)}else{let a=this.setOne(e,t,n,r);a!=null&&i.push(a)}return()=>i.reverse().forEach(e=>e())}get(e){return typeof e==`function`?Array.from(this.entries.values()).filter(e):Array.isArray(e)?e.map(e=>this.entries.get(e)).filter(e=>e!=null):this.entries.get(e)}list(){return Array.from(this.entries.values())}has(e){return Array.isArray(e)?e.every(e=>this.entries.has(e)):this.entries.has(e)}delete(e,t,n){let r=[];return typeof t==`function`?this.entries.forEach((e,n)=>{t(e,n)&&r.push({key:n,value:e})}):a.array.toArray(t).forEach(e=>{let t=this.entries.get(e);r.push({key:e,value:t})}),r.forEach(({key:t})=>{this.entries.delete(t),this.notifyDelete(e,t)}),()=>r.forEach(({key:t,value:r})=>{r!=null&&(this.entries.set(t,r),this.notifySet(e,t,r,n))})}clear(){this.entries.clear()}onSet(e,t,n){return this.setListeners.set(t,{scope:e,key:n}),()=>this.setListeners.delete(t)}onDelete(e,t,n){return this.deleteListeners.set(t,{scope:e,key:n}),()=>this.deleteListeners.delete(t)}notifySet(e,t,n,r){this.setListeners.forEach((i,a)=>{let o=i.key==null||i.key===t,s=i.scope!==e;o&&s&&this.handleError(async()=>await a(n,r),`Failed to notify set listener`)})}notifyDelete(e,t){this.deleteListeners.forEach((n,r)=>{let i=n.key==null||n.key===t,a=n.scope!==e;i&&a&&this.handleError(async()=>await r(t),`Failed to notify delete listener`)})}scope(e){return{set:(t,n,r)=>this.set(e,t,n,r),get:(e=>this.get(e)),list:()=>this.list(),has:e=>this.has(e),delete:(t,n)=>this.delete(e,t,n),onSet:(t,n)=>this.onSet(e,t,n),onDelete:(t,n)=>this.onDelete(e,t,n)}}},u=(e,t)=>Object.fromEntries(Object.entries(e).map(([e,{equal:n}])=>[e,new l(t,n)])),d=(e,t)=>Object.fromEntries(Object.entries(e).map(([n])=>[n,e[n].scope(t)])),f=(e,t,n)=>e.set(t,e=>e==null?void 0:{...e,...n}),p=(e,t)=>{let n=e.includes(`delete`),r=t.includes(`delete`);return n&&!r?-1:!n&&r?1:0},m=async({openStreamer:e,storeConfig:t,handleError:n,client:r,store:o})=>{let s=Object.values(t),c=a.unique.unique(s.flatMap(({listeners:e})=>e.map(({channel:e})=>e))),l={};s.forEach(({listeners:e})=>e.forEach(e=>{let{channel:t}=e;l[t]=[...l[t]||[],e]}));let u=await i.framer.HardenedStreamer.open(e,c),d=new i.framer.ObservableStreamer(u);return d.onChange(e=>{let t=[...e.uniqueNames];t.sort(p),n(async()=>{for(let s of t){let t=e.get(s),c=l[s];if(c!=null)for(let{onChange:e,schema:l}of c)await n(async()=>{let c;c=t.dataType.equals(a.DataType.JSON)?t.parseJSON(l):Array.from(t).map(e=>l.parse(e));for(let t of c)await n(()=>e({changed:t,client:r,store:o}),`Failed to handle streamer change for ${s}`,i.NotFoundError)},`Failed to parse streamer change for ${s}`)}},`Failed to handle streamer change for ${a.strings.naturalLanguageJoin(t)}`)}),d.close.bind(d)},h=class{store;streamCloser=null;client;constructor({client:e,openStreamer:t,storeConfig:n,handleError:r,handleAsyncError:i}){this.store=u(n,r),this.client=e,e!=null&&(t??=e?.openStreamer.bind(e),this.streamCloser=m({client:e,storeConfig:n,handleError:i,store:d(this.store,``),openStreamer:t}))}async awaitInitialized(){this.streamCloser!=null&&await this.streamCloser}scopedStore(e){return d(this.store,e)}async close(){this.streamCloser!=null&&await(await this.streamCloser)()}},g={present:`rename`,past:`renamed`,participle:`renaming`},_={present:`delete`,past:`deleted`,participle:`deleting`},v={present:`update`,past:`updated`,participle:`updating`},y={present:`create`,past:`created`,participle:`creating`},b={present:`snapshot`,past:`snapshotted`,participle:`snapshotting`},x={present:`copy`,past:`copied`,participle:`copying`},S={present:`set`,past:`set`,participle:`setting`},C={present:`save`,past:`saved`,participle:`saving`},w=e.n({Provider:()=>ee,REGISTRY:()=>re,ZERO_CONTEXT_VALUE:()=>E,use:()=>D}),T=o.z.object({props:i.synnaxParamsZ.nullable(),state:i.Synnax.connectivity.connectionStateZ.nullable()}),E={client:null},ee=class e extends n.S{static TYPE=`synnax.Provider`;static stateZ=T;schema=e.stateZ;afterUpdate(e){if(e.wasSetPreviously(te)||ne(e,E),this.state.props==null){this.internal.client!=null&&(this.internal.client?.close(),this.internal.client=null),ne(e,this.internal);return}this.prevState.props!=null&&a.deep.equal(this.state.props,this.prevState.props)&&this.internal.client!=null||(this.internal.client=new i.Synnax(this.state.props),ne(e,this.internal))}},te=`pluto-client-context`,ne=(e,t)=>e.set(te,t),D=e=>e.get(te)?.client??null,re={[ee.TYPE]:ee},ie=o.default.object({}),ae=`flux-context`,oe=`flux.Provider`,se=(e,t)=>e.get(ae).scopedStore(t),ce=e=>{let t=(t,r)=>{if(`client`in e)return e.client;let i=D(t);return r!=null&&r?.client?.key===i?.key?r:new h({client:i,storeConfig:e.storeConfig,handleError:n.v(t),handleAsyncError:n._(t)})};return class e extends n.S{static TYPE=oe;static stateZ=ie;schema=e.stateZ;afterUpdate(e){let{internal:n}=this;n.store=t(e,n.store),e.wasSetPreviously(ae)||e.set(ae,n.store)}}},le=e=>({[oe]:ce(e)}),ue=`relationships`,de=`resources`,fe={equal:(e,t)=>i.ontology.idsEqual(e.from,t.from)&&i.ontology.idsEqual(e.to,t.to)&&e.type===t.type,listeners:[{channel:i.ontology.RELATIONSHIP_SET_CHANNEL_NAME,schema:i.ontology.relationshipZ,onChange:({store:e,changed:t})=>e.relationships.set(i.ontology.relationshipToString(t),t)},{channel:i.ontology.RELATIONSHIP_DELETE_CHANNEL_NAME,schema:i.ontology.relationshipZ,onChange:({store:e,changed:t})=>{e.relationships.delete(i.ontology.relationshipToString(t))}}]},pe={equal:(e,t)=>a.deep.equal(e,t),listeners:[{channel:i.ontology.RESOURCE_SET_CHANNEL_NAME,schema:i.ontology.resourceZ,onChange:async({store:e,changed:t})=>{e.resources.set(t.key,e=>e==null?t:{...e,...t})}},{channel:i.ontology.RESOURCE_DELETE_CHANNEL_NAME,schema:i.ontology.idZ,onChange:({store:e,changed:t})=>e.resources.delete(t.key)}]},me=`policies`,he={listeners:[{channel:i.access.policy.SET_CHANNEL_NAME,schema:i.access.policy.policyZ,onChange:({store:e,changed:t})=>e.policies.set(t.key,t)},{channel:i.access.policy.DELETE_CHANNEL_NAME,schema:i.access.policy.keyZ,onChange:({store:e,changed:t})=>e.policies.delete(t)}]},ge=(e,t)=>{let n=e.relationships.get(e=>i.ontology.matchRelationship(e,{from:{type:`role`},type:i.ontology.PARENT_OF_RELATIONSHIP_TYPE,to:t})),r=e.relationships.get(e=>n.some(t=>i.ontology.matchRelationship(e,{from:t.from,type:i.ontology.PARENT_OF_RELATIONSHIP_TYPE,to:{type:`policy`}}))).map(e=>e.to.key);return e.policies.get(r)},_e=async({client:e,store:t,subject:n})=>{let r=ge(t,n);if(r.length>0)return r;r=await e.access.policies.retrieve({for:n}),t.policies.set(r);for(let a of r)(await e.ontology.retrieveParents([i.access.policy.ontologyID(a.key)],{types:[`role`]})).forEach(e=>{let r={from:e.id,type:i.ontology.PARENT_OF_RELATIONSHIP_TYPE,to:i.access.policy.ontologyID(a.key)};t.relationships.set(i.ontology.relationshipToString(r),r);let o={from:e.id,type:i.ontology.PARENT_OF_RELATIONSHIP_TYPE,to:n};t.relationships.set(i.ontology.relationshipToString(o),o)});return r};function ve(e,t,n){e.prototype=t.prototype=n,n.constructor=e}function ye(e,t){var n=Object.create(e.prototype);for(var r in t)n[r]=t[r];return n}function be(){}var xe=.7,Se=1/xe,Ce=`\\s*([+-]?\\d+)\\s*`,we=`\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*`,O=`\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*`,Te=/^#([0-9a-f]{3,8})$/,Ee=RegExp(`^rgb\\(${Ce},${Ce},${Ce}\\)$`),De=RegExp(`^rgb\\(${O},${O},${O}\\)$`),Oe=RegExp(`^rgba\\(${Ce},${Ce},${Ce},${we}\\)$`),ke=RegExp(`^rgba\\(${O},${O},${O},${we}\\)$`),Ae=RegExp(`^hsl\\(${we},${O},${O}\\)$`),je=RegExp(`^hsla\\(${we},${O},${O},${we}\\)$`),Me={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};ve(be,Le,{copy(e){return Object.assign(new this.constructor,this,e)},displayable(){return this.rgb().displayable()},hex:Ne,formatHex:Ne,formatHex8:Pe,formatHsl:Fe,formatRgb:Ie,toString:Ie});function Ne(){return this.rgb().formatHex()}function Pe(){return this.rgb().formatHex8()}function Fe(){return qe(this).formatHsl()}function Ie(){return this.rgb().formatRgb()}function Le(e){var t,n;return e=(e+``).trim().toLowerCase(),(t=Te.exec(e))?(n=t[1].length,t=parseInt(t[1],16),n===6?Re(t):n===3?new k(t>>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?ze(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?ze(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=Ee.exec(e))?new k(t[1],t[2],t[3],1):(t=De.exec(e))?new k(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=Oe.exec(e))?ze(t[1],t[2],t[3],t[4]):(t=ke.exec(e))?ze(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=Ae.exec(e))?Ke(t[1],t[2]/100,t[3]/100,1):(t=je.exec(e))?Ke(t[1],t[2]/100,t[3]/100,t[4]):Me.hasOwnProperty(e)?Re(Me[e]):e===`transparent`?new k(NaN,NaN,NaN,0):null}function Re(e){return new k(e>>16&255,e>>8&255,e&255,1)}function ze(e,t,n,r){return r<=0&&(e=t=n=NaN),new k(e,t,n,r)}function Be(e){return e instanceof be||(e=Le(e)),e?(e=e.rgb(),new k(e.r,e.g,e.b,e.opacity)):new k}function Ve(e,t,n,r){return arguments.length===1?Be(e):new k(e,t,n,r??1)}function k(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}ve(k,Ve,ye(be,{brighter(e){return e=e==null?Se:Se**+e,new k(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?xe:xe**+e,new k(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new k(A(this.r),A(this.g),A(this.b),Ge(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:He,formatHex:He,formatHex8:Ue,formatRgb:We,toString:We}));function He(){return`#${j(this.r)}${j(this.g)}${j(this.b)}`}function Ue(){return`#${j(this.r)}${j(this.g)}${j(this.b)}${j((isNaN(this.opacity)?1:this.opacity)*255)}`}function We(){let e=Ge(this.opacity);return`${e===1?`rgb(`:`rgba(`}${A(this.r)}, ${A(this.g)}, ${A(this.b)}${e===1?`)`:`, ${e})`}`}function Ge(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function A(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function j(e){return e=A(e),(e<16?`0`:``)+e.toString(16)}function Ke(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new M(e,t,n,r)}function qe(e){if(e instanceof M)return new M(e.h,e.s,e.l,e.opacity);if(e instanceof be||(e=Le(e)),!e)return new M;if(e instanceof M)return e;e=e.rgb();var t=e.r/255,n=e.g/255,r=e.b/255,i=Math.min(t,n,r),a=Math.max(t,n,r),o=NaN,s=a-i,c=(a+i)/2;return s?(o=t===a?(n-r)/s+(n<r)*6:n===a?(r-t)/s+2:(t-n)/s+4,s/=c<.5?a+i:2-a-i,o*=60):s=c>0&&c<1?0:o,new M(o,s,c,e.opacity)}function Je(e,t,n,r){return arguments.length===1?qe(e):new M(e,t,n,r??1)}function M(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}ve(M,Je,ye(be,{brighter(e){return e=e==null?Se:Se**+e,new M(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?xe:xe**+e,new M(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,i=2*n-r;return new k(Ze(e>=240?e-240:e+120,i,r),Ze(e,i,r),Ze(e<120?e+240:e-120,i,r),this.opacity)},clamp(){return new M(Ye(this.h),Xe(this.s),Xe(this.l),Ge(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){let e=Ge(this.opacity);return`${e===1?`hsl(`:`hsla(`}${Ye(this.h)}, ${Xe(this.s)*100}%, ${Xe(this.l)*100}%${e===1?`)`:`, ${e})`}`}}));function Ye(e){return e=(e||0)%360,e<0?e+360:e}function Xe(e){return Math.max(0,Math.min(1,e||0))}function Ze(e,t,n){return(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)*255}var Qe=e=>()=>e;function $e(e,t){return function(n){return e+n*t}}function et(e,t,n){return e**=+n,t=t**+n-e,n=1/n,function(r){return(e+r*t)**+n}}function tt(e){return(e=+e)==1?nt:function(t,n){return n-t?et(t,n,e):Qe(isNaN(t)?n:t)}}function nt(e,t){var n=t-e;return n?$e(e,n):Qe(isNaN(e)?t:e)}var rt=(function e(t){var n=tt(t);function r(e,t){var r=n((e=Ve(e)).r,(t=Ve(t)).r),i=n(e.g,t.g),a=n(e.b,t.b),o=nt(e.opacity,t.opacity);return function(t){return e.r=r(t),e.g=i(t),e.b=a(t),e.opacity=o(t),e+``}}return r.gamma=e,r})(1);function it(e,t){t||=[];var n=e?Math.min(t.length,e.length):0,r=t.slice(),i;return function(a){for(i=0;i<n;++i)r[i]=e[i]*(1-a)+t[i]*a;return r}}function at(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function ot(e,t){var n=t?t.length:0,r=e?Math.min(n,e.length):0,i=Array(r),a=Array(n),o;for(o=0;o<r;++o)i[o]=ht(e[o],t[o]);for(;o<n;++o)a[o]=t[o];return function(e){for(o=0;o<r;++o)a[o]=i[o](e);return a}}function st(e,t){var n=new Date;return e=+e,t=+t,function(r){return n.setTime(e*(1-r)+t*r),n}}function ct(e,t){return e=+e,t=+t,function(n){return e*(1-n)+t*n}}function lt(e,t){var n={},r={},i;for(i in(typeof e!=`object`||!e)&&(e={}),(typeof t!=`object`||!t)&&(t={}),t)i in e?n[i]=ht(e[i],t[i]):r[i]=t[i];return function(e){for(i in n)r[i]=n[i](e);return r}}var ut=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,dt=new RegExp(ut.source,`g`);function ft(e){return function(){return e}}function pt(e){return function(t){return e(t)+``}}function mt(e,t){var n=ut.lastIndex=dt.lastIndex=0,r,i,a,o=-1,s=[],c=[];for(e+=``,t+=``;(r=ut.exec(e))&&(i=dt.exec(t));)(a=i.index)>n&&(a=t.slice(n,a),s[o]?s[o]+=a:s[++o]=a),(r=r[0])===(i=i[0])?s[o]?s[o]+=i:s[++o]=i:(s[++o]=null,c.push({i:o,x:ct(r,i)})),n=dt.lastIndex;return n<t.length&&(a=t.slice(n),s[o]?s[o]+=a:s[++o]=a),s.length<2?c[0]?pt(c[0].x):ft(t):(t=c.length,function(e){for(var n=0,r;n<t;++n)s[(r=c[n]).i]=r.x(e);return s.join(``)})}function ht(e,t){var n=typeof t,r;return t==null||n===`boolean`?Qe(t):(n===`number`?ct:n===`string`?(r=Le(t))?(t=r,rt):mt:t instanceof Le?rt:t instanceof Date?st:at(t)?it:Array.isArray(t)?ot:typeof t.valueOf!=`function`&&typeof t.toString!=`function`||isNaN(t)?lt:ct)(e,t)}function gt(e,t){return e=+e,t=+t,function(n){return Math.round(e*(1-n)+t*n)}}var N=class extends a.observe.Observer{cleanup(){}},_t=class extends N{static TYPE=`noop-boolean-sink`;set(){}},vt={type:_t.TYPE,props:{},variant:`sink`,valueType:`boolean`},yt=class extends N{static TYPE=`noop-numeric-sink`;set(){}},bt={type:yt.TYPE,props:{},variant:`sink`,valueType:`number`},xt=class extends N{static TYPE=`noop-boolean-source`;value(){return!1}},St={type:xt.TYPE,props:{},variant:`source`,valueType:`boolean`},Ct=class extends N{static TYPE=`noop-numeric-source`;value(){return 0}},wt={type:Ct.TYPE,props:{},variant:`source`,valueType:`number`},Tt=class extends N{static TYPE=`noop-string-sink`;set(){}},Et={type:Tt.TYPE,props:{},variant:`sink`,valueType:`string`},Dt=class extends N{static TYPE=`noop-string-source`;value(){return``}},Ot={type:Dt.TYPE,props:{},variant:`source`,valueType:`string`},kt=class extends N{static TYPE=`noop-status-source`;value(){return{key:`noop`,name:`noop`,variant:`disabled`,message:`unknown`,time:a.TimeStamp.now()}}},At={type:kt.TYPE,props:{},variant:`source`,valueType:`status`},jt=class extends N{static TYPE=`noop-color-source`;value(){return a.color.ZERO}},Mt={type:jt.TYPE,props:{},variant:`source`,valueType:`color`},Nt=class extends N{static TYPE=`noop-series`;value(){return[a.bounds.ZERO,new a.MultiSeries([])]}},Pt={type:Nt.TYPE,props:{},variant:`source`,valueType:`series`},Ft={[_t.TYPE]:_t,[yt.TYPE]:yt,[Tt.TYPE]:Tt,[xt.TYPE]:xt,[Ct.TYPE]:Ct,[kt.TYPE]:kt,[jt.TYPE]:jt,[Dt.TYPE]:Dt,[Nt.TYPE]:Nt},It=class{type=`noop`;create(e){let t=Ft[e.type];return t==null?null:new t}},Lt=o.z.instanceof(ArrayBuffer),Rt=o.z.object({type:o.z.string(),variant:o.z.enum([`source`,`sink`,`source-transformer`,`sink-transformer`]),valueType:o.z.string(),props:o.z.any(),transfer:o.z.array(Lt).optional()}),P=Rt.extend({variant:o.z.literal(`source`)}),zt=Rt.extend({variant:o.z.literal(`sink`)}),Bt=Rt.extend({variant:o.z.literal(`source-transformer`)}),Vt=Rt.extend({variant:o.z.literal(`sink-transformer`)}),Ht=P.extend({valueType:o.z.literal(`series`)}),Ut=P.extend({valueType:o.z.literal(`boolean`)}),Wt=zt.extend({valueType:o.z.literal(`boolean`)}),Gt=Vt.extend({valueType:o.z.literal(`boolean`)}),Kt=Bt.extend({valueType:o.z.literal(`boolean`)}),qt=P.extend({valueType:o.z.literal(`number`)}),Jt=zt.extend({valueType:o.z.literal(`number`)}),Yt=P.extend({valueType:o.z.literal(`color`)}),Xt=P.extend({valueType:o.z.literal(`status`)}),Zt=P.extend({valueType:o.z.literal(`string`)}),Qt=zt.extend({valueType:o.z.literal(`string`)}),$t=class extends a.observe.BaseObserver{props_=void 0;uProps_=void 0;constructor(e){super(),this.uProps_=e}get props(){if(this.props_==null){let e=this.schema.safeParse(this.uProps_);if(e.success)this.props_=e.data;else throw new i.ValidationError(`[BaseTelem] - expected props to be valid, but found the following errors:
|
|
2
|
+
${e.error.message}`)}return this.props_}cleanup(){}},F=class extends $t{},en=class extends $t{},I=class extends F{source_=void 0;get source(){if(this.source_==null)throw new i.ValidationError(`[UnarySourceTransformer] - expected source to exist, but none was found.`);return this.source_}value(){return this.transform(this.source.value())}onChange(e){return this.source.onChange(()=>{this.shouldNotify(this.source.value())&&e()})}setSources(e){this.source_=Object.values(e)[0]}shouldNotify(e){return!0}},tn=class extends F{sources={};value(){let e=Object.fromEntries(Object.entries(this.sources).map(([e,t])=>[e,t.value()]));return this.transform(e)}setSources(e){this.sources={...this.sources,...e}}},nn=class extends $t{sinks={};get sink(){let[e]=Object.values(this.sinks);if(e==null)throw new i.ValidationError(`[UnarySinkTransformer] - expected sink to exist, but none was found.`);return e}set(...e){return this.sink.set(...this.transform(...e))}setSinks(e){this.sinks={...this.sinks,...e}}},rn=o.z.object({from:o.z.string(),to:o.z.string()}),an=o.z.object({connections:o.z.array(rn),outlet:o.z.string(),segments:o.z.record(o.z.string(),P)}),on=class{type=`pipeline`;factory;constructor(e){this.factory=e}create(e){switch(e.type){case sn.TYPE:return new sn(e.props,this.factory);case un.TYPE:return new un(e.props,this.factory);default:return null}}},sn=class extends F{static TYPE=`source-pipeline`;schema=an;sources={};get outlet(){let{outlet:e}=this.props,t=this.sources[e];if(t==null)throw new i.ValidationError(`[SourcePipeline] - expected source to exist at outlet '${e}', but none was found.`);return t}constructor(e,t){super(e);let{connections:n,segments:r}=this.props;Object.entries(r).forEach(([e,n])=>{let r=t.create(n);r!=null&&(this.sources[e]=r)}),n.forEach(({from:e,to:t})=>{let n=this.sources[e],r=this.sources[t];n==null||r==null||`setSources`in r&&r.setSources({[e]:n})})}value(){return this.outlet.value()}onChange(e){return this.outlet.onChange(e)}cleanup(){Object.values(this.sources).forEach(e=>e.cleanup?.())}},cn=(e,t)=>({variant:`source`,props:t,type:sn.TYPE,valueType:e}),ln=o.z.object({connections:o.z.array(rn),inlet:o.z.string(),segments:o.z.record(o.z.string(),zt)}),un=class extends en{static TYPE=`sink-pipeline`;schema=ln;sinks={};get inlet(){let{inlet:e}=this.props,t=this.sinks[e];if(t==null)throw new i.ValidationError(`[SinkPipeline] - expected source to exist at inlet '${e}', but none was found.`);return t}constructor(e,t){super(e);let{connections:n,segments:r}=this.props;Object.entries(r).forEach(([e,n])=>{let r=t.create(n);r!=null&&(this.sinks[e]=r)}),n.forEach(({from:e,to:t})=>{let n=this.sinks[e],r=this.sinks[t];n==null||r==null||`setSinks`in n&&n.setSinks({[t]:r})})}set(...e){return this.inlet.set(...e)}cleanup(){Object.values(this.sinks).forEach(e=>e.cleanup?.())}},dn=(e,t)=>({variant:`sink`,props:t,type:un.TYPE,valueType:e}),fn=o.z.object({channel:o.z.number().or(o.z.string())}),pn=class extends F{static TYPE=`stream-channel-value`;schema=fn;client;removeStreamHandler=null;leadingBuffer=null;valid=!1;onStatusChange;constructor(e,t,n){super(t),this.client=e,this.onStatusChange=n?.onStatusChange}get testingOnlyLeadingBuffer(){return this.leadingBuffer}get testingOnlyValid(){return this.valid}cleanup(){this.removeStreamHandler?.(),this.valid=!1,this.leadingBuffer?.release(),this.leadingBuffer=null,this.removeStreamHandler=null}value(){return a.primitive.isZero(this.props.channel)||(this.valid||this.read(),this.leadingBuffer==null||this.leadingBuffer.length===0)?NaN:this.leadingBuffer.at(-1,!0)}async read(){try{this.valid=!0,this.removeStreamHandler?.();let e=await this.client.retrieveChannel(this.props.channel);this.removeStreamHandler=await this.client.stream(t=>{let n=t.get(e.key);if(n==null)return;let r=n.series.at(-1);r!=null&&(r.acquire(),this.leadingBuffer?.release(),this.leadingBuffer=r),this.notify()},[e.key]),this.notify()}catch(e){this.valid=!1,this.onStatusChange?.(a.status.fromException(e,`failed to stream channel value`))}}},mn=async(e,t,n)=>{let r=await e.retrieveChannel(t),o=i.channel.isCalculated(r);if(!n||r.isIndex)return{key:r.key,dataType:r.dataType,virtual:r.virtual,isCalculated:o};if(r.virtual&&!o)throw new i.NotFoundError(`cannot use virtual channels as a data source`);return{key:r.index,dataType:a.DataType.TIMESTAMP,virtual:!1,isCalculated:o}},hn=o.z.object({timeRange:a.TimeRange.z,channel:o.z.number().or(o.z.string()),useIndexOfChannel:o.z.boolean().default(!1)}),gn=class extends F{static TYPE=`series-source`;client;schema=hn;data=new a.MultiSeries;valid=!1;channel=null;onStatusChange;constructor(e,t,n){super(t),this.client=e,this.onStatusChange=n?.onStatusChange}cleanup(){this.data.release(),this.valid=!1,this.channel=null}value(){let{channel:e,timeRange:t}=this.props;if(t.span.isZero||e===0)return[a.bounds.ZERO,this.data];this.valid||this.read();let{channel:n,data:r}=this;if(n==null)return[a.bounds.ZERO,this.data];let i=r.bounds;return n.dataType.equals(a.DataType.TIMESTAMP)&&(i=a.bounds.min([i,t.numericBounds])),[i,r]}async read(){try{this.valid=!0;let{timeRange:e,channel:t,useIndexOfChannel:n}=this.props;this.channel=await mn(this.client,t,n);let r=await this.client.read(e,this.channel.key);r.acquire(),this.data=r,this.notify()}catch(e){this.valid=!1,this.onStatusChange?.(a.status.fromException(e,`failed to read channel data`))}}},_n=o.z.object({channel:o.z.number().or(o.z.string()),useIndexOfChannel:o.z.boolean().default(!1),timeSpan:a.TimeSpan.z,keepFor:a.TimeSpan.z.optional()}),vn=class extends F{static TYPE=`dynamic-series-source`;client;data=new a.MultiSeries([]);now;onStatusChange;channel=null;stopStreaming;valid=!1;schema=_n;constructor(e,t,n,r=()=>a.TimeStamp.now()){super(t),this.client=e,this.now=r,this.onStatusChange=n?.onStatusChange}value(){let{channel:e,timeSpan:t}=this.props;if(e===0)return[a.bounds.ZERO,this.data];this.valid||this.read();let{data:n,channel:r}=this,i=this.now();if(r!=null&&r.dataType.isVariable)return[a.bounds.ZERO,this.data];let o=n.series.filter(e=>e.timeRange.end.after(i.sub(t))).map(e=>e.bounds),s=a.bounds.max(o);return r!=null&&r.dataType.equals(a.DataType.TIMESTAMP)&&(s.lower=Math.max(s.lower,s.upper-Number(t.valueOf()))),[s,this.data]}async read(){try{this.valid=!0;let{channel:e,useIndexOfChannel:t,timeSpan:n}=this.props;this.channel=await mn(this.client,e,t);let r=this.now().spanRange(-n);if(!this.channel.virtual||this.channel.isCalculated)try{let e=await this.client.read(r,this.channel.key);e.acquire(),this.data.push(e)}catch(e){if(e instanceof Error&&(e.message.includes(`cannot open iterator on virtual channel`)||e.message.includes(`cannot read from free channel`)))console.warn(`failed to read calculated channel data`,e);else throw e}this.stopStreaming?.(),this.stopStreaming=await this.client.stream(e=>{if(this.channel==null)return;let t=e.get(this.channel.key);t!=null&&(t.acquire(),this.data.push(t),this.notify(),this.gcOutOfRangeData())},[this.channel.key]),this.notify()}catch(e){this.valid=!1,this.onStatusChange?.(a.status.fromException(e,`failed to stream channel data`))}}gcOutOfRangeData(){let e=this.now().sub(this.props.keepFor??this.props.timeSpan),t=this.data.series.findIndex(t=>t.timeRange.end.before(e));t!==-1&&(this.data.series.splice(t,1).forEach(e=>e.release()),this.gcOutOfRangeData())}cleanup(){this.stopStreaming?.(),this.stopStreaming=void 0,this.data.release(),this.valid=!1}},yn={[gn.TYPE]:gn,[vn.TYPE]:vn,[pn.TYPE]:pn},bn=class{type=`remote`;client;constructor(e){this.client=e}create(e,t){let n=yn[e.type];return n==null?null:new n(this.client,e.props,t)}},xn=e=>({type:gn.TYPE,props:e,variant:`source`,valueType:`series`}),Sn=e=>({type:vn.TYPE,props:e,variant:`source`,valueType:`series`}),Cn=e=>({type:pn.TYPE,props:e,variant:`source`,valueType:`number`}),wn=class{type=`static`;create(e){switch(e.type){case En.TYPE:return new En(e.props);case On.TYPE:return new On(e.props);case An.TYPE:return new An(e.props);case Mn.TYPE:return new Mn(e.props);case Pn.TYPE:return new Pn(e.props);default:return null}}},Tn=o.z.object({data:o.z.array(a.typedArrayZ),offsets:o.z.array(o.z.number()).default([])}),En=class extends F{data;schema=Tn;static TYPE=`static-series`;constructor(e){super(e),this.data=this.props.data.map((e,t)=>new a.Series({data:e,dataType:a.DataType.FLOAT32,timeRange:a.TimeRange.ZERO,sampleOffset:this.props.offsets[t]??0}))}value(){return[a.bounds.max(this.data.map(e=>e.bounds)),this.data]}},Dn=Tn.extend({rate:a.Rate.z,yOffset:o.z.number().default(0),scroll:o.z.number().default(0),startPosition:o.z.number().default(0),scrollBounds:o.z.boolean().default(!1)}),On=class extends F{static TYPE=`iterative-series`;schema=Dn;position;interval;data;constructor(e){super(e),this.position=this.props.startPosition,this.start(this.props.rate),this.data=this.props.data.map((e,t)=>new a.Series({data:e,dataType:a.DataType.FLOAT32,timeRange:a.TimeRange.ZERO,sampleOffset:this.props.offsets[t]??0}))}value(){let e=this.data.map(e=>e.slice(0,this.position));if(this.props.scrollBounds){let t=e[0].data[this.position-this.props.scroll<0?0:this.position-this.props.scroll],n=e[0].data[this.position-1];return[{lower:Number(t),upper:Number(n)},new a.MultiSeries(e)]}return[a.bounds.max(e.map(e=>e.bounds)),new a.MultiSeries(e)]}start(e){this.interval!=null&&clearInterval(this.interval),this.interval=setInterval(()=>{this.notify?.(),this.position++},e.period.milliseconds)}cleanup(){clearInterval(this.interval),this.interval=void 0}},kn=o.z.number(),An=class extends F{static TYPE=`static-numeric`;schema=kn;value(){return this.props}},jn=o.z.string(),Mn=class extends F{static TYPE=`static-string`;schema=jn;value(){return this.props}},Nn=a.color.crudeZ,Pn=class extends F{static TYPE=`static-color`;schema=Nn;value(){return a.color.construct(this.props)}},Fn=e=>({type:En.TYPE,props:e,variant:`source`,valueType:`series`}),In=e=>({type:On.TYPE,props:e,variant:`source`,valueType:`series`}),Ln=e=>({type:An.TYPE,props:e,variant:`source`,valueType:`number`}),Rn=e=>({type:Mn.TYPE,props:e,variant:`source`,valueType:`string`}),zn=e=>({type:Pn.TYPE,props:e,variant:`source`,valueType:`color`}),Bn=class{type=`transformer`;create(e){switch(e.type){case Un.TYPE:return new Un(e.props);case Kn.TYPE:return new Kn(e.props);case Jn.TYPE:return new Jn(e.props);case Zn.TYPE:return new Zn(e.props);case er.TYPE:return new er(e.props);case rr.TYPE:return new rr(e.props);case or.TYPE:return new or(e.props);case lr.TYPE:return new lr(e.props)}return null}},Vn=o.z.object({truthy:o.z.number().default(1),falsy:o.z.number().default(0)}),Hn=e=>({props:e,type:Un.TYPE,variant:`sink`,valueType:`boolean`}),Un=class e extends nn{static TYPE=`boolean-numeric-converter-sink`;static propsZ=Vn;schema=e.propsZ;transform(...e){return e.map(e=>e?this.props.truthy:this.props.falsy)}},Wn=o.z.object({trueBound:a.bounds.boundsZ}),Gn=e=>({props:e,type:Kn.TYPE,variant:`source`,valueType:`boolean`}),Kn=class e extends I{static TYPE=`boolean-source`;static propsZ=Wn;schema=e.propsZ;curr=null;shouldNotify(e){let t=a.bounds.contains(this.props.trueBound,e)!==this.curr;return this.curr=a.bounds.contains(this.props.trueBound,e),t}transform(e){return this.curr=a.bounds.contains(this.props.trueBound,e),this.curr}},qn=o.z.object({}),Jn=class e extends tn{static TYPE=`mean`;static propsZ=qn;schema=e.propsZ;transform(e){return Object.values(e).reduce((e,t)=>e+t,0)/Object.keys(e).length}},Yn=e=>({props:e,type:Jn.TYPE,variant:`source`,valueType:`boolean`}),Xn=o.z.object({trueVariant:a.status.variantZ.default(`success`)}),Zn=class e extends I{static TYPE=`boolean-status`;static propsZ=Xn;schema=e.propsZ;transform(e){return e.variant===this.props.trueVariant}},Qn=e=>({props:e,type:Zn.TYPE,variant:`source`,valueType:`boolean`}),$n=o.z.object({precision:o.z.number().default(2),prefix:o.z.string().default(``),suffix:o.z.string().default(``),notation:a.notation.notationZ.default(`standard`)}),er=class e extends I{static TYPE=`stringify-number`;static propsZ=$n;schema=e.propsZ;transform(e){if(isNaN(e))return``;let{precision:t,prefix:n,suffix:r,notation:i}=this.props;return`${n}${a.notation.stringifyNumber(e,t,i)}${r}`}},tr=e=>({props:e,type:er.TYPE,variant:`source`,valueType:`string`}),nr=o.z.object({windowSize:o.z.number().default(5)}),rr=class extends I{static TYPE=`rolling-average`;static propsZ=qn;schema=nr;values=[];transform(e){return this.props.windowSize<2||isNaN(e)?e:this.values.reduce((e,t)=>e+t,0)/this.values.length}shouldNotify(e){return this.props.windowSize<2?!0:(this.values.length>this.props.windowSize&&(this.values=[]),this.values.push(e),this.values.length===this.props.windowSize)}},ir=e=>({props:e,type:rr.TYPE,variant:`source`,valueType:`number`}),ar=o.z.object({gradient:a.color.gradientZ}),or=class e extends I{static TYPE=`color-gradient`;static propsZ=ar;schema=e.propsZ;transform(e){return a.color.fromGradient(this.props.gradient,e)}},sr=e=>({props:e,type:or.TYPE,variant:`source`,valueType:`color`}),cr=o.z.object({scale:a.scale.transform}),lr=class e extends I{static TYPE=`scale-number`;static propsZ=cr;schema=e.propsZ;transform(e){if(isNaN(e))return e;let{offset:t,scale:n}=this.props.scale;return e*n+t}},ur=e=>({props:e,type:lr.TYPE,variant:`source`,valueType:`number`}),dr=o.z.enum([`average`,`decimate`]),fr=o.z.object({mode:dr,windowSize:o.z.number().default(5)}),pr=e=>({props:e,type:gr.TYPE,variant:`source`,valueType:`number`}),mr=(e,t,n)=>{let r=t.length*n;for(let i=r;i<e.length;i+=n){let n=e.sub(i,i+1);n!==void 0&&t.write(n)}},hr={decimate:mr,average:(e,t,n)=>{let r=t.length*n;for(let i=r;i<e.length&&!(i+n>e.length);i+=n){let r=Math.min(i+n,e.length),o=0,s=0;for(let t=i;t<r;t++){let n=e.at(t);n!==void 0&&typeof n==`number`&&(o+=n,s++)}s>0&&t.write(new a.Series({data:[o/s],dataType:e.dataType}))}}},gr=class{static TYPE=`series-downsampler`;_downsample=null;cache=new a.MultiSeries;props;constructor(e){this.props=e}downsample(e){return this._downsample??(e.series[0].sampleOffset===0?this._downsample=hr[this.props.mode]:this._downsample=mr),this._downsample}transform(e){if(this.props.mode===`decimate`||this.props.windowSize<=1)return e;if(e.series.length===0)return this.cache;for(;this.cache.series.length>0&&!this.cache.series[0].key.startsWith(e.series[0].key);)this.cache.series.shift();return e.series.forEach((t,n)=>{let r=this.cache.series.at(n);if(r==null){let e=Math.ceil(t.capacity/this.props.windowSize);r=a.Series.alloc({key:t.key+a.id.create(),dataType:t.dataType,capacity:e,alignment:t.alignment,alignmentMultiple:BigInt(this.props.windowSize),sampleOffset:t.sampleOffset,timeRange:t.timeRange}),this.cache.push(r)}else if(!r.key.startsWith(t.key))throw new i.UnexpectedError(`[SeriesDownsampler] - expected series with key ${t.key} to be in cache, but found ${r.key}`);this.downsample(e)(t,r,this.props.windowSize)}),this.cache}},_r=e=>({props:e,type:gr.TYPE,variant:`source`,valueType:`series`}),vr=class{factories;type=`compound`;constructor(e){this.factories=e}add(e){this.factories=[...this.factories.filter(t=>t.type!==e.type),e]}create(e,t){for(let n of this.factories){let r=n.create(e,t);if(r!=null)return r}return null}},yr=e=>{let t=new vr([new Bn,new wn,new It]);return e!=null&&t.add(new bn(e)),t.add(new on(t)),t},br=class e{factory;key;parent;constructor(e,t){this.factory=e,this.key=a.id.create(),this.parent=t}child(t,n){let r=new vr([...this.factory.factories,...a.array.toArray(t)]);return r.add(new on(r)),new e(r,n)}create(e,t){let n=this.factory.create(e,t);if(n==null)throw new i.UnexpectedError(`Telemetry service could not find a source for type ${e.type}`);return n}},xr=`pluto-telem-context`,Sr=e=>e.get(xr),Cr=(e,t)=>e.set(xr,t),wr=(e,t,n)=>{let r=Sr(e);if(r!=null&&n!=null&&r.key===n?.parent?.key)return n;let i=r.child(t,r);return e.set(xr,i),i},Tr=class{spec;wrapped;prevProv;constructor(e,t,n){this.wrapped=e,this.spec=n,this.prevProv=t}shouldUpdate(e,t){return this.prevProv.key!==e.key||!a.deep.equal(this.spec,t)}},Er=class extends Tr{value(){return this.wrapped.value()}cleanup(){this.wrapped.cleanup?.()}onChange(e){return this.wrapped.onChange(e)}},Dr=class extends Tr{set(...e){this.wrapped.set(...e)}cleanup(){this.wrapped.cleanup?.()}},L=(e,t,n,r)=>{let i=Sr(e);if(n instanceof Er){if(!n.shouldUpdate(i,t))return n;n.cleanup?.()}return new Er(i.create(t,r),i,t)},Or=(e,t,n,r)=>{let i=Sr(e);if(n instanceof Dr){if(!n.shouldUpdate(i,t))return n;n.cleanup?.()}return new Dr(i.create(t,r),i,t)},kr=(e,t)=>e.dataType.isVariable||e.dataType.equals(a.DataType.UINT8)?e:(t==null&&e.dataType.equals(a.DataType.TIMESTAMP)&&(t=BigInt(e.data[0])),e.convert(a.DataType.FLOAT32,t)),Ar=e=>e.isVariable||e.equals(a.DataType.UINT8)?e:a.DataType.FLOAT32,jr=()=>({purgedSeries:0,purgedBytes:a.Size.bytes(0)}),Mr={instrumentation:s.alamos.NOOP,staleEntryThreshold:a.TimeSpan.seconds(20)},Nr=class{data=[];props;constructor(e){this.props={...Mr,...e}}write(e){e.length!==0&&(e.series.forEach(e=>this.writeOne(kr(e))),this.checkIntegrity(e))}dirtyRead(e){let t=this.data.filter(({data:t})=>t.timeRange.overlapsWith(e)).map(({data:e})=>e);if(t.length===0)return{series:new a.MultiSeries([]),gaps:[e]};let n=t.map((e,n)=>n===0?a.TimeRange.ZERO:new a.TimeRange(t[n-1].timeRange.end,e.timeRange.start)).filter(e=>!e.span.isZero&&e.isValid),r=new a.TimeRange(e.start,t[0].timeRange.start),i=new a.TimeRange(t[t.length-1].timeRange.end,e.end);return r.isValid&&!r.span.isZero&&n.unshift(r),i.isValid&&!i.span.isZero&&n.push(i),{series:new a.MultiSeries(t),gaps:n}}gc(){let{staleEntryThreshold:e}=this.props,t=jr(),n=this.data.filter(n=>{let r=n.data.refCount>0||a.TimeStamp.since(n.addedAt).lessThan(e);return r||(t.purgedBytes=t.purgedBytes.add(n.data.byteCapacity)),r});return t.purgedSeries=this.data.length-n.length,this.data=n,t}close(){this.data=[]}writeOne(e){let{instrumentation:{L:t}}=this.props;if(e.length===0)return;let n=a.bounds.buildInsertionPlan(this.data.map(e=>e.data.alignmentBounds),e.alignmentBounds);if(n===null)return t.debug(`Found no viable insertion plan`,{inserting:e.digest,cacheContents:this.data.map(e=>e.data.digest)});let{removeBefore:r,removeAfter:i,insertInto:o,deleteInBetween:s}=n;e=e.slice(r,e.data.length-i),e.length!==0&&this.data.splice(o,s,{data:e,addedAt:a.TimeStamp.now()})}checkIntegrity(e){let{instrumentation:{L:t}}=this.props,n=this.data.map(e=>e.data.alignmentBounds);if(n.some((e,t)=>n.some((n,r)=>t===r?!1:a.bounds.overlapsWith(e,n))))throw t.debug(`Cache is in an invalid state - bounds overlap!`,()=>({write:e.series.map(e=>e.digest),cacheContents:this.data.map(e=>e.data.digest)})),Error(`Invalid state`)}},Pr=100,Fr=1e6,Ir=1e4,Lr=100,Rr=40,zr=class{props;counter=0;curr;avgRate=0;timeOfLastWrite;totalWrites=0;now=()=>a.TimeStamp.now();constructor(e){this.props=e,this.curr=null,e.now!=null&&(this.now=e.now),this.timeOfLastWrite=this.now()}get length(){return this.curr?.length??0}get leadingBuffer(){return this.curr}write(e){let t=e.series.flatMap(e=>this._write(e));return{flushed:new a.MultiSeries(t.flatMap(e=>e.flushed.series)),allocated:new a.MultiSeries(t.flatMap(e=>e.allocated.series))}}allocate(e,t,n){this.counter++;let r=this.props.dataType.isVariable,i=this.props.dataType.equals(a.DataType.TIMESTAMP);return a.Series.alloc({capacity:r?e*Rr:e,dataType:Ar(this.props.dataType),timeRange:n.range(a.TimeStamp.MAX),sampleOffset:i?n.valueOf():0,glBufferUsage:`dynamic`,alignment:t,key:`dynamic-${this.counter}`})}_write(e){let t=this.nextBufferSize(),n={flushed:new a.MultiSeries([]),allocated:new a.MultiSeries([])};if(this.curr==null)this.curr=this.allocate(t,e.alignment,this.now()),n.allocated.push(this.curr);else if(Math.abs(Number(this.curr.alignment+BigInt(this.curr.length)-e.alignment))>1){let r=this.now();this.curr.timeRange.end=r,n.flushed.push(this.curr),this.curr=this.allocate(t,e.alignment,r),n.allocated.push(this.curr)}let r=kr(e,this.curr.sampleOffset),i=this.curr.write(r);if(i===e.length)return this.updateAvgRate(e),n;let o=this.now();this.curr.timeRange.end=o,n.flushed.push(this.curr),this.curr=this.allocate(t,e.alignment+BigInt(i),o),n.allocated.push(this.curr);let s=this._write(e.slice(i));return n.flushed.push(s.flushed),n.allocated.push(s.allocated),n}updateAvgRate(e){if(typeof this.props.dynamicBufferSize==`number`)return;let t=e.length/this.now().span(this.timeOfLastWrite).seconds;this.totalWrites>0&&isFinite(t)&&t>0&&(this.avgRate=(this.avgRate*(this.totalWrites-1)+t)/this.totalWrites),this.totalWrites++,this.timeOfLastWrite=this.now()}nextBufferSize(){let{dynamicBufferSize:e}=this.props;if(typeof e==`number`)return e;if(this.totalWrites<Lr)return Ir;let t=a.math.roundToNearestMagnitude(this.avgRate*e.seconds);return Math.round(Math.max(Math.min(t,Fr),Pr))}close(){this.curr=null}},Br=class{channel;closed=!1;ins;static;dynamic;constructor(e){this.channel=e.channel,this.ins=e.instrumentation??s.alamos.NOOP,this.static=new Nr(e),this.dynamic=new zr({dynamicBufferSize:e.dynamicBufferSize,dataType:this.channel.dataType})}writeDynamic(e){if(this.closed)return this.ins.L.warn(`Ignoring attempted dynamic write to a closed cache for channel ${this.channel.name}`),new a.MultiSeries([]);let{flushed:t,allocated:n}=this.dynamic.write(e);return t.length>0&&this.static.write(t),n}get leadingBuffer(){return this.dynamic.leadingBuffer}writeStatic(e){if(this.closed)return this.ins.L.warn(`Ignoring attempted static write to a closed cache for channel ${this.channel.name}`);this.static.write(e)}read(e){return this.closed?(this.ins.L.warn(`Ignoring attempted dirty read from a closed cache for channel ${this.channel.name}`),{series:new a.MultiSeries([]),gaps:[e]}):this.static.dirtyRead(e)}gc(){return this.closed?(this.ins.L.warn(`Ignoring attempted garbage collection on a closed cache for channel ${this.channel.name}`),{purgedSeries:0,purgedBytes:a.Size.bytes(0)}):this.static.gc()}close(){this.closed=!0,this.dynamic.close(),this.static.close()}},Vr=i.TimeSpan.seconds(60),Hr=class{props;cache=new Map;gcInterval;constructor(e){this.props={dynamicBufferSize:Vr,gcInterval:i.TimeSpan.seconds(30),...Mr,...e},this.gcInterval=setInterval(()=>this.gc(),this.props.gcInterval.milliseconds)}async populateMissing(e){let{instrumentation:t,channelRetriever:n,dynamicBufferSize:r}=this.props,i=[];for(let t of e)this.cache.has(t)||i.push(t);i.length!==0&&(await n.retrieve(i)).forEach(e=>{if(this.cache.has(e.key))return;let n=new Br({channel:e,dynamicBufferSize:r,instrumentation:t.child(`cache-${e.name}-${e.key}`)});this.cache.set(e.key,n)})}get(e){let t=this.cache.get(e);if(t!=null)return t;throw new i.UnexpectedError(`cache entry for ${e} not found`)}gc(){let{instrumentation:{L:e}}=this.props;e.info(`starting garbage collection`);let t=jr();this.cache.forEach(e=>{let n=e.gc();t.purgedSeries+=n.purgedSeries,t.purgedBytes=t.purgedBytes.add(n.purgedBytes)}),e.info(`garbage collection complete`,{purgedSeries:t.purgedSeries,purgedBytes:t.purgedBytes.toString()},!0)}close(){clearInterval(this.gcInterval),this.cache.forEach(e=>e.close()),this.cache.clear()}},Ur=class{args;debouncedRead;mu=a.sync.newMutex({requests:new Set,closed:!1});constructor(e){this.args={...e,instrumentation:e.instrumentation??s.alamos.NOOP,batchDebounce:e.batchDebounce??a.TimeSpan.milliseconds(50),overlapThreshold:e.overlapThreshold??a.TimeSpan.milliseconds(5)};let t=this.args.batchDebounce.milliseconds;this.debouncedRead=(0,a.debounce)(()=>void this.batchRead(),t)}async read(e,t){let{cache:n}=this.args;await n.populateMissing([t]);let r=n.get(t),{series:i,gaps:a}=r.read(e);if(a.length===0)return i;let{mu:o}=this;return await new Promise((e,n)=>{o.runExclusive(async()=>{o.closed||o.requests.add({channel:t,gaps:a,resolve:e,reject:n})}),this.debouncedRead()}),r.read(e).series}async batchRead(){let{readRemote:e,cache:t,overlapThreshold:n}=this.args,{mu:r}=this;await r.runExclusive(async()=>{let i=e=>r.requests.forEach(({resolve:t,reject:n})=>e==null?t():n(e));try{if(r.closed)return i();let o=[];r.requests.forEach(({channel:e,gaps:t})=>t.forEach(t=>{let r=o.find(e=>e.gap.equals(t,n));r==null?o.push({gap:t,channels:new Set([e])}):(r.channels.add(e),r.gap=a.TimeRange.max(r.gap,t))})),await Promise.all(o.map(async({gap:n,channels:r})=>{let i=await e(n,Array.from(r));r.forEach(e=>t.get(e).writeStatic(i.get(e)))})),i()}catch(e){i(e)}finally{r.requests.clear()}})}async close(){await this.mu.runExclusive(async()=>{this.mu.closed=!0})}},Wr=Error(`request for lock canceled`),Gr=function(e,t,n,r){function i(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||=Promise)(function(n,a){function o(e){try{c(r.next(e))}catch(e){a(e)}}function s(e){try{c(r.throw(e))}catch(e){a(e)}}function c(e){e.done?n(e.value):i(e.value).then(o,s)}c((r=r.apply(e,t||[])).next())})},Kr=class{constructor(e,t=Wr){this._value=e,this._cancelError=t,this._queue=[],this._weightedWaiters=[]}acquire(e=1,t=0){if(e<=0)throw Error(`invalid weight ${e}: must be positive`);return new Promise((n,r)=>{let i={resolve:n,reject:r,weight:e,priority:t},a=Jr(this._queue,e=>t<=e.priority);a===-1&&e<=this._value?this._dispatchItem(i):this._queue.splice(a+1,0,i)})}runExclusive(e){return Gr(this,arguments,void 0,function*(e,t=1,n=0){let[r,i]=yield this.acquire(t,n);try{return yield e(r)}finally{i()}})}waitForUnlock(e=1,t=0){if(e<=0)throw Error(`invalid weight ${e}: must be positive`);return this._couldLockImmediately(e,t)?Promise.resolve():new Promise(n=>{this._weightedWaiters[e-1]||(this._weightedWaiters[e-1]=[]),qr(this._weightedWaiters[e-1],{resolve:n,priority:t})})}isLocked(){return this._value<=0}getValue(){return this._value}setValue(e){this._value=e,this._dispatchQueue()}release(e=1){if(e<=0)throw Error(`invalid weight ${e}: must be positive`);this._value+=e,this._dispatchQueue()}cancel(){this._queue.forEach(e=>e.reject(this._cancelError)),this._queue=[]}_dispatchQueue(){for(this._drainUnlockWaiters();this._queue.length>0&&this._queue[0].weight<=this._value;)this._dispatchItem(this._queue.shift()),this._drainUnlockWaiters()}_dispatchItem(e){let t=this._value;this._value-=e.weight,e.resolve([t,this._newReleaser(e.weight)])}_newReleaser(e){let t=!1;return()=>{t||(t=!0,this.release(e))}}_drainUnlockWaiters(){if(this._queue.length===0)for(let e=this._value;e>0;e--){let t=this._weightedWaiters[e-1];t&&(t.forEach(e=>e.resolve()),this._weightedWaiters[e-1]=[])}else{let e=this._queue[0].priority;for(let t=this._value;t>0;t--){let n=this._weightedWaiters[t-1];if(!n)continue;let r=n.findIndex(t=>t.priority<=e);(r===-1?n:n.splice(0,r)).forEach((e=>e.resolve()))}}}_couldLockImmediately(e,t){return(this._queue.length===0||this._queue[0].priority<t)&&e<=this._value}};function qr(e,t){let n=Jr(e,e=>t.priority<=e.priority);e.splice(n+1,0,t)}function Jr(e,t){for(let n=e.length-1;n>=0;n--)if(t(e[n]))return n;return-1}var Yr=function(e,t,n,r){function i(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||=Promise)(function(n,a){function o(e){try{c(r.next(e))}catch(e){a(e)}}function s(e){try{c(r.throw(e))}catch(e){a(e)}}function c(e){e.done?n(e.value):i(e.value).then(o,s)}c((r=r.apply(e,t||[])).next())})},Xr=class{constructor(e){this._semaphore=new Kr(1,e)}acquire(){return Yr(this,arguments,void 0,function*(e=0){let[,t]=yield this._semaphore.acquire(1,e);return t})}runExclusive(e,t=0){return this._semaphore.runExclusive(()=>e(),1,t)}isLocked(){return this._semaphore.isLocked()}waitForUnlock(e=0){return this._semaphore.waitForUnlock(1,e)}release(){this._semaphore.isLocked()&&this._semaphore.release()}cancel(){return this._semaphore.cancel()}},Zr=a.TimeSpan.milliseconds(100).milliseconds,Qr=a.Rate.hz(60).valueOf(),$r=class{props;mu=new Xr;listeners=new Map;debouncedUpdateStreamer;streamerRunLoop=null;streamer=null;closed=!1;constructor(e){this.props={instrumentation:s.alamos.NOOP,...e,streamUpdateDelay:new a.TimeSpan(e.streamUpdateDelay??a.TimeSpan.seconds(5))},this.debouncedUpdateStreamer=(0,a.debounce)(()=>void this.updateStreamer(),Zr)}async stream(e,t){let{cache:n,instrumentation:r}=this.props;return this.closed?()=>{}:(await n.populateMissing(t),await this.mu.runExclusive(async()=>(r.L.debug(`adding stream handler`,{keys:t}),this.listeners.set(e,{valid:!0,keys:new Set(t)}),e(new Map(t.map(e=>{let t=n.get(e);return[e,new a.MultiSeries(a.array.toArray(t.leadingBuffer))]}))),this.debouncedUpdateStreamer(),()=>this.removeStreamHandler(e))))}removeStreamHandler(e){let{instrumentation:t}=this.props;this.mu.runExclusive(()=>{let t=this.listeners.get(e);t!=null&&(t.valid=!1)}),setTimeout(()=>{this.mu.runExclusive(async()=>{if(t.L.debug(`removing stream handler`),this.listeners.delete(e))return this.debouncedUpdateStreamer();t.L.warn(`attempted to remove non-existent stream handler`)})},this.props.streamUpdateDelay.milliseconds)}async updateStreamer(){if(this.closed)return;let{instrumentation:e}=this.props;try{let t=new Set;if(this.listeners.forEach(e=>e.keys.forEach(e=>t.add(e))),t.size===0){e.L.info(`no keys to stream, closing streamer`),this.streamer?.close(),this.streamerRunLoop!=null&&await this.streamerRunLoop,this.streamer=null,e.L.info(`streamer closed successfully`);return}let n=Array.from(t);if(a.compare.primitiveArrays(n,this.streamer?.keys??[])===a.compare.EQUAL){e.L.debug(`streamer keys unchanged`,{keys:n});return}this.streamer??(e.L.info(`creating new streamer`,{keys:n}),this.streamer=await this.props.openStreamer({channels:n,throttleRate:Qr}),this.streamerRunLoop=this.runStreamer(this.streamer)),e.L.debug(`updating streamer`,{prev:this.streamer.keys,next:n}),await this.streamer.update(n)}catch(t){throw e.L.error(`failed to update streamer`,{error:t}),t}}async runStreamer(e){let{cache:t,instrumentation:n}=this.props;try{for await(let n of e){let e=new Map;for(let r of n.keys){let i=n.get(r),a=t.get(r).writeDynamic(i);e.set(r,a)}e.size!==0&&this.listeners.forEach(({valid:t},n)=>t&&n(e))}}catch(e){throw n.L.error(`streamer run loop failed`,{error:e},!0),e}}async close(){let{instrumentation:e}=this.props;try{this.streamer?.close(),this.streamerRunLoop!=null&&await this.streamerRunLoop}catch(t){e.L.error(`failed to close streamer`,{error:t})}this.closed=!0}},ei=class{async retrieveChannel(){throw new i.NotFoundError(`NoopClient does not support retrieving channels`)}async read(){return new a.MultiSeries([])}async stream(){return async()=>{}}async close(){}},ti=class{ins;cache;reader;streamer;channelRetriever;constructor({instrumentation:e,core:t}){this.ins=e,this.channelRetriever=t.channels.createDebouncedBatchRetriever(10),this.cache=new Hr({channelRetriever:this.channelRetriever,instrumentation:this.ins.child(`cache`)}),this.reader=new Ur({cache:this.cache,readRemote:t.read.bind(t),instrumentation:this.ins.child(`reader`)}),this.streamer=new $r({cache:this.cache,openStreamer:async e=>i.framer.HardenedStreamer.open(t.openStreamer.bind(t),e),instrumentation:this.ins.child(`streamer`)})}async retrieveChannel(e){let t=await this.channelRetriever.retrieve([e]);if(t.length===0)throw new i.QueryError(`channel ${e} not found`);return t[0]}async read(e,t){return await this.reader.read(e,t)}async stream(e,t){return await this.streamer.stream(e,t)}async close(){this.ins.L.info(`closing client`),await this.streamer.close(),await this.reader.close(),this.cache.close()}},ni=o.z.object({}),ri=`telem.Provider`,ii=e=>{class t extends n.S{static TYPE=ri;static stateZ=ni;schema=t.stateZ;prevCore=null;client=null;afterUpdate(t){let{internal:i}=this,a=D(t),o=n.v(t);i.instrumentation=r.m(t,`telem`).child(`provider`),(a!==this.prevCore||!t.wasSetPreviously(`pluto-telem-context`))&&(this.prevCore=a,this.client!=null&&o(async()=>{if(this.client==null)throw Error(`no client to close`);await this.client.close()},`failed to close client`),this.client=a==null?new ei:new ti({core:a,instrumentation:i.instrumentation}),Cr(t,new br(e(this.client))))}}return t},ai=ii(yr),oi={[ri]:ai},si=e.n({AbstractSink:()=>en,AbstractSource:()=>F,Base:()=>$t,BooleanStatus:()=>Zn,CONTEXT_KEY:()=>xr,ChannelData:()=>gn,ColorGradient:()=>or,CompoundFactory:()=>vr,Context:()=>br,FixedColorSource:()=>Pn,FixedNumber:()=>An,FixedString:()=>Mn,IterativeSeries:()=>On,Mean:()=>Jn,MultiSourceTransformer:()=>tn,NoopFactory:()=>It,PROVIDER_TYPE:()=>ri,PipelineFactory:()=>on,Provider:()=>ai,REGISTRY:()=>oi,RemoteFactory:()=>bn,RollingAverage:()=>rr,ScaleNumber:()=>lr,SeriesDownsampler:()=>gr,SetPoint:()=>Un,SinkPipeline:()=>un,SourcePipeline:()=>sn,StaticFactory:()=>wn,StreamChannelData:()=>vn,StreamChannelValue:()=>pn,StringifyNumber:()=>er,TransformerFactory:()=>Bn,UnarySinkTransformer:()=>nn,UnarySourceTransformer:()=>I,WithinBounds:()=>Kn,booleanSinkSpecZ:()=>Wt,booleanSinkTransformerSpecZ:()=>Gt,booleanSourceSpecZ:()=>Ut,booleanSourceTransformerSpecZ:()=>Kt,booleanStatus:()=>Qn,booleanStatusProps:()=>Xn,channelData:()=>xn,colorGradient:()=>sr,colorGradientProps:()=>ar,colorSourceSpecZ:()=>Yt,connectionZ:()=>rn,createFactory:()=>yr,createProvider:()=>ii,downsampleMode:()=>pr,downsampleModeProps:()=>fr,downsampleModeZ:()=>dr,fixedArray:()=>Fn,fixedColor:()=>zn,fixedColorSourcePropsZ:()=>Nn,fixedNumber:()=>Ln,fixedNumberPropsZ:()=>kn,fixedSeriesPropsZ:()=>Tn,fixedString:()=>Rn,fixedStringPropsZ:()=>jn,iterativeArray:()=>In,iterativeSeriesPropsZ:()=>Dn,mean:()=>Yn,noopBooleanSinkSpec:()=>vt,noopBooleanSourceSpec:()=>St,noopColorSourceSpec:()=>Mt,noopNumericSinkSpec:()=>bt,noopNumericSourceSpec:()=>wt,noopSeriesSourceSpec:()=>Pt,noopStatusSourceSpec:()=>At,noopStringSinkSpec:()=>Et,noopStringSourceSpec:()=>Ot,numberSinkSpecZ:()=>Jt,numberSourceSpecZ:()=>qt,providerStateZ:()=>ni,rollingAverage:()=>ir,rollingAverageProps:()=>nr,scaleNumber:()=>ur,scaleNumberProps:()=>cr,seriesDownsampler:()=>_r,seriesSourceSpecZ:()=>Ht,setContext:()=>Cr,setpoint:()=>Hn,sinkPipeline:()=>dn,sinkPipelinePropsZ:()=>ln,sinkSpecZ:()=>zt,sinkTransformerSpecZ:()=>Vt,sourcePipeline:()=>cn,sourcePipelinePropsZ:()=>an,sourceSpecZ:()=>P,sourceTransformerSpecZ:()=>Bt,specZ:()=>Rt,statusSourceSpecZ:()=>Xt,streamChannelData:()=>Sn,streamChannelValue:()=>Cn,streamChannelValuePropsZ:()=>fn,stringSinkSpecZ:()=>Qt,stringSourceSpecZ:()=>Zt,stringifyNumber:()=>tr,stringifyNumberProps:()=>$n,useChildContext:()=>wr,useContext:()=>Sr,useSink:()=>Or,useSource:()=>L,withinBounds:()=>Gn,withinBoundsProps:()=>Wn}),ci=`#version 300 es
|
|
3
|
+
precision lowp float;
|
|
4
|
+
|
|
5
|
+
uniform lowp vec4 u_color;
|
|
6
|
+
out vec4 fragColor;
|
|
7
|
+
|
|
8
|
+
void main(void) {
|
|
9
|
+
fragColor = u_color;
|
|
10
|
+
}
|
|
11
|
+
`,li=`#version 300 es
|
|
12
|
+
|
|
13
|
+
// Copyright 2025 Synnax Labs, Inc.
|
|
14
|
+
//
|
|
15
|
+
// Use of this software is governed by the Business Source License included in the file
|
|
16
|
+
// licenses/BSL.txt.
|
|
17
|
+
//
|
|
18
|
+
// As of the Change Date specified in that file, in accordance with the Business Source
|
|
19
|
+
// License, use of this software will be governed by the Apache License, Version 2.0,
|
|
20
|
+
// included in the file licenses/APL.txt.
|
|
21
|
+
|
|
22
|
+
in mediump float a_x;
|
|
23
|
+
in mediump float a_y;
|
|
24
|
+
in mediump vec2 a_translate;
|
|
25
|
+
|
|
26
|
+
uniform mediump vec2 u_scale_aggregate;
|
|
27
|
+
uniform mediump vec2 u_offset_aggregate;
|
|
28
|
+
|
|
29
|
+
void main(void) {
|
|
30
|
+
gl_Position = vec4((u_scale_aggregate * vec2(a_x, a_y) + u_offset_aggregate) + a_translate, 0.0, 1.0);
|
|
31
|
+
}
|
|
32
|
+
`,ui=`#version 300 es
|
|
33
|
+
|
|
34
|
+
// Copyright 2025 Synnax Labs, Inc.
|
|
35
|
+
//
|
|
36
|
+
// Use of this software is governed by the Business Source License included in the file
|
|
37
|
+
// licenses/BSL.txt.
|
|
38
|
+
//
|
|
39
|
+
// As of the Change Date specified in that file, in accordance with the Business Source
|
|
40
|
+
// License, use of this software will be governed by the Apache License, Version 2.0,
|
|
41
|
+
// included in the file licenses/APL.txt.
|
|
42
|
+
|
|
43
|
+
in mediump float a_x;
|
|
44
|
+
in mediump uint a_y;
|
|
45
|
+
in mediump vec2 a_translate;
|
|
46
|
+
|
|
47
|
+
uniform mediump vec2 u_scale_aggregate;
|
|
48
|
+
uniform mediump vec2 u_offset_aggregate;
|
|
49
|
+
|
|
50
|
+
void main(void) {
|
|
51
|
+
gl_Position = vec4((u_scale_aggregate * vec2(a_x, float(a_y)) + u_offset_aggregate) + a_translate, 0.0, 1.0);
|
|
52
|
+
}
|
|
53
|
+
`,di=o.z.object({x:Ht,y:Ht,label:o.z.string().optional(),color:a.color.colorZ,strokeWidth:o.z.number().default(1),downsample:o.z.number().min(1).max(50).default(1),downsampleMode:dr.default(`decimate`),visible:o.z.boolean().default(!0)}),fi=(e,t,n)=>e===-1||t===-1||e>=n.series.length?NaN:Number(n.series[e].at(t)),pi=a.TimeSpan.milliseconds(2);a.xy.NAN,a.xy.NAN,a.color.ZERO,a.bounds.ZERO;var mi=(e,t)=>t.equals(a.DataType.UINT8)?e.UNSIGNED_BYTE:e.FLOAT,hi=class extends r.u{translationBufferCache=new Map;constructor(e,t,n){super(e,t,n),this.translationBufferCache=new Map}bindState({strokeWidth:e,color:t}){return this.uniformColor(`u_color`,t),this.attrStrokeWidth(e)}bindScale(e,t){let n=a.xy.scale(e.scale,t.scale),r=a.xy.translate(a.xy.scale(t.scale,e.offset),t.offset);this.uniformXY(`u_scale_aggregate`,n),this.uniformXY(`u_offset_aggregate`,r)}draw({x:e,y:t,count:n,downsample:r,xOffset:i,yOffset:a},o,s,c){let{gl:l}=this.renderCtx;this.bindAttrBuffer(`x`,e.glBuffer,r,i,s),this.bindAttrBuffer(`y`,t.glBuffer,r,a,c),l.drawArraysInstanced(l.LINE_STRIP,0,n/r,o)}bindAttrBuffer(e,t,n,r=0,i){let{gl:o}=this.renderCtx;o.bindBuffer(o.ARRAY_BUFFER,t);let s=o.getAttribLocation(this.prog,`a_${e}`),c=mi(o,i),l=i.density.valueOf();i.equals(a.DataType.UINT8)?o.vertexAttribIPointer(s,1,c,l*n,l*r):o.vertexAttribPointer(s,1,c,!1,l*n,l*r),o.enableVertexAttribArray(s)}getAndBindTranslationBuffer(e){let{gl:t}=this.renderCtx,n=`${this.renderCtx.aspect}:${e}`,r=this.translationBufferCache.get(n);if(r!=null)return t.bindBuffer(t.ARRAY_BUFFER,r.glBuffer),r;let a=t.createBuffer();if(a==null)throw new i.UnexpectedError(`Failed to create buffer from WebGL context`);let o=yi(this.renderCtx.aspect,e);t.bindBuffer(t.ARRAY_BUFFER,a),t.bufferData(t.ARRAY_BUFFER,o,t.DYNAMIC_DRAW);let s={glBuffer:a,jsBuffer:o};return this.translationBufferCache.set(n,s),s}attrStrokeWidth(e){let{gl:t}=this.renderCtx,{jsBuffer:n}=this.getAndBindTranslationBuffer(e),r=t.getAttribLocation(this.prog,`a_translate`);return t.vertexAttribPointer(r,2,t.FLOAT,!1,0,0),t.enableVertexAttribArray(r),t.vertexAttribDivisor(r,1),n.length/2}},gi=class e{static CONTEXT_KEY=`pluto-line-gl-program`;uint8HybridProgram;float32Program;constructor(e){this.uint8HybridProgram=new hi(e,ui,ci),this.float32Program=new hi(e,li,ci)}get gl(){return this.uint8HybridProgram.renderCtx.gl}getProgram(e){return e.equals(a.DataType.UINT8)?this.uint8HybridProgram:this.float32Program}static create(t,n){let r=new e(n);return t.set(e.CONTEXT_KEY,r),r}static use(t){let n=t.get(e.CONTEXT_KEY);if(n==null)throw new i.UnexpectedError(`GLProgram not found`);return n}},_i=class extends n.C{static TYPE=`line`;schema=di;afterUpdate(e){let{internal:t}=this,i={onStatusChange:n.g(e)};t.xTelem=L(e,this.state.x,t.xTelem,i),t.yTelem=L(e,this.state.y,t.yTelem,i),t.instrumentation=r.m(e,`line`),t.lineCtx=gi.use(e),t.requestRender=r.c(e),t.stopListeningXTelem?.(),t.stopListeningYTelem?.(),t.stopListeningXTelem=t.xTelem.onChange(()=>t.requestRender(`data`)),t.stopListeningYTelem=t.yTelem.onChange(()=>t.requestRender(`data`)),t.requestRender(`layout`),(t.xDownsampler?.props.mode!==this.state.downsampleMode||t.xDownsampler?.props.windowSize!==this.state.downsample)&&(t.xDownsampler=new gr({mode:this.state.downsampleMode,windowSize:this.state.downsample}),t.yDownsampler=new gr({mode:this.state.downsampleMode,windowSize:this.state.downsample}))}afterDelete(){let{internal:e}=this;e.xTelem.cleanup?.(),e.yTelem.cleanup?.(),e.requestRender(`layout`)}xBounds(){return this.internal.xTelem.value()[0]}yBounds(){return this.internal.yTelem.value()[0]}findByXValue(e,t){let{xTelem:n,yTelem:r}=this.internal,[,i]=n.value();i=this.internal.xDownsampler.transform(i);let[o,s]=[-1,-1];i.series.find((e,n)=>{let r=e.binarySearch(t),i=r>=0&&r<e.length;return i&&([o,s]=[r,n]),i});let{key:c}=this,{color:l,label:u}=this.state,d={key:c,color:l,label:u,position:{x:0,y:0},value:{x:NaN,y:NaN},bounds:{lower:0,upper:0}};if(o===-1||s===-1||!this.state.visible)return d;let f=i.series[s];d.value.x=fi(s,o,i);let[,p]=r.value();p=this.internal.yDownsampler.transform(p);let m=p.series.find(e=>a.bounds.contains(e.alignmentBounds,f.alignment+BigInt(o)));if(m==null)return d;let h=Number(m.alignment-f.alignment);return d.value.y=Number(m.at(o-h)),d.bounds={...m.bounds},d.position={x:e.dataToDecimalScale.x.pos(d.value.x),y:e.dataToDecimalScale.y.pos(d.value.y)},d}render(e){if(this.deleted||!this.state.visible)return;let{downsample:t}=this.state,{xTelem:n,yTelem:r,lineCtx:i,xDownsampler:a,yDownsampler:o}=this.internal,{dataToDecimalScale:s,exposure:c}=e,[[,l],[,u]]=[n.value(),r.value()];if(l=a.transform(l),u=o.transform(u),l.updateGLBuffer(i.gl),u.updateGLBuffer(i.gl),l.length===0||u.length===0)return;let d=i.getProgram(u.dataType),f=Ti(l,u,c,t,this.state.downsampleMode,pi);this.internal.instrumentation.L.debug(`render`,()=>({key:this.key,downsample:t,scale:s.transform,props:e.region,ops:Ei(f)}));let p=d.setAsActive(),m=d.bindState(this.state),h=d.renderCtx.scaleRegion(e.region).transform;f.forEach(e=>{let t=Ci(s,e).transform;d.bindScale(t,h),d.draw(e,m,l.dataType,u.dataType)}),p()}},vi=5e3,yi=(e,t)=>Si(xi(e),t).map((t,n)=>Math.floor(n/bi)*(1/(vi*e))*t),bi=5,xi=e=>new Float32Array([0,0,0,e,0,-e,1,0,-1,0]),Si=(e,t)=>{let n=new Float32Array(e.length*t);for(let r=0;r<t;r++)n.set(e,r*e.length);return n},Ci=(e,t)=>e.translate(e.x.dim(Number(t.x.sampleOffset)),e.y.dim(Number(t.y.sampleOffset))),wi={[_i.TYPE]:_i},Ti=(e,t,n,r,i,o)=>{if(e.series.length===0||t.series.length===0)return[];let s=[];return e.series.forEach(e=>t.series.forEach(t=>{if(!Di(e,t,o))return;let c=0n,l=0n;e.alignment<t.alignment?c=t.alignment-e.alignment:t.alignment<e.alignment&&(l=e.alignment-t.alignment);let u=a.math.min(a.bounds.span(e.alignmentBounds)-c,a.bounds.span(t.alignmentBounds)-l);if(u===0n)return;let d=(0,a.clamp)(Math.round(n*4*Number(u)),r,51);i!==`decimate`&&(d=1);let f=Number(u/e.alignmentMultiple),p=Number(c/e.alignmentMultiple),m=Number(l/t.alignmentMultiple);s.push({x:e,y:t,xOffset:p,yOffset:m,count:f,downsample:d})})),s},Ei=e=>e.map(e=>({...e,x:e.x.digest,y:e.y.digest})),Di=(e,t,n)=>{if(e.alignmentMultiple!==t.alignmentMultiple)return console.warn(`encountered two series with different alignment multiples in draw operations`,{x:e.digest,y:t.digest}),!1;let r=e.timeRange.overlapsWith(t.timeRange,n),i=a.bounds.overlapsWith(e.alignmentBounds,t.alignmentBounds);return r&&i},Oi=e.n({Canvas:()=>Ai,REGISTRY:()=>ji,canvasStateZ:()=>ki}),ki=o.z.object({dpr:o.z.number(),region:a.box.box,bootstrap:o.z.boolean().default(!1),bootstrapped:o.z.boolean().default(!1),glCanvas:o.z.any().optional(),upper2dCanvas:o.z.any().optional(),lower2dCanvas:o.z.any().optional(),os:a.runtime.osZ}),Ai=class extends n.S{static TYPE=`Canvas`;schema=ki;renderCtx=null;afterUpdate(e){if(this.renderCtx==null){if(!this.state.bootstrap)return;let{glCanvas:t,lower2dCanvas:n,upper2dCanvas:a,os:o}=this.state;if(t==null||n==null||a==null)throw new i.UnexpectedError(`[vis.worker.Canvas] - expected render context bootstrap to include all canvases`);this.renderCtx=r.l.create(e,t,n,a,o),gi.create(e,this.renderCtx),this.setState(e=>({...e,bootstrap:!1,bootstrapped:!0,glCanvas:void 0,lower2dCanvas:void 0,upper2dCanvas:void 0}))}else this.renderCtx.update(e);this.renderCtx.resize(this.state.region,this.state.dpr)}},ji={[Ai.TYPE]:Ai},Mi=e.n({Diagram:()=>Fi,REGISTRY:()=>Ii,diagramStateZ:()=>Ni}),Ni=o.z.object({position:a.xy.xyZ,zoom:o.z.number(),region:a.box.box,clearOverScan:a.xy.crudeZ.default(5),visible:o.z.boolean().default(!0),autoRenderInterval:o.z.number().optional()}),Pi=[`upper2d`,`lower2d`],Fi=class e extends n.S{static TYPE=`Diagram`;static stateZ=Ni;schema=e.stateZ;afterUpdate(e){this.internal.renderCtx=r.l.use(e),this.internal.handleError=n.v(e),a.primitive.isNonZero(this.state.autoRenderInterval)&&(this.internal.autoRenderInterval??=setInterval(()=>{this.state.visible&&this.requestRender(`low`)},this.state.autoRenderInterval)),r.a(e,()=>{this.state.visible&&this.requestRender(`low`)}),!(!this.state.visible&&!this.prevState.visible)&&(this.internal.viewportScale=a.scale.XY.magnify(a.xy.construct(this.state.zoom)).translate(a.box.topLeft(this.state.region)).translate(this.state.position),this.requestRender(`high`))}afterDelete(){this.internal.autoRenderInterval!=null&&clearInterval(this.internal.autoRenderInterval),this.requestRender(`high`)}render(){if(this.deleted)return;let{renderCtx:e,handleError:t,viewportScale:n}=this.internal,r=a.box.construct(this.state.region);if(!this.state.visible)return()=>e.erase(r,this.state.clearOverScan,...Pi);let i=e.scissor(r,a.xy.ZERO,Pi);try{this.children.forEach(e=>e.render?.({viewportScale:n}))}catch(e){t(e,`failed to render diagram`)}finally{i()}let o=a.box.copy(this.state.region);return()=>{e.lower2d.fillStyle=a.color.hex(a.color.BLACK),e.lower2d.fillRect(...a.xy.couple(a.box.topLeft(o)),a.box.width(o),a.box.height(o)),e.erase(o,this.state.clearOverScan,...Pi)}}requestRender(t){let{renderCtx:n}=this.internal;n.loop.set({key:`${e.TYPE}-${this.key}`,render:this.render.bind(this),priority:t,canvases:Pi})}},Ii={[Fi.TYPE]:Fi};function Li(e,t){return e==null||t==null?NaN:e<t?-1:e>t?1:e>=t?0:NaN}function Ri(e,t){return e==null||t==null?NaN:t<e?-1:t>e?1:t>=e?0:NaN}function zi(e){let t,n,r;e.length===2?(t=e===Li||e===Ri?e:Bi,n=e,r=e):(t=Li,n=(t,n)=>Li(e(t),n),r=(t,n)=>e(t)-n);function i(e,r,i=0,a=e.length){if(i<a){if(t(r,r)!==0)return a;do{let t=i+a>>>1;n(e[t],r)<0?i=t+1:a=t}while(i<a)}return i}function a(e,r,i=0,a=e.length){if(i<a){if(t(r,r)!==0)return a;do{let t=i+a>>>1;n(e[t],r)<=0?i=t+1:a=t}while(i<a)}return i}function o(e,t,n=0,a=e.length){let o=i(e,t,n,a-1);return o>n&&r(e[o-1],t)>-r(e[o],t)?o-1:o}return{left:i,center:o,right:a}}function Bi(){return 0}function Vi(e){return e===null?NaN:+e}var Hi=zi(Li),Ui=Hi.right;Hi.left,zi(Vi).center;var Wi=Math.sqrt(50),Gi=Math.sqrt(10),Ki=Math.sqrt(2);function qi(e,t,n){let r=(t-e)/Math.max(0,n),i=Math.floor(Math.log10(r)),a=r/10**i,o=a>=Wi?10:a>=Gi?5:a>=Ki?2:1,s,c,l;return i<0?(l=10**-i/o,s=Math.round(e*l),c=Math.round(t*l),s/l<e&&++s,c/l>t&&--c,l=-l):(l=10**i*o,s=Math.round(e/l),c=Math.round(t/l),s*l<e&&++s,c*l>t&&--c),c<s&&.5<=n&&n<2?qi(e,t,n*2):[s,c,l]}function Ji(e,t,n){if(t=+t,e=+e,n=+n,!(n>0))return[];if(e===t)return[e];let r=t<e,[i,a,o]=r?qi(t,e,n):qi(e,t,n);if(!(a>=i))return[];let s=a-i+1,c=Array(s);if(r)if(o<0)for(let e=0;e<s;++e)c[e]=(a-e)/-o;else for(let e=0;e<s;++e)c[e]=(a-e)*o;else if(o<0)for(let e=0;e<s;++e)c[e]=(i+e)/-o;else for(let e=0;e<s;++e)c[e]=(i+e)*o;return c}function Yi(e,t,n){return t=+t,e=+e,n=+n,qi(e,t,n)[2]}function Xi(e,t,n){t=+t,e=+e,n=+n;let r=t<e,i=r?Yi(t,e,n):Yi(e,t,n);return(r?-1:1)*(i<0?1/-i:i)}function Zi(e,t){switch(arguments.length){case 0:break;case 1:this.range(e);break;default:this.range(t).domain(e);break}return this}function Qi(e){return function(){return e}}function $i(e){return+e}var ea=[0,1];function ta(e){return e}function na(e,t){return(t-=e=+e)?function(n){return(n-e)/t}:Qi(isNaN(t)?NaN:.5)}function ra(e,t){var n;return e>t&&(n=e,e=t,t=n),function(n){return Math.max(e,Math.min(t,n))}}function ia(e,t,n){var r=e[0],i=e[1],a=t[0],o=t[1];return i<r?(r=na(i,r),a=n(o,a)):(r=na(r,i),a=n(a,o)),function(e){return a(r(e))}}function aa(e,t,n){var r=Math.min(e.length,t.length)-1,i=Array(r),a=Array(r),o=-1;for(e[r]<e[0]&&(e=e.slice().reverse(),t=t.slice().reverse());++o<r;)i[o]=na(e[o],e[o+1]),a[o]=n(t[o],t[o+1]);return function(t){var n=Ui(e,t,1,r)-1;return a[n](i[n](t))}}function oa(e,t){return t.domain(e.domain()).range(e.range()).interpolate(e.interpolate()).clamp(e.clamp()).unknown(e.unknown())}function sa(){var e=ea,t=ea,n=ht,r,i,a,o=ta,s,c,l;function u(){var n=Math.min(e.length,t.length);return o!==ta&&(o=ra(e[0],e[n-1])),s=n>2?aa:ia,c=l=null,d}function d(i){return i==null||isNaN(i=+i)?a:(c||=s(e.map(r),t,n))(r(o(i)))}return d.invert=function(n){return o(i((l||=s(t,e.map(r),ct))(n)))},d.domain=function(t){return arguments.length?(e=Array.from(t,$i),u()):e.slice()},d.range=function(e){return arguments.length?(t=Array.from(e),u()):t.slice()},d.rangeRound=function(e){return t=Array.from(e),n=gt,u()},d.clamp=function(e){return arguments.length?(o=e?!0:ta,u()):o!==ta},d.interpolate=function(e){return arguments.length?(n=e,u()):n},d.unknown=function(e){return arguments.length?(a=e,d):a},function(e,t){return r=e,i=t,u()}}function ca(){return sa()(ta,ta)}function la(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString(`en`).replace(/,/g,``):e.toString(10)}function ua(e,t){if(!isFinite(e)||e===0)return null;var n=(e=t?e.toExponential(t-1):e.toExponential()).indexOf(`e`),r=e.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+e.slice(n+1)]}function da(e){return e=ua(Math.abs(e)),e?e[1]:NaN}function fa(e,t){return function(n,r){for(var i=n.length,a=[],o=0,s=e[0],c=0;i>0&&s>0&&(c+s+1>r&&(s=Math.max(1,r-c)),a.push(n.substring(i-=s,i+s)),!((c+=s+1)>r));)s=e[o=(o+1)%e.length];return a.reverse().join(t)}}function pa(e){return function(t){return t.replace(/[0-9]/g,function(t){return e[+t]})}}var ma=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function ha(e){if(!(t=ma.exec(e)))throw Error(`invalid format: `+e);var t;return new ga({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}ha.prototype=ga.prototype;function ga(e){this.fill=e.fill===void 0?` `:e.fill+``,this.align=e.align===void 0?`>`:e.align+``,this.sign=e.sign===void 0?`-`:e.sign+``,this.symbol=e.symbol===void 0?``:e.symbol+``,this.zero=!!e.zero,this.width=e.width===void 0?void 0:+e.width,this.comma=!!e.comma,this.precision=e.precision===void 0?void 0:+e.precision,this.trim=!!e.trim,this.type=e.type===void 0?``:e.type+``}ga.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?`0`:``)+(this.width===void 0?``:Math.max(1,this.width|0))+(this.comma?`,`:``)+(this.precision===void 0?``:`.`+Math.max(0,this.precision|0))+(this.trim?`~`:``)+this.type};function _a(e){out:for(var t=e.length,n=1,r=-1,i;n<t;++n)switch(e[n]){case`.`:r=i=n;break;case`0`:r===0&&(r=n),i=n;break;default:if(!+e[n])break out;r>0&&(r=0);break}return r>0?e.slice(0,r)+e.slice(i+1):e}var va;function ya(e,t){var n=ua(e,t);if(!n)return va=void 0,e.toPrecision(t);var r=n[0],i=n[1],a=i-(va=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,o=r.length;return a===o?r:a>o?r+Array(a-o+1).join(`0`):a>0?r.slice(0,a)+`.`+r.slice(a):`0.`+Array(1-a).join(`0`)+ua(e,Math.max(0,t+a-1))[0]}function ba(e,t){var n=ua(e,t);if(!n)return e+``;var r=n[0],i=n[1];return i<0?`0.`+Array(-i).join(`0`)+r:r.length>i+1?r.slice(0,i+1)+`.`+r.slice(i+1):r+Array(i-r.length+2).join(`0`)}var xa={"%":(e,t)=>(e*100).toFixed(t),b:e=>Math.round(e).toString(2),c:e=>e+``,d:la,e:(e,t)=>e.toExponential(t),f:(e,t)=>e.toFixed(t),g:(e,t)=>e.toPrecision(t),o:e=>Math.round(e).toString(8),p:(e,t)=>ba(e*100,t),r:ba,s:ya,X:e=>Math.round(e).toString(16).toUpperCase(),x:e=>Math.round(e).toString(16)};function Sa(e){return e}var Ca=Array.prototype.map,wa=[`y`,`z`,`a`,`f`,`p`,`n`,`µ`,`m`,``,`k`,`M`,`G`,`T`,`P`,`E`,`Z`,`Y`];function Ta(e){var t=e.grouping===void 0||e.thousands===void 0?Sa:fa(Ca.call(e.grouping,Number),e.thousands+``),n=e.currency===void 0?``:e.currency[0]+``,r=e.currency===void 0?``:e.currency[1]+``,i=e.decimal===void 0?`.`:e.decimal+``,a=e.numerals===void 0?Sa:pa(Ca.call(e.numerals,String)),o=e.percent===void 0?`%`:e.percent+``,s=e.minus===void 0?`−`:e.minus+``,c=e.nan===void 0?`NaN`:e.nan+``;function l(e,l){e=ha(e);var u=e.fill,d=e.align,f=e.sign,p=e.symbol,m=e.zero,h=e.width,g=e.comma,_=e.precision,v=e.trim,y=e.type;y===`n`?(g=!0,y=`g`):xa[y]||(_===void 0&&(_=12),v=!0,y=`g`),(m||u===`0`&&d===`=`)&&(m=!0,u=`0`,d=`=`);var b=(l&&l.prefix!==void 0?l.prefix:``)+(p===`$`?n:p===`#`&&/[boxX]/.test(y)?`0`+y.toLowerCase():``),x=(p===`$`?r:/[%p]/.test(y)?o:``)+(l&&l.suffix!==void 0?l.suffix:``),S=xa[y],C=/[defgprs%]/.test(y);_=_===void 0?6:/[gprs]/.test(y)?Math.max(1,Math.min(21,_)):Math.max(0,Math.min(20,_));function w(e){var n=b,r=x,o,l,p;if(y===`c`)r=S(e)+r,e=``;else{e=+e;var w=e<0||1/e<0;if(e=isNaN(e)?c:S(Math.abs(e),_),v&&(e=_a(e)),w&&+e==0&&f!==`+`&&(w=!1),n=(w?f===`(`?f:s:f===`-`||f===`(`?``:f)+n,r=(y===`s`&&!isNaN(e)&&va!==void 0?wa[8+va/3]:``)+r+(w&&f===`(`?`)`:``),C){for(o=-1,l=e.length;++o<l;)if(p=e.charCodeAt(o),48>p||p>57){r=(p===46?i+e.slice(o+1):e.slice(o))+r,e=e.slice(0,o);break}}}g&&!m&&(e=t(e,1/0));var T=n.length+e.length+r.length,E=T<h?Array(h-T+1).join(u):``;switch(g&&m&&(e=t(E+e,E.length?h-r.length:1/0),E=``),d){case`<`:e=n+e+r+E;break;case`=`:e=n+E+e+r;break;case`^`:e=E.slice(0,T=E.length>>1)+n+e+r+E.slice(T);break;default:e=E+n+e+r;break}return a(e)}return w.toString=function(){return e+``},w}function u(e,t){var n=Math.max(-8,Math.min(8,Math.floor(da(t)/3)))*3,r=10**-n,i=l((e=ha(e),e.type=`f`,e),{suffix:wa[8+n/3]});return function(e){return i(r*e)}}return{format:l,formatPrefix:u}}var Ea,Da,Oa;ka({thousands:`,`,grouping:[3],currency:[`$`,``]});function ka(e){return Ea=Ta(e),Da=Ea.format,Oa=Ea.formatPrefix,Ea}function Aa(e){return Math.max(0,-da(Math.abs(e)))}function ja(e,t){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(da(t)/3)))*3-da(Math.abs(e)))}function Ma(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,da(t)-da(e))+1}function Na(e,t,n,r){var i=Xi(e,t,n),a;switch(r=ha(r??`,f`),r.type){case`s`:var o=Math.max(Math.abs(e),Math.abs(t));return r.precision==null&&!isNaN(a=ja(i,o))&&(r.precision=a),Oa(r,o);case``:case`e`:case`g`:case`p`:case`r`:r.precision==null&&!isNaN(a=Ma(i,Math.max(Math.abs(e),Math.abs(t))))&&(r.precision=a-(r.type===`e`));break;case`f`:case`%`:r.precision==null&&!isNaN(a=Aa(i))&&(r.precision=a-(r.type===`%`)*2);break}return Da(r)}function Pa(e){var t=e.domain;return e.ticks=function(e){var n=t();return Ji(n[0],n[n.length-1],e??10)},e.tickFormat=function(e,n){var r=t();return Na(r[0],r[r.length-1],e??10,n)},e.nice=function(n){n??=10;var r=t(),i=0,a=r.length-1,o=r[i],s=r[a],c,l,u=10;for(s<o&&(l=o,o=s,s=l,l=i,i=a,a=l);u-- >0;){if(l=Yi(o,s,n),l===c)return r[i]=o,r[a]=s,t(r);if(l>0)o=Math.floor(o/l)*l,s=Math.ceil(s/l)*l;else if(l<0)o=Math.ceil(o*l)/l,s=Math.floor(s*l)/l;else break;c=l}return e},e}function Fa(){var e=ca();return e.copy=function(){return oa(e,Fa())},Zi.apply(e,arguments),Pa(e)}function Ia(e,t){e=e.slice();var n=0,r=e.length-1,i=e[n],a=e[r],o;return a<i&&(o=n,n=r,r=o,o=i,i=a,a=o),e[n]=t.floor(i),e[r]=t.ceil(a),e}var La=new Date,Ra=new Date;function R(e,t,n,r){function i(t){return e(t=arguments.length===0?new Date:new Date(+t)),t}return i.floor=t=>(e(t=new Date(+t)),t),i.ceil=n=>(e(n=new Date(n-1)),t(n,1),e(n),n),i.round=e=>{let t=i(e),n=i.ceil(e);return e-t<n-e?t:n},i.offset=(e,n)=>(t(e=new Date(+e),n==null?1:Math.floor(n)),e),i.range=(n,r,a)=>{let o=[];if(n=i.ceil(n),a=a==null?1:Math.floor(a),!(n<r)||!(a>0))return o;let s;do o.push(s=new Date(+n)),t(n,a),e(n);while(s<n&&n<r);return o},i.filter=n=>R(t=>{if(t>=t)for(;e(t),!n(t);)t.setTime(t-1)},(e,r)=>{if(e>=e)if(r<0)for(;++r<=0;)for(;t(e,-1),!n(e););else for(;--r>=0;)for(;t(e,1),!n(e););}),n&&(i.count=(t,r)=>(La.setTime(+t),Ra.setTime(+r),e(La),e(Ra),Math.floor(n(La,Ra))),i.every=e=>(e=Math.floor(e),!isFinite(e)||!(e>0)?null:e>1?i.filter(r?t=>r(t)%e===0:t=>i.count(0,t)%e===0):i)),i}var za=R(()=>{},(e,t)=>{e.setTime(+e+t)},(e,t)=>t-e);za.every=e=>(e=Math.floor(e),!isFinite(e)||!(e>0)?null:e>1?R(t=>{t.setTime(Math.floor(t/e)*e)},(t,n)=>{t.setTime(+t+n*e)},(t,n)=>(n-t)/e):za),za.range;var z=1e3,B=z*60,V=B*60,H=V*24,Ba=H*7,Va=H*30,Ha=H*365,Ua=R(e=>{e.setTime(e-e.getMilliseconds())},(e,t)=>{e.setTime(+e+t*z)},(e,t)=>(t-e)/z,e=>e.getUTCSeconds());Ua.range;var Wa=R(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*z)},(e,t)=>{e.setTime(+e+t*B)},(e,t)=>(t-e)/B,e=>e.getMinutes());Wa.range;var Ga=R(e=>{e.setUTCSeconds(0,0)},(e,t)=>{e.setTime(+e+t*B)},(e,t)=>(t-e)/B,e=>e.getUTCMinutes());Ga.range;var Ka=R(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*z-e.getMinutes()*B)},(e,t)=>{e.setTime(+e+t*V)},(e,t)=>(t-e)/V,e=>e.getHours());Ka.range;var qa=R(e=>{e.setUTCMinutes(0,0,0)},(e,t)=>{e.setTime(+e+t*V)},(e,t)=>(t-e)/V,e=>e.getUTCHours());qa.range;var Ja=R(e=>e.setHours(0,0,0,0),(e,t)=>e.setDate(e.getDate()+t),(e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*B)/H,e=>e.getDate()-1);Ja.range;var Ya=R(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/H,e=>e.getUTCDate()-1);Ya.range;var Xa=R(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/H,e=>Math.floor(e/H));Xa.range;function U(e){return R(t=>{t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},(e,t)=>{e.setDate(e.getDate()+t*7)},(e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*B)/Ba)}var Za=U(0),Qa=U(1),$a=U(2),eo=U(3),W=U(4),to=U(5),no=U(6);Za.range,Qa.range,$a.range,eo.range,W.range,to.range,no.range;function G(e){return R(t=>{t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t*7)},(e,t)=>(t-e)/Ba)}var ro=G(0),io=G(1),ao=G(2),oo=G(3),so=G(4),co=G(5),lo=G(6);ro.range,io.range,ao.range,oo.range,so.range,co.range,lo.range;var uo=R(e=>{e.setDate(1),e.setHours(0,0,0,0)},(e,t)=>{e.setMonth(e.getMonth()+t)},(e,t)=>t.getMonth()-e.getMonth()+(t.getFullYear()-e.getFullYear())*12,e=>e.getMonth());uo.range;var fo=R(e=>{e.setUTCDate(1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCMonth(e.getUTCMonth()+t)},(e,t)=>t.getUTCMonth()-e.getUTCMonth()+(t.getUTCFullYear()-e.getUTCFullYear())*12,e=>e.getUTCMonth());fo.range;var K=R(e=>{e.setMonth(0,1),e.setHours(0,0,0,0)},(e,t)=>{e.setFullYear(e.getFullYear()+t)},(e,t)=>t.getFullYear()-e.getFullYear(),e=>e.getFullYear());K.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:R(t=>{t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},(t,n)=>{t.setFullYear(t.getFullYear()+n*e)}),K.range;var q=R(e=>{e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCFullYear(e.getUTCFullYear()+t)},(e,t)=>t.getUTCFullYear()-e.getUTCFullYear(),e=>e.getUTCFullYear());q.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:R(t=>{t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,n)=>{t.setUTCFullYear(t.getUTCFullYear()+n*e)}),q.range;function po(e,t,n,r,i,a){let o=[[Ua,1,z],[Ua,5,5*z],[Ua,15,15*z],[Ua,30,30*z],[a,1,B],[a,5,5*B],[a,15,15*B],[a,30,30*B],[i,1,V],[i,3,3*V],[i,6,6*V],[i,12,12*V],[r,1,H],[r,2,2*H],[n,1,Ba],[t,1,Va],[t,3,3*Va],[e,1,Ha]];function s(e,t,n){let r=t<e;r&&([e,t]=[t,e]);let i=n&&typeof n.range==`function`?n:c(e,t,n),a=i?i.range(e,+t+1):[];return r?a.reverse():a}function c(t,n,r){let i=Math.abs(n-t)/r,a=zi(([,,e])=>e).right(o,i);if(a===o.length)return e.every(Xi(t/Ha,n/Ha,r));if(a===0)return za.every(Math.max(Xi(t,n,r),1));let[s,c]=o[i/o[a-1][2]<o[a][2]/i?a-1:a];return s.every(c)}return[s,c]}var[mo,ho]=po(q,fo,ro,Xa,qa,Ga),[go,_o]=po(K,uo,Za,Ja,Ka,Wa);function vo(e){if(0<=e.y&&e.y<100){var t=new Date(-1,e.m,e.d,e.H,e.M,e.S,e.L);return t.setFullYear(e.y),t}return new Date(e.y,e.m,e.d,e.H,e.M,e.S,e.L)}function yo(e){if(0<=e.y&&e.y<100){var t=new Date(Date.UTC(-1,e.m,e.d,e.H,e.M,e.S,e.L));return t.setUTCFullYear(e.y),t}return new Date(Date.UTC(e.y,e.m,e.d,e.H,e.M,e.S,e.L))}function bo(e,t,n){return{y:e,m:t,d:n,H:0,M:0,S:0,L:0}}function xo(e){var t=e.dateTime,n=e.date,r=e.time,i=e.periods,a=e.days,o=e.shortDays,s=e.months,c=e.shortMonths,l=Eo(i),u=Do(i),d=Eo(a),f=Do(a),p=Eo(o),m=Do(o),h=Eo(s),g=Do(s),_=Eo(c),v=Do(c),y={a:ae,A:oe,b:se,B:ce,c:null,d:Jo,e:Jo,f:$o,g:us,G:fs,H:Yo,I:Xo,j:Zo,L:Qo,m:es,M:ts,p:le,q:ue,Q:Fs,s:Is,S:ns,u:rs,U:is,V:os,w:ss,W:cs,x:null,X:null,y:ls,Y:ds,Z:ps,"%":Ps},b={a:de,A:fe,b:pe,B:me,c:null,d:ms,e:ms,f:ys,g:As,G:Ms,H:hs,I:gs,j:_s,L:vs,m:bs,M:xs,p:he,q:ge,Q:Fs,s:Is,S:Ss,u:Cs,U:ws,V:Es,w:Ds,W:Os,x:null,X:null,y:ks,Y:js,Z:Ns,"%":Ps},x={a:E,A:ee,b:te,B:ne,c:D,d:Ro,e:Ro,f:Wo,g:Po,G:No,H:Bo,I:Bo,j:zo,L:Uo,m:Lo,M:Vo,p:T,q:Io,Q:Ko,s:qo,S:Ho,u:ko,U:Ao,V:jo,w:Oo,W:Mo,x:re,X:ie,y:Po,Y:No,Z:Fo,"%":Go};y.x=S(n,y),y.X=S(r,y),y.c=S(t,y),b.x=S(n,b),b.X=S(r,b),b.c=S(t,b);function S(e,t){return function(n){var r=[],i=-1,a=0,o=e.length,s,c,l;for(n instanceof Date||(n=new Date(+n));++i<o;)e.charCodeAt(i)===37&&(r.push(e.slice(a,i)),(c=So[s=e.charAt(++i)])==null?c=s===`e`?` `:`0`:s=e.charAt(++i),(l=t[s])&&(s=l(n,c)),r.push(s),a=i+1);return r.push(e.slice(a,i)),r.join(``)}}function C(e,t){return function(n){var r=bo(1900,void 0,1),i=w(r,e,n+=``,0),a,o;if(i!=n.length)return null;if(`Q`in r)return new Date(r.Q);if(`s`in r)return new Date(r.s*1e3+(`L`in r?r.L:0));if(t&&!(`Z`in r)&&(r.Z=0),`p`in r&&(r.H=r.H%12+r.p*12),r.m===void 0&&(r.m=`q`in r?r.q:0),`V`in r){if(r.V<1||r.V>53)return null;`w`in r||(r.w=1),`Z`in r?(a=yo(bo(r.y,0,1)),o=a.getUTCDay(),a=o>4||o===0?io.ceil(a):io(a),a=Ya.offset(a,(r.V-1)*7),r.y=a.getUTCFullYear(),r.m=a.getUTCMonth(),r.d=a.getUTCDate()+(r.w+6)%7):(a=vo(bo(r.y,0,1)),o=a.getDay(),a=o>4||o===0?Qa.ceil(a):Qa(a),a=Ja.offset(a,(r.V-1)*7),r.y=a.getFullYear(),r.m=a.getMonth(),r.d=a.getDate()+(r.w+6)%7)}else (`W`in r||`U`in r)&&(`w`in r||(r.w=`u`in r?r.u%7:`W`in r?1:0),o=`Z`in r?yo(bo(r.y,0,1)).getUTCDay():vo(bo(r.y,0,1)).getDay(),r.m=0,r.d=`W`in r?(r.w+6)%7+r.W*7-(o+5)%7:r.w+r.U*7-(o+6)%7);return`Z`in r?(r.H+=r.Z/100|0,r.M+=r.Z%100,yo(r)):vo(r)}}function w(e,t,n,r){for(var i=0,a=t.length,o=n.length,s,c;i<a;){if(r>=o)return-1;if(s=t.charCodeAt(i++),s===37){if(s=t.charAt(i++),c=x[s in So?t.charAt(i++):s],!c||(r=c(e,n,r))<0)return-1}else if(s!=n.charCodeAt(r++))return-1}return r}function T(e,t,n){var r=l.exec(t.slice(n));return r?(e.p=u.get(r[0].toLowerCase()),n+r[0].length):-1}function E(e,t,n){var r=p.exec(t.slice(n));return r?(e.w=m.get(r[0].toLowerCase()),n+r[0].length):-1}function ee(e,t,n){var r=d.exec(t.slice(n));return r?(e.w=f.get(r[0].toLowerCase()),n+r[0].length):-1}function te(e,t,n){var r=_.exec(t.slice(n));return r?(e.m=v.get(r[0].toLowerCase()),n+r[0].length):-1}function ne(e,t,n){var r=h.exec(t.slice(n));return r?(e.m=g.get(r[0].toLowerCase()),n+r[0].length):-1}function D(e,n,r){return w(e,t,n,r)}function re(e,t,r){return w(e,n,t,r)}function ie(e,t,n){return w(e,r,t,n)}function ae(e){return o[e.getDay()]}function oe(e){return a[e.getDay()]}function se(e){return c[e.getMonth()]}function ce(e){return s[e.getMonth()]}function le(e){return i[+(e.getHours()>=12)]}function ue(e){return 1+~~(e.getMonth()/3)}function de(e){return o[e.getUTCDay()]}function fe(e){return a[e.getUTCDay()]}function pe(e){return c[e.getUTCMonth()]}function me(e){return s[e.getUTCMonth()]}function he(e){return i[+(e.getUTCHours()>=12)]}function ge(e){return 1+~~(e.getUTCMonth()/3)}return{format:function(e){var t=S(e+=``,y);return t.toString=function(){return e},t},parse:function(e){var t=C(e+=``,!1);return t.toString=function(){return e},t},utcFormat:function(e){var t=S(e+=``,b);return t.toString=function(){return e},t},utcParse:function(e){var t=C(e+=``,!0);return t.toString=function(){return e},t}}}var So={"-":``,_:` `,0:`0`},J=/^\s*\d+/,Co=/^%/,wo=/[\\^$*+?|[\]().{}]/g;function Y(e,t,n){var r=e<0?`-`:``,i=(r?-e:e)+``,a=i.length;return r+(a<n?Array(n-a+1).join(t)+i:i)}function To(e){return e.replace(wo,`\\$&`)}function Eo(e){return RegExp(`^(?:`+e.map(To).join(`|`)+`)`,`i`)}function Do(e){return new Map(e.map((e,t)=>[e.toLowerCase(),t]))}function Oo(e,t,n){var r=J.exec(t.slice(n,n+1));return r?(e.w=+r[0],n+r[0].length):-1}function ko(e,t,n){var r=J.exec(t.slice(n,n+1));return r?(e.u=+r[0],n+r[0].length):-1}function Ao(e,t,n){var r=J.exec(t.slice(n,n+2));return r?(e.U=+r[0],n+r[0].length):-1}function jo(e,t,n){var r=J.exec(t.slice(n,n+2));return r?(e.V=+r[0],n+r[0].length):-1}function Mo(e,t,n){var r=J.exec(t.slice(n,n+2));return r?(e.W=+r[0],n+r[0].length):-1}function No(e,t,n){var r=J.exec(t.slice(n,n+4));return r?(e.y=+r[0],n+r[0].length):-1}function Po(e,t,n){var r=J.exec(t.slice(n,n+2));return r?(e.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function Fo(e,t,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(n,n+6));return r?(e.Z=r[1]?0:-(r[2]+(r[3]||`00`)),n+r[0].length):-1}function Io(e,t,n){var r=J.exec(t.slice(n,n+1));return r?(e.q=r[0]*3-3,n+r[0].length):-1}function Lo(e,t,n){var r=J.exec(t.slice(n,n+2));return r?(e.m=r[0]-1,n+r[0].length):-1}function Ro(e,t,n){var r=J.exec(t.slice(n,n+2));return r?(e.d=+r[0],n+r[0].length):-1}function zo(e,t,n){var r=J.exec(t.slice(n,n+3));return r?(e.m=0,e.d=+r[0],n+r[0].length):-1}function Bo(e,t,n){var r=J.exec(t.slice(n,n+2));return r?(e.H=+r[0],n+r[0].length):-1}function Vo(e,t,n){var r=J.exec(t.slice(n,n+2));return r?(e.M=+r[0],n+r[0].length):-1}function Ho(e,t,n){var r=J.exec(t.slice(n,n+2));return r?(e.S=+r[0],n+r[0].length):-1}function Uo(e,t,n){var r=J.exec(t.slice(n,n+3));return r?(e.L=+r[0],n+r[0].length):-1}function Wo(e,t,n){var r=J.exec(t.slice(n,n+6));return r?(e.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function Go(e,t,n){var r=Co.exec(t.slice(n,n+1));return r?n+r[0].length:-1}function Ko(e,t,n){var r=J.exec(t.slice(n));return r?(e.Q=+r[0],n+r[0].length):-1}function qo(e,t,n){var r=J.exec(t.slice(n));return r?(e.s=+r[0],n+r[0].length):-1}function Jo(e,t){return Y(e.getDate(),t,2)}function Yo(e,t){return Y(e.getHours(),t,2)}function Xo(e,t){return Y(e.getHours()%12||12,t,2)}function Zo(e,t){return Y(1+Ja.count(K(e),e),t,3)}function Qo(e,t){return Y(e.getMilliseconds(),t,3)}function $o(e,t){return Qo(e,t)+`000`}function es(e,t){return Y(e.getMonth()+1,t,2)}function ts(e,t){return Y(e.getMinutes(),t,2)}function ns(e,t){return Y(e.getSeconds(),t,2)}function rs(e){var t=e.getDay();return t===0?7:t}function is(e,t){return Y(Za.count(K(e)-1,e),t,2)}function as(e){var t=e.getDay();return t>=4||t===0?W(e):W.ceil(e)}function os(e,t){return e=as(e),Y(W.count(K(e),e)+(K(e).getDay()===4),t,2)}function ss(e){return e.getDay()}function cs(e,t){return Y(Qa.count(K(e)-1,e),t,2)}function ls(e,t){return Y(e.getFullYear()%100,t,2)}function us(e,t){return e=as(e),Y(e.getFullYear()%100,t,2)}function ds(e,t){return Y(e.getFullYear()%1e4,t,4)}function fs(e,t){var n=e.getDay();return e=n>=4||n===0?W(e):W.ceil(e),Y(e.getFullYear()%1e4,t,4)}function ps(e){var t=e.getTimezoneOffset();return(t>0?`-`:(t*=-1,`+`))+Y(t/60|0,`0`,2)+Y(t%60,`0`,2)}function ms(e,t){return Y(e.getUTCDate(),t,2)}function hs(e,t){return Y(e.getUTCHours(),t,2)}function gs(e,t){return Y(e.getUTCHours()%12||12,t,2)}function _s(e,t){return Y(1+Ya.count(q(e),e),t,3)}function vs(e,t){return Y(e.getUTCMilliseconds(),t,3)}function ys(e,t){return vs(e,t)+`000`}function bs(e,t){return Y(e.getUTCMonth()+1,t,2)}function xs(e,t){return Y(e.getUTCMinutes(),t,2)}function Ss(e,t){return Y(e.getUTCSeconds(),t,2)}function Cs(e){var t=e.getUTCDay();return t===0?7:t}function ws(e,t){return Y(ro.count(q(e)-1,e),t,2)}function Ts(e){var t=e.getUTCDay();return t>=4||t===0?so(e):so.ceil(e)}function Es(e,t){return e=Ts(e),Y(so.count(q(e),e)+(q(e).getUTCDay()===4),t,2)}function Ds(e){return e.getUTCDay()}function Os(e,t){return Y(io.count(q(e)-1,e),t,2)}function ks(e,t){return Y(e.getUTCFullYear()%100,t,2)}function As(e,t){return e=Ts(e),Y(e.getUTCFullYear()%100,t,2)}function js(e,t){return Y(e.getUTCFullYear()%1e4,t,4)}function Ms(e,t){var n=e.getUTCDay();return e=n>=4||n===0?so(e):so.ceil(e),Y(e.getUTCFullYear()%1e4,t,4)}function Ns(){return`+0000`}function Ps(){return`%`}function Fs(e){return+e}function Is(e){return Math.floor(e/1e3)}var Ls,Rs;zs({dateTime:`%x, %X`,date:`%-m/%-d/%Y`,time:`%-I:%M:%S %p`,periods:[`AM`,`PM`],days:[`Sunday`,`Monday`,`Tuesday`,`Wednesday`,`Thursday`,`Friday`,`Saturday`],shortDays:[`Sun`,`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`],months:[`January`,`February`,`March`,`April`,`May`,`June`,`July`,`August`,`September`,`October`,`November`,`December`],shortMonths:[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`]});function zs(e){return Ls=xo(e),Rs=Ls.format,Ls.parse,Ls.utcFormat,Ls.utcParse,Ls}function Bs(e){return new Date(e)}function Vs(e){return e instanceof Date?+e:+new Date(+e)}function Hs(e,t,n,r,i,a,o,s,c,l){var u=ca(),d=u.invert,f=u.domain,p=l(`.%L`),m=l(`:%S`),h=l(`%I:%M`),g=l(`%I %p`),_=l(`%a %d`),v=l(`%b %d`),y=l(`%B`),b=l(`%Y`);function x(e){return(c(e)<e?p:s(e)<e?m:o(e)<e?h:a(e)<e?g:r(e)<e?i(e)<e?_:v:n(e)<e?y:b)(e)}return u.invert=function(e){return new Date(d(e))},u.domain=function(e){return arguments.length?f(Array.from(e,Vs)):f().map(Bs)},u.ticks=function(t){var n=f();return e(n[0],n[n.length-1],t??10)},u.tickFormat=function(e,t){return t==null?x:l(t)},u.nice=function(e){var n=f();return(!e||typeof e.range!=`function`)&&(e=t(n[0],n[n.length-1],e??10)),e?f(Ia(n,e)):u},u.copy=function(){return oa(u,Hs(e,t,n,r,i,a,o,s,c,l))},u}function Us(){return Zi.apply(Hs(go,_o,K,uo,Za,Ja,Ka,Wa,Ua,Rs).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}var Ws=[a.TimeSpan.NANOSECOND,a.TimeSpan.nanoseconds(2),a.TimeSpan.nanoseconds(5),a.TimeSpan.nanoseconds(10),a.TimeSpan.nanoseconds(20),a.TimeSpan.nanoseconds(50),a.TimeSpan.nanoseconds(100),a.TimeSpan.nanoseconds(200),a.TimeSpan.nanoseconds(500),a.TimeSpan.MICROSECOND,a.TimeSpan.microseconds(2),a.TimeSpan.microseconds(5),a.TimeSpan.microseconds(10),a.TimeSpan.microseconds(20),a.TimeSpan.microseconds(50),a.TimeSpan.microseconds(100),a.TimeSpan.microseconds(200),a.TimeSpan.microseconds(500),a.TimeSpan.MILLISECOND,a.TimeSpan.milliseconds(2),a.TimeSpan.milliseconds(5),a.TimeSpan.milliseconds(10),a.TimeSpan.milliseconds(20),a.TimeSpan.milliseconds(50),a.TimeSpan.milliseconds(100),a.TimeSpan.milliseconds(200),a.TimeSpan.milliseconds(500),a.TimeSpan.SECOND],Gs=class{_domain;_range;_span;constructor(){this._domain=[new a.TimeStamp(0n),new a.TimeStamp(1n)],this._range=[0,1],this._span=this._domain[1].span(this._domain[0])}domain(e){return e===void 0?this._domain:(this._domain=[new a.TimeStamp(e[0]),new a.TimeStamp(e[1])],this._span=this._domain[1].span(this._domain[0]),this)}range(e){return e===void 0?this._range:(this._range=e,this)}scale(e){let t=new a.TimeStamp(e).valueOf(),n=this._domain[0].valueOf(),r=this._domain[1].valueOf()-n,i=this._range[1]-this._range[0];return Number(t-n)/Number(r)*i+this._range[0]}ticks(e){let t=this.calculateOptimalStep(e).valueOf(),n=this._domain[0].valueOf(),r=this._domain[1].valueOf(),i=(n+t-1n)/t*t,o=Number((r-i)/t);return Array.from({length:o+1},(e,n)=>new a.TimeStamp(i+BigInt(n)*t)).filter(e=>e.afterEq(this._domain[0])&&e.beforeEq(this._domain[1]))}calculateOptimalStep(e){let t=this._span.valueOf()/BigInt(Math.ceil(e)),n=Ws[0];for(let e of Ws){if(e.valueOf()>t)break;n=e}return n}formatTick(e){return this._span.lessThan(a.TimeSpan.microseconds(50))?`${e.remainder(a.TimeSpan.MILLISECOND).microseconds.toString()}µs`:`${e.remainder(a.TimeSpan.SECOND).milliseconds.toString()}ms`}},Ks=()=>new Gs,qs=o.z.enum([`linear`,`time`]),Js=o.z.object({tickSpacing:o.z.number().default(75),type:qs.default(`linear`)}),Ys=e=>{let t=Js.parse(e);return $s[t.type](t)},Xs=class{props;prevScaleSize;prevDomain;currTicks;normalScale;preciseScale;constructor(e){this.props=e,this.normalScale=Us(),this.preciseScale=Ks(),this.prevScaleSize=0,this.prevDomain=new a.TimeRange(new a.TimeStamp(0),new a.TimeStamp(0)),this.currTicks=[]}create({decimalToDataScale:e,size:t}){let n=new a.TimeRange(new a.TimeStamp(e.pos(0)),new a.TimeStamp(e.pos(1)));if(this.prevDomain.equals(n)&&this.prevScaleSize===t)return this.currTicks;if(this.prevDomain=n,this.prevScaleSize!==t){let e=[0,t];this.preciseScale.range(e),this.normalScale.range(e),this.prevScaleSize=t}if(n.span.milliseconds<5){this.preciseScale.domain([n.start,n.end]);let e=Qs(t,this.props.tickSpacing)/2;this.currTicks=this.preciseScale.ticks(e).map(e=>({label:this.preciseScale.formatTick(e),position:this.preciseScale.scale(e)}))}else this.normalScale.domain([n.start.date(),n.end.date()]),this.currTicks=this.normalScale.ticks(Qs(t,this.props.tickSpacing)).map(e=>({label:this.normalTickLabel(e),position:this.normalScale(e)}));return this.currTicks}normalTickLabel(e){let t=`:${e.getSeconds()}`,n=e.getMilliseconds();if(n!==0){let n=Math.round(e.getMilliseconds()).toString().padStart(3,`0`).replace(/0+$/,``);t+=`.${n}`}return e.getSeconds()===0&&n===0&&(t=`${e.getHours()}:${e.getMinutes().toString().padStart(2,`0`)}`),t}},Zs=class{props;prevDomain;prevScaleSize;currTicks;d3Scale;constructor(e){this.props=e,this.prevDomain=a.bounds.construct(0,0),this.prevScaleSize=0,this.currTicks=[],this.d3Scale=Fa()}create({decimalToDataScale:e,size:t}){let n={lower:e.pos(0),upper:e.pos(1)};if(a.bounds.equals(this.prevDomain,n)&&this.prevScaleSize===t)return this.currTicks;a.bounds.equals(this.prevDomain,n)||(this.d3Scale=this.d3Scale.domain([n.lower,n.upper])),this.prevScaleSize!==t&&(this.d3Scale=this.d3Scale.range([0,t])),this.prevDomain=n,this.prevScaleSize=t;let r=Qs(t,this.props.tickSpacing);return this.currTicks=this.d3Scale.ticks(r).map(e=>({label:this.tickLabel(e),position:this.d3Scale(e)})),this.currTicks}tickLabel(e){return e.toString()}},Qs=(e,t)=>{let n=Math.floor(e/t);return n>0?n:1},$s={linear:e=>new Zs(e),time:e=>new Xs(e)},ec=Js.extend({color:a.color.colorZ,type:qs.default(`linear`),font:o.z.string(),showGrid:o.z.boolean().default(!0),location:a.location.outerZ,gridColor:a.color.colorZ}),X=5,tc=6,nc={useAtlas:!0},rc={bottom:(e,t)=>new oc(e,t),top:(e,t)=>new sc(e,t),left:(e,t)=>new cc(e,t),right:(e,t)=>new lc(e,t)},ic=(e,t,n)=>rc[e](t,n),ac=class e{renderCtx;state;tickFactory;constructor(e,t){this.renderCtx=e,this.state=t,this.tickFactory=Ys(this.state)}setState(e){this.state=n.D(ec,e),this.tickFactory=Ys(e)}drawLine(e,t){let{lower2d:n}=this.renderCtx;n.moveTo(...a.xy.couple(e)),n.lineTo(...a.xy.couple(t))}drawTicks(e,t){let n=a.dimensions.ZERO;return e.forEach(e=>{let r=this.renderCtx.lower2d.textDimensions(e.label,nc);n=a.dimensions.max([n,r]),t(r,e)}),n}static START_BOUND=a.bounds.construct(-1,1);maybeDrawGrid(t,n,r){let{showGrid:i,gridColor:o}=this.state;if(i){let i=e.START_BOUND,s=a.bounds.construct(t-1,t+1),{lower2d:c}=this.renderCtx;c.beginPath(),c.strokeStyle=a.color.hex(o),n.forEach(e=>{a.bounds.contains(i,e.position)||a.bounds.contains(s,e.position)||this.drawLine(...r(e))}),c.stroke()}}setColor(e){let t=a.color.hex(e);this.renderCtx.lower2d.strokeStyle=t,this.renderCtx.lower2d.fillStyle=t,this.renderCtx.lower2d.font=this.state.font}},oc=class extends ac{render(e){let{lower2d:t}=this.renderCtx,{plot:n,position:r}=e,{width:i,height:o}=a.box.dims(n),s=this.tickFactory.create({...e,size:i});t.beginPath(),this.setColor(this.state.color),this.drawLine(r,a.xy.translate(r,`x`,i));let c=this.drawTicks(s,(e,n)=>{this.drawLine(a.xy.translateX(r,n.position),a.xy.translate(r,{x:n.position,y:X})),t.fillText(n.label,r.x+n.position-e.width/2,r.y+X+e.height+tc,void 0,nc)});return t.stroke(),this.maybeDrawGrid(i,s,e=>[a.xy.translate(r,`x`,e.position),a.xy.translate(r,{x:e.position,y:-o})]),{size:c.height+X+tc}}},sc=class extends ac{render(e){let{lower2d:t}=this.renderCtx,{plot:n}=e,{width:r,height:i}=a.box.dims(n),o=a.xy.translate(e.position,`y`,e.size),s=this.tickFactory.create({...e,size:r});t.beginPath(),this.setColor(this.state.color),this.drawLine(o,a.xy.translate(o,`x`,r));let c=this.drawTicks(s,(e,n)=>{this.drawLine(a.xy.translateX(o,n.position),a.xy.translate(o,{x:n.position,y:-X})),t.fillText(n.label,o.x+n.position-e.width/2,o.y-X-e.height-tc,void 0,nc)});return t.stroke(),this.maybeDrawGrid(r,s,e=>[a.xy.translate(o,`x`,e.position),a.xy.translate(o,{x:e.position,y:i})]),{size:c.height+X}}},cc=class extends ac{render(e){let{lower2d:t}=this.renderCtx,{plot:n,position:r}=e,{height:i,width:o}=a.box.dims(n),s=a.xy.translate(r,`x`,e.size),c=this.tickFactory.create({...e,size:i});t.beginPath(),this.setColor(this.state.color),this.drawLine(s,a.xy.translate(s,`y`,i));let l=this.drawTicks(c,(e,n)=>{this.drawLine(a.xy.translateY(s,n.position),a.xy.translate(s,{x:-X,y:n.position})),t.fillText(n.label,s.x-e.width-X*2,s.y+n.position+e.height/2,void 0,nc)});return t.stroke(),this.maybeDrawGrid(i,c,e=>[a.xy.translate(s,`y`,e.position),a.xy.translate(s,{x:o,y:e.position})]),{size:l.width+X*2}}},lc=class extends ac{render(e){let{lower2d:t}=this.renderCtx,{plot:n,position:r}=e,{height:i,width:o}=a.box.dims(n),s=this.tickFactory.create({...e,size:i});t.beginPath(),this.setColor(this.state.color),this.drawLine(r,a.xy.translateY(r,i));let c=this.drawTicks(s,(e,n)=>{this.drawLine(a.xy.translateY(r,n.position),a.xy.translate(r,{x:X,y:n.position})),t.fillText(n.label,r.x+X+tc,r.y+n.position+e.height/2,void 0,nc)});return t.stroke(),this.maybeDrawGrid(i,s,e=>[a.xy.translateY(r,e.position),a.xy.translate(r,{x:-o,y:e.position})]),{size:c.width+X+tc}}},uc=e.n({Base:()=>ac,Bottom:()=>oc,Right:()=>lc,Top:()=>sc,axisStateZ:()=>ec,newCanvas:()=>ic,newTickFactory:()=>Ys,tickFactoryProps:()=>Js,tickType:()=>qs}),dc=o.z.object({key:o.z.string(),size:o.z.number(),order:o.z.number(),loc:a.location.outerZ});o.z.record(o.z.string(),dc);var Z=(e,t)=>Object.values(t).filter(({loc:t})=>t===e).sort((e,t)=>t.order-e.order),fc=(e,t,n)=>{let r=t[e];if(r==null)return a.xy.ZERO;let i=a.location.construct(r.loc),o=Z(i,t),s=Z(a.location.construct(a.direction.swap(a.location.direction(i))),t),c=o.findIndex(({key:t})=>t===e),l=o.slice(0,c).reduce((e,{size:t})=>e+t,0),u=s.reduce((e,{size:t})=>e+t,0);switch(i){case`left`:return a.xy.translate(a.box.topLeft(n),[l,u]);case`right`:return a.xy.translate(a.box.topRight(n),[l-r.size,u]);case`top`:return a.xy.translate(a.box.topLeft(n),[u,l]);default:return a.xy.translate(a.box.bottomLeft(n),[u,-l-r.size])}},pc=(e,t)=>{let n=Z(`left`,e),r=Z(`right`,e),i=Z(`top`,e),o=Z(`bottom`,e),s=n.reduce((e,{size:t})=>e+t,0),c=r.reduce((e,{size:t})=>e+t,0),l=i.reduce((e,{size:t})=>e+t,0),u=o.reduce((e,{size:t})=>e+t,0);return a.box.construct(a.xy.translate(a.box.topLeft(t),{x:s,y:l}),a.box.width(t)-s-c,a.box.height(t)-l-u)},mc=ec.extend({axisKey:o.z.string().optional(),bounds:a.bounds.boundsZ.optional(),autoBounds:o.z.object({lower:o.z.boolean().default(!0),upper:o.z.boolean().default(!0)}).or(o.z.boolean().default(!0)),autoBoundPadding:o.z.number().optional(),autoBoundUpdateInterval:a.TimeSpan.z.default(a.TimeSpan.seconds(10)),size:o.z.number().default(0),label:o.z.string().default(``),labelSize:o.z.number().default(0)}).partial({color:!0,font:!0,gridColor:!0}),hc=2,gc=7,_c=(e,t)=>a.bounds.contains({lower:e-gc,upper:e+hc},t),vc=a.bounds.DECIMAL,yc=a.TimeStamp.now(),bc={lower:Number(yc.valueOf()),upper:Number(yc.add(a.TimeSpan.HOUR).valueOf())},xc=e=>e===`linear`?vc:bc,Sc=(e,t=.1,n)=>{let r=a.bounds.max(e.filter(a.bounds.isFinite));if(!a.bounds.isFinite(r))return xc(n);let{lower:i,upper:o}=r;if(o===i)return{lower:i-1,upper:o+1};let s=(o-i)*t;return{lower:i-s,upper:o+s}},Cc=.01,wc=.1,Tc=class extends n.S{afterUpdate(e){let{internal:t}=this,{location:i,autoBoundUpdateInterval:o}=this.state;t.render=r.l.use(e);let s=n.i(e),c=a.direction.construct(i);this.state.autoBoundPadding??=c===`x`?wc:Cc,t.base=ic(i,t.render,{color:s.colors.gray.l10,font:n.a(s,{level:`small`,code:!0}),gridColor:s.colors.gray.l1,...this.state}),r.o(e,`layout`),t.updateBounds??=(0,a.throttle)(e=>this.setState(t=>({...t,bounds:e})),o.milliseconds)}afterDelete(e){r.o(e,`layout`)}renderAxis(e,t){if(!e.canvases.includes(`lower2d`))return;let{base:n}=this.internal,{grid:r,container:i}=e,a=fc(`${this.type}-${this.key}`,r,i),o={...e,position:a,decimalToDataScale:t,size:this.state.size+this.state.labelSize},{size:s}=n.render(o);_c(this.state.size,s)||this.setState(e=>({...e,size:s}))}iBounds(e,t){if(e&&this.internal.boundSnapshot!=null)return[this.internal.boundSnapshot,null];let{lower:n,upper:r}=Ec(this.state.autoBounds);if(!n&&!r&&this.state.bounds!=null)return this.internal.boundSnapshot=this.state.bounds,[this.state.bounds,null];let i=e=>({upper:r||this.state.bounds==null?e.upper:this.state.bounds.upper,lower:n||this.state.bounds==null?e.lower:this.state.bounds.lower}),a,o=null;try{a=Sc(t(),this.state.autoBoundPadding,this.state.type)}catch(e){a=xc(this.state.type),o=e}let s=i(a);return this.internal.boundSnapshot=s,(this.state.bounds==null||n&&this.state.bounds.lower!==s.lower||r&&this.state.bounds.upper!==s.upper)&&this.internal.updateBounds?.(s),[s,o]}dataToDecimalScale(e,t,n){let[r,i]=this.iBounds(e,t),o=a.direction.swap(a.direction.construct(this.state.location));return[a.scale.Scale.scale(r).scale(1).translate(-a.box.root(n)[o]).magnify(1/a.box.dim(n,o)),i]}},Ec=e=>typeof e==`boolean`?{lower:e,upper:e}:{lower:e?.lower??!0,upper:e?.upper??!0},Q=class{canvas;theme;constructor(e,t){this.canvas=e,this.theme=t}rule({direction:e,region:t,position:n,...r}){return e===`x`?this.line({start:a.xy.construct(a.box.left(t),n),end:a.xy.construct(a.box.right(t),n),...r}):this.line({start:a.xy.construct(n,a.box.top(t)),end:a.xy.construct(n,a.box.bottom(t)),...r})}line({stroke:e,lineWidth:t,lineDash:n,start:r,end:i}){let o=this.canvas;o.strokeStyle=a.color.hex(e),o.lineWidth=t,o.setLineDash([n]),o.beginPath(),o.moveTo(...a.xy.couple(r)),o.lineTo(...a.xy.couple(i)),o.stroke()}circle({fill:e,stroke:t,strokeWidth:n,lineDash:r,radius:i,position:o,angle:s,lineCap:c}){let l=this.canvas;l.beginPath();let u=s?.lower??0,d=s?.upper??2*Math.PI;if(t!=null&&typeof i==`object`){let{inner:e,outer:s}=i,f=(e+s)/2,p=s-e;l.arc(...a.xy.couple(o),f,u,d,!1),l.strokeStyle=a.color.hex(t),l.lineWidth=n??p,c&&(l.lineCap=c),r!=null&&l.setLineDash([r]),l.stroke(),r!=null&&l.setLineDash([])}else if(t!=null&&typeof i==`number`)l.arc(...a.xy.couple(o),i,u,d,!1),l.strokeStyle=a.color.hex(t),l.lineWidth=n??1,c&&(l.lineCap=c),r!=null&&l.setLineDash([r]),l.stroke(),r!=null&&l.setLineDash([]);else if(e!=null)if(l.fillStyle=a.color.hex(e),typeof i==`number`)l.arc(...a.xy.couple(o),i,u,d),l.fill();else{let{inner:e,outer:t}=i;l.arc(...a.xy.couple(o),t,u,d,!1);let n=o.x+e*Math.cos(d),r=o.y+e*Math.sin(d);l.lineTo(n,r),l.arc(...a.xy.couple(o),e,d,u,!0),l.closePath(),l.fill()}}resolveColor(e,t){return e==null?t==null?this.theme.colors.text:this.resolveColor(t):typeof e==`function`?e(this.theme):a.color.construct(e)}border({region:e,color:t,width:n,radius:r,location:i}){let o=this.canvas;o.strokeStyle=a.color.hex(this.resolveColor(t,this.theme.colors.border)),o.lineWidth=n??this.theme.sizes.border.width,r??=this.theme.sizes.border.radius,i==null||i===!0?r>0?(o.roundRect(...a.xy.couple(a.box.topLeft(e)),...a.xy.couple(a.box.dims(e)),r),o.stroke()):(o.rect(...a.xy.couple(a.box.topLeft(e)),...a.xy.couple(a.box.dims(e))),o.stroke()):a.array.toArray(i).forEach(t=>{let[n,r]=a.box.edgePoints(e,t);o.beginPath(),o.moveTo(...a.xy.couple(n)),o.lineTo(...a.xy.couple(r)),o.stroke()})}container({region:e,bordered:t=!0,rounded:n=!0,borderColor:r,borderRadius:i,borderWidth:o,backgroundColor:s}){i??=this.theme.sizes.border.radius,o??=1;let c=this.canvas;c.fillStyle=a.color.hex(this.resolveColor(s,this.theme.colors.gray.l1)),c.strokeStyle=a.color.hex(this.resolveColor(r,this.theme.colors.border)),c.setLineDash([]),c.lineWidth=1,c.beginPath(),n?c.roundRect(...a.xy.couple(a.box.topLeft(e)),...a.xy.couple(a.box.dims(e)),i):c.rect(...a.xy.couple(a.box.topLeft(e)),...a.xy.couple(a.box.dims(e))),c.fill(),t&&this.border({region:e,color:r,radius:i,width:o,location:t})}textContainer(e){let[t,n]=this.spacedTextDrawF(e);t.width+=12,t.height+=12;let{root:r=a.location.TOP_LEFT,offset:i=a.xy.ZERO}=e,o={...e.position};r.x===`right`?o.x-=t.width+i.x:o.x+=i.x,r.y===`bottom`?o.y-=t.height+i.y:o.y+=i.y,this.container({region:a.box.construct(o,t.width,t.height),...e}),this.canvas.filter=`none`,n(a.xy.translate(o,[6,6]))}spacedTextDrawF({text:e,direction:r,spacing:i=1,level:o=`p`}){let s=n.a(this.theme,{level:o}),c=e.map(e=>t.c(e,s,this.canvas)),l=this.theme.sizes.base*i,u=Math.max(...c.map(e=>e[a.direction.dimension(r)]))+l;return[{[a.direction.dimension(a.direction.swap(r))]:Math.max(...c.map(e=>e[a.direction.dimension(a.direction.swap(r))])),[a.direction.dimension(r)]:u*e.length-l},t=>{let r=n.a(this.theme,{level:o});this.canvas.font=r,this.canvas.fillStyle=a.color.hex(this.theme.colors.text),this.canvas.textBaseline=`top`,this.canvas.textAlign=`start`,e.forEach((e,n)=>{this.canvas.fillText(e,t.x,t.y+u*n)})}]}list({length:e,itemHeight:t,width:n,spacing:r=0,position:i,draw:o,root:s=a.location.TOP_LEFT,offset:c=a.xy.ZERO,padding:l=a.xy.ZERO}){let u=e*t+l.y*2+r*(e-1),d=n+l.x*2,f={...i};s.x===`right`?f.x-=n+c.x*2:f.x+=c.x,s.y===`top`?f.y-=u+c.y*2:f.y+=c.y,this.container({region:a.box.construct(f,{width:d,height:u}),backgroundColor:e=>e.colors.gray.l1});for(let i=0;i<e;i++){let e=a.box.construct(a.xy.construct(f.x+l.x,f.y+i*t+l.y+r*i),n,t);o(i,e)}}drawTextInCenter({box:e,text:n,level:r}){let i=t.c(n,this.canvas.font,this.canvas),o=a.box.positionInCenter(a.box.construct(a.xy.ZERO,i),e);return this.text({text:n,position:a.box.topLeft(o),level:r})}text({text:e,position:t,level:r=`p`,weight:i,shade:o,maxWidth:s,code:c,justify:l=`left`,align:u=`top`,useAtlas:d,color:f}){this.canvas.font=n.a(this.theme,{level:r,weight:i,code:c}),f==null?o==null?this.canvas.fillStyle=a.color.hex(this.theme.colors.text):this.canvas.fillStyle=a.color.hex(this.theme.colors.gray[`l${o}`]):this.canvas.fillStyle=a.color.hex(this.resolveColor(f)),this.canvas.textAlign=l,this.canvas.textBaseline=u;let p;s!=null&&(p=this.canvas.scissor(a.box.construct(t,s,1e3))),this.canvas.fillText(e,t.x,t.y,void 0,{useAtlas:d}),p?.()}},Dc=e.n({REGISTRY:()=>jc,Rule:()=>Ac,ruleStateZ:()=>Oc}),Oc=o.z.object({position:o.z.number().optional(),pixelPosition:o.z.number().optional(),dragging:o.z.boolean(),lineWidth:o.z.number().default(1),lineDash:o.z.number().default(20),color:a.color.colorZ}),kc=3,Ac=class extends n.C{static TYPE=`Rule`;schema=Oc;lastUpdateRef=null;afterUpdate(e){this.internal.renderCtx=r.l.use(e);let t=n.i(e);this.internal.draw=new Q(this.internal.renderCtx.upper2d,t),r.o(e,`tool`)}afterDelete(e){r.o(e,`tool`)}updatePositions({decimalToDataScale:e,plot:t}){let n=this.state.dragging,r=this.prevState.dragging&&!n;if((n||r)&&this.state.pixelPosition!=null){if(this.lastUpdateRef??=this.state.pixelPosition,Math.abs(this.state.pixelPosition-this.lastUpdateRef)<kc&&!r)return this.state.pixelPosition;this.lastUpdateRef=this.state.pixelPosition;let n=e.pos(this.state.pixelPosition/a.box.height(t));return this.setState(e=>({...e,position:n})),this.state.pixelPosition}if(this.state.position==null){let t=e.pos(.5);this.setState(e=>({...e,position:t}))}let i=e.reverse().pos(this.state.position)*a.box.height(t);if(!isNaN(i)){if(this.state.pixelPosition!=null&&Math.abs(i-this.state.pixelPosition)<1)return this.state.pixelPosition;this.setState(e=>({...e,pixelPosition:i}))}return i}render(e){if(this.deleted)return;let{renderCtx:t}=this.internal,{location:n,plot:r}=e,i=a.location.direction(n),{upper2d:o}=t,s=this.internal.draw,c=this.updatePositions(e)+a.box.top(e.plot);if(s.rule({stroke:this.state.color,lineWidth:this.state.lineWidth,lineDash:this.state.lineDash,direction:i,region:r,position:c}),o.fillStyle=a.color.hex(this.state.color),o.lineJoin=`round`,o.lineWidth=3.5,o.lineCap=`round`,o.beginPath(),n===`left`){let e=a.box.left(r)-1;o.moveTo(e,c),o.lineTo(e-4,c-4),o.lineTo(e-4,c+4)}else n===`right`&&(o.moveTo(a.box.right(r),c),o.lineTo(a.box.right(r)+4,c-4),o.lineTo(a.box.right(r)+4,c+4));o.closePath(),o.stroke()}},jc={[Ac.TYPE]:Ac},Mc=mc.extend({location:a.location.x.default(`left`)}),Nc=2,Pc=e=>a.box.signedWidth(e)<Nc||a.box.signedHeight(e)<Nc,Fc=class extends Tc{static TYPE=`YAxis`;schema=mc;xBounds(){return a.bounds.max(this.lines.map(e=>e.xBounds()).filter(e=>a.bounds.isFinite(e)))}bounds(e){let[t,n]=this.iBounds(e,this.dataBounds.bind(this));if(n!=null)throw n;return t}render(e){if(this.deleted)return;let[t,n]=this.dataToDecimalScale(e.hold,this.dataBounds.bind(this),e.viewport),r=t.invert().reverse();if(this.renderAxis(e,r),this.renderLines(e,t),this.renderRules(e,r),n!=null)throw n}renderLines({xDataToDecimalScale:e,plot:t,canvases:n,exposure:r},i){if(!n.includes(`gl`)||Pc(t))return;let o={region:t,dataToDecimalScale:new a.scale.XY(e,i),exposure:r};this.lines.forEach(e=>e.render(o))}renderRules({container:e,plot:t,canvases:n},r){if(!n.includes(`upper2d`))return;let{location:i}=this.state,{render:o}=this.internal,s=a.box.construct(a.box.left(e),a.box.top(t),a.box.width(e),a.box.height(t)),c=o.scissor(s,a.xy.ZERO,[`upper2d`]),l={container:e,plot:t,decimalToDataScale:r,location:i};this.rules.map(e=>e.render(l)),c()}findByXValue({xDataToDecimalScale:e,plot:t,viewport:n,hold:r,exposure:i},o){let[s,c]=this.dataToDecimalScale(r,this.dataBounds.bind(this),n);if(c!=null)throw c;let l={region:t,dataToDecimalScale:new a.scale.XY(e,s),exposure:i};return this.lines.map(e=>({...e.findByXValue(l,o),units:this.state.label}))}dataBounds(){return this.lines.map(e=>e.yBounds())}get lines(){return this.childrenOfType(_i.TYPE)}get rules(){return this.childrenOfType(Ac.TYPE)}},Ic=o.z.object({start:a.TimeStamp.z,end:a.TimeStamp.z}),Lc=class extends n.C{static TYPE=`range-annotation`;schema=Ic;afterUpdate(e){this.internal.render=r.l.use(e),this.internal.draw=new Q(this.internal.render.upper2d,n.i(e))}},Rc=i.ranger.payloadZ.extend({viewport:a.bounds.boundsZ}),zc=o.z.object({cursor:a.xy.xyZ.or(o.z.null()),hovered:Rc.or(o.z.null()),count:o.z.number()}),Bc=class extends n.C{static TYPE=`range-provider`;schema=zc;fetchedInitial=a.TimeRange.ZERO;afterUpdate(e){let{internal:t}=this;t.render=r.l.use(e),t.draw=new Q(t.render.upper2d,n.i(e)),t.requestRender=r.c(e),t.runAsync=n.v(e),t.ranges??=new Map;let i=D(e);if(t.requestRender(`tool`),i==null)return;t.client=i;let o=se(e,this.key);t.removeListener?.();let s=o.ranges.onSet(e=>{t.client!=null&&(a.color.isCrude(e.color)&&t.ranges.set(e.key,t.client.ranges.sugarOne(e)),this.setState(e=>({...e,count:t.ranges.size})),t.requestRender(`tool`))}),c=o.ranges.onDelete(async e=>{t.ranges.delete(e),this.setState(e=>({...e,count:t.ranges.size})),t.requestRender(`tool`)});t.removeListener=()=>{s(),c()}}fetchInitial(e){let{internal:t}=this,{client:n,runAsync:r}=t;n==null||this.fetchedInitial.equals(e,a.TimeSpan.minutes(1))||(this.fetchedInitial=e,r(async()=>{(await n.ranges.retrieve(e)).forEach(e=>{a.color.isCrude(e.color)&&t.ranges.set(e.key,e)}),this.setState(e=>({...e,count:t.ranges.size}))},`failed to fetch initial ranges`))}render(e){let{dataToDecimalScale:t,region:n,viewport:r,timeRange:i}=e;this.fetchInitial(i);let{draw:o,ranges:s}=this.internal,c=t.scale(a.box.xBounds(n)),l=this.state.cursor==null?null:this.state.cursor.x,u=null,d=o.canvas.scissor(a.box.construct({x:a.box.left(n),y:a.box.top(n)-35},{x:a.box.right(n),y:a.box.bottom(n)}));s.forEach(e=>{let i=a.color.colorZ.safeParse(e.color);if(!i.success)return;let s=i.data,d=c.pos(Number(e.timeRange.start.valueOf())),f=c.pos(Number(e.timeRange.end.valueOf()));if(f<a.box.left(n)||d>a.box.right(n))return;d=(0,a.clamp)(d,a.box.left(n)-2,a.box.right(n)-1);let p=!1;l!=null&&(p=a.bounds.contains({lower:d,upper:f},l)),p&&(u={key:e.key,parent:e.parent,name:e.name,color:e.color,labels:e.labels,timeRange:e.timeRange,viewport:{lower:t.scale(a.box.xBounds(r)).pos(Number(e.timeRange.start.valueOf())),upper:t.scale(a.box.xBounds(r)).pos(Number(e.timeRange.end.valueOf()))}}),o.container({region:a.box.construct({x:d,y:a.box.top(n)-1},{x:f,y:a.box.bottom(n)-1}),backgroundColor:a.color.setAlpha(s,.2),bordered:!1});let m=a.box.construct({x:d+1,y:a.box.top(n)-34},{x:f-1,y:a.box.top(n)-12});o.container({region:m,backgroundColor:a.box.width(m)<20?a.color.setAlpha(s,.4):e=>p?e.colors.gray.l2:e.colors.gray.l0,bordered:!0,borderWidth:1,borderRadius:2,borderColor:a.color.setAlpha(s,.8)}),o.text({text:e.name,position:{x:d+8,y:a.box.top(n)-30},level:`small`,shade:10,weight:500,maxWidth:f-d-16})}),d(),u==null?this.state.hovered&&this.setState(e=>({...e,hovered:null})):this.setState(e=>({...e,hovered:u}))}},Vc={[Lc.TYPE]:Lc,[Bc.TYPE]:Bc},Hc=mc,Uc=class extends Tc{static TYPE=`XAxis`;schema=mc;render(e){if(this.deleted)return;let[t,n]=this.dataToDecimalScale(e.hold,this.dataBounds.bind(this),e.viewport);if(this.renderAxis(e,t.reverse()),this.renderYAxes(e,t),this.renderRanges(e,t),n!=null)throw n}findByXDecimal(e,t){let[n,r]=this.dataToDecimalScale(e.hold,this.dataBounds.bind(this),e.viewport);if(r!=null)throw r;return this.findByXValue(e,n.reverse().pos(t))}findByXValue(e,t){let[n,r]=this.dataToDecimalScale(e.hold,this.dataBounds.bind(this),e.viewport);if(r!=null)throw r;let i={...e,xDataToDecimalScale:n};return this.yAxes.map(e=>e.findByXValue(i,t)).flat()}renderYAxes(e,t){let n={...e,xDataToDecimalScale:t};this.yAxes.forEach(e=>e.render(n))}get yAxes(){return this.childrenOfType(Fc.TYPE)}get ranges(){return this.childrenOfType(Bc.TYPE)}bounds(e){let[t,n]=this.iBounds(e,this.dataBounds.bind(this));if(n!=null)throw n;return t}renderRanges(e,t){let n=this.bounds(e.hold),r=a.bounds.min([n,a.TimeRange.MAX.numericBounds]),i=new a.TimeRange(r.lower,r.upper);this.ranges.forEach(n=>n.render({dataToDecimalScale:t,region:e.plot,viewport:e.viewport,timeRange:i}))}dataBounds(){return this.yAxes.map(e=>e.xBounds())}},Wc=e.n({REGISTRY:()=>Zc,Tooltip:()=>Xc,tooltipStateZ:()=>Yc}),Gc=a.xy.construct(12),Kc=3,qc=14,Jc=a.xy.construct(6),Yc=o.z.object({position:a.xy.xyZ.or(o.z.null()),textColor:a.color.colorZ.default(a.color.ZERO),backgroundColor:a.color.colorZ.default(a.color.ZERO),borderColor:a.color.colorZ.default(a.color.ZERO),ruleColor:a.color.colorZ.default(a.color.ZERO),ruleStrokeWidth:o.z.number().default(1),ruleStrokeDash:o.z.number().default(0)}),Xc=class extends n.C{static TYPE=`tooltip`;schema=Yc;afterUpdate(e){let t=n.i(e);a.color.isZero(this.state.textColor)&&(this.state.textColor=t.colors.text),a.color.isZero(this.state.backgroundColor)&&(this.state.backgroundColor=t.colors.gray.l1),a.color.isZero(this.state.borderColor)&&(this.state.borderColor=t.colors.border),a.color.isZero(this.state.ruleColor)&&(this.state.ruleColor=t.colors.gray.l7),this.internal.dotColor=t.colors.text,this.internal.dotColorContrast=t.colors.textInverted,this.internal.render=r.l.use(e),this.internal.draw=new Q(this.internal.render.upper2d,t),r.o(e,`tool`)}afterDelete(e){r.o(e,`tool`)}render(e){if(this.deleted||this.state.position==null)return;let{region:t}=e,n=a.scale.XY.scale(a.box.DECIMAL).scale(t),r=a.scale.XY.scale(t).scale(a.box.DECIMAL),i=e.findByXDecimal(r.x.pos(this.state.position.x)),o=i.filter(e=>a.xy.isFinite(e.value)),{draw:s}=this.internal,c=o.reduce((e,t)=>e+t.position.x,0)/o.length,l=new a.TimeStamp(o.reduce((e,t)=>e+t.value.x,0)/o.length),u=n.x.pos(c);if(!a.bounds.contains(a.box.xBounds(t),u))return;s.rule({stroke:this.state.ruleColor,lineWidth:this.state.ruleStrokeWidth,lineDash:this.state.ruleStrokeDash,direction:`y`,region:t,position:u}),o.forEach(e=>{let t=n.pos(e.position);s.circle({fill:a.color.setAlpha(e.color,.5),radius:8,position:t}),s.circle({fill:a.color.setAlpha(e.color,.8),radius:5,position:t}),s.circle({fill:a.color.pickByContrast(e.color,this.internal.dotColor,this.internal.dotColorContrast),radius:2,position:t})});let d=r.pos(this.state.position),f={...a.location.TOP_LEFT};d.x>.6&&(f.x=`right`),d.y>.6&&(f.y=`bottom`);let p=i.reduce((e,t)=>Math.max(e,t.label?.length??0),0),m=l.toString(`preciseDate`,`local`).length;m>p&&(p=m),s.list({root:f,offset:Gc,length:o.length+1,padding:Jc,itemHeight:qc,spacing:Kc,width:p*7+48,position:this.state.position,draw:(e,t)=>{let n,r,i=this.state.textColor;if(e===0)n=`Time`,r=l.toString(`preciseDate`,`local`);else{let t=o[e-1];n=t.label??``,r=a.math.smartRound(t.value.y,t.bounds).toString(),i=t.color}s.text({position:a.box.topLeft(t),text:n,level:`small`,weight:500,color:i}),s.text({position:a.xy.translateY(a.box.topRight(t),-1),text:r,level:`small`,justify:`right`,code:!0,shade:10})}})}},Zc={[Xc.TYPE]:Xc},Qc=e.n({Measure:()=>Al,REGISTRY:()=>jl,measureStateZ:()=>el,modeZ:()=>$c}),$c=o.z.enum([`one`,`two`]),el=o.z.object({one:a.xy.xyZ.nullable(),two:a.xy.xyZ.nullable(),hover:a.xy.xyZ.nullable(),mode:$c.default(`one`),color:o.z.union([a.color.colorZ,o.z.object({verticalLine:a.color.colorZ.default(a.color.ZERO),horizontalLine:a.color.colorZ.default(a.color.ZERO),obliqueLine:a.color.colorZ.default(a.color.ZERO)})]).optional().default(a.color.ZERO),strokeWidth:o.z.number().default(1),strokeDash:o.z.number().default(2)}),tl=e=>e===`one`?`1`:`2`,nl=e=>e.colors.error.z,rl=e=>e.colors.secondary.z,il=e=>e.colors.gray.l9,al=6,ol=14,sl=8,cl=8,ll=3,ul=9,dl=8,fl=2,pl=2,ml=8,hl=5,gl=2,_l=.5,vl=.8,yl=50,bl=80,xl=30,Sl=30,Cl=10,wl=35,Tl=40,El=100,Dl=30,$=15,Ol=8,kl=10,Al=class extends n.C{static TYPE=`measure`;schema=el;afterUpdate(e){let t=r.l.use(e);this.internal.theme=n.i(e),this.internal.renderCtx=t,this.internal.draw=new Q(t.upper2d,this.internal.theme),r.o(e,`tool`),this.internal.dotColor=this.internal.theme.colors.text,this.internal.dotColorContrast=this.internal.theme.colors.textInverted}afterDelete(e){r.o(e,`layout`)}get verticalLineColor(){return a.color.isColor(this.state.color)?a.color.isZero(this.state.color)?this.internal.theme.colors.gray.l8:this.state.color:a.color.isZero(this.state.color.verticalLine)?this.internal.theme.colors.gray.l8:this.state.color.verticalLine}get horizontalLineColor(){return a.color.isColor(this.state.color)?a.color.isZero(this.state.color)?this.internal.theme.colors.gray.l8:this.state.color:a.color.isZero(this.state.color.horizontalLine)?this.internal.theme.colors.gray.l8:this.state.color.horizontalLine}get obliqueLineColor(){return a.color.isColor(this.state.color)?a.color.isZero(this.state.color)?this.internal.theme.colors.gray.l8:this.state.color:a.color.isZero(this.state.color.obliqueLine)?this.internal.theme.colors.gray.l8:this.state.color.obliqueLine}findPoint(e,t,n,r,i){let o=r!=null&&!a.xy.equals(t,r);if(n!=null&&!o){let t=e.findByXValue(n.x).filter(e=>Number.isFinite(e.value.x)&&Number.isFinite(e.value.y));return t.length>0?t.sort((e,t)=>a.xy.distance(n,e.value)-a.xy.distance(n,t.value))[0]:null}let s=i.pos(t),c=e.findByXDecimal(s.x).filter(e=>Number.isFinite(e.value.x)&&Number.isFinite(e.value.y));return c.length===0?null:c.sort((e,t)=>a.xy.distance(s,e.position)-a.xy.distance(s,t.position))[0]}find(e){let{one:t,two:n}=this.state;if(t==null||n==null)return null;let{dataOne:r,dataTwo:i,clickOne:o,clickTwo:s}=this.internal,c=a.scale.XY.scale(e.region).scale(a.box.DECIMAL),l=this.findPoint(e,t,r,o,c);if(l==null)return null;(o==null||!a.xy.equals(t,o))&&(this.internal.dataOne={...l.value},this.internal.clickOne={...t});let u=this.findPoint(e,n,i,s,c);return u==null?null:((s==null||!a.xy.equals(n,s))&&(this.internal.dataTwo={...u.value},this.internal.clickTwo={...n}),[l,u])}drawLabelValue(e,t,n,r){let{draw:i}=this.internal,o=a.xy.construct(al),s=e.length*sl+t.length*cl+o.x*ll,c=ol+o.y*2,l=a.box.construct(n,s,c);i.container({region:l,backgroundColor:e=>e.colors.gray.l1}),i.text({text:e,position:a.xy.translate(a.box.topLeft(l),o),level:`small`,weight:500,color:r(this.internal.theme)}),i.text({text:t,position:a.xy.translate(a.box.topRight(l),[-o.x-1,o.y-1]),level:`small`,justify:`right`,code:!0,shade:10})}drawCombinedDeltaLabel(e,t,n,r,i,o){let{draw:s,theme:c}=this.internal,l=a.xy.construct(al),u=sl*5+Math.max(t.length,n.length,r.length)*cl+l.x*ll,d=ol,f=d*3+l.y*2,p;if(o){let t=a.xy.translate(e,[-u/2,-f/2]);p=a.box.construct(t,u,f)}else if(p=a.box.construct(e,u,f),a.box.right(p)>a.box.right(i)){let t=a.xy.translateX(e,-u-bl*2);p=a.box.construct(t,u,f)}s.container({region:p,backgroundColor:e=>e.colors.gray.l1}),this.drawPointLabelRow({region:p,label:`ΔX`,value:t,labelColor:c.colors.error.z,yOffset:0,leftOffset:0}),this.drawPointLabelRow({region:p,label:`ΔY`,value:n,labelColor:c.colors.secondary.z,yOffset:d,leftOffset:0}),this.drawPointLabelRow({region:p,label:`Slope`,value:r,labelColor:c.colors.gray.l9,yOffset:d*2,leftOffset:0})}drawPointLabelRow(e){let{region:t,label:n,value:r,labelColor:i,yOffset:o,leftOffset:s}=e,{draw:c}=this.internal,l=a.xy.construct(al);c.text({text:n,position:a.xy.translate(a.box.topLeft(t),[l.x+s,l.y+o]),level:`small`,weight:500,color:i}),c.text({text:r,position:a.xy.translate(a.box.topRight(t),[-l.x-1,l.y+o-1]),level:`small`,justify:`right`,code:!0,shade:10})}drawPointLabel(e){let{pointNumber:t,position:n,value:r,units:i,bounds:o,toTop:s,viewRegion:c,xDist:l}=e,{draw:u,theme:d}=this.internal,f=new a.TimeStamp(r.x),p=f.toString(f.formatBySpan(l),`local`),m=`${a.math.smartRound(r.y,o)} ${i??``}`,h=`${t}`,g=h.length*sl,_=a.xy.construct(al),v=sl,y=Math.max(p.length,m.length),b=g+Ol+v+y*cl+_.x*ll,x=ol,S=x*2+_.y*2,C=s?-(S+$):$,w=a.box.construct(a.xy.translate(n,[-b/2,C]),b,S);(s&&a.box.top(w)<a.box.top(c)||!s&&a.box.bottom(w)>a.box.bottom(c))&&(C=s?$:-(S+$),w=a.box.construct(a.xy.translate(n,[-b/2,C]),b,S)),u.container({region:w,backgroundColor:e=>e.colors.gray.l1}),u.text({text:h,position:a.xy.translate(a.box.topLeft(w),[_.x,_.y]),level:`small`,weight:500,color:d.colors.gray.l9});let T=g+Ol;this.drawPointLabelRow({region:w,label:`X`,value:p,labelColor:d.colors.error.z,yOffset:0,leftOffset:T}),this.drawPointLabelRow({region:w,label:`Y`,value:m,labelColor:d.colors.secondary.z,yOffset:x,leftOffset:T})}drawPointMarker(e,t){let{draw:n}=this.internal;n.circle({fill:a.color.setAlpha(t,_l),radius:ml,position:e}),n.circle({fill:a.color.setAlpha(t,vl),radius:hl,position:e}),n.circle({fill:a.color.pickByContrast(t,this.internal.dotColor,this.internal.dotColorContrast),radius:gl,position:e})}calculateYLabelPosition(e,t,n){return t?a.xy.translateX(e,xl):n?a.xy.translateX(e,Sl):e}calculateXLabelPosition(e,t,n){return t?a.xy.translateY(e,Tl):n?a.xy.translateY(e,Cl):e}calculateSlopeLabelPosition(e){let{basePos:t,yLabelPos:n,isVeryClose:r,isHorizontal:i,xPixelDist:o,yPixelDist:s}=e;return r?a.xy.translateX(t,bl):i?a.xy.translateY(t,-wl):Math.abs(t.x-n.x)<El&&Math.abs(t.y-n.y)<Dl?o<s?a.xy.translateY(t,-wl):a.xy.translateX(t,bl):t}renderHover(e){if(this.state.hover==null)return;let t=this.state.hover,n=a.scale.XY.scale(e.region).scale(a.box.DECIMAL),r=n.pos(t),i=e.findByXDecimal(n.pos(t).x);if(i.length===0)return;let o=i.sort((e,t)=>a.xy.distance(r,e.position)-a.xy.distance(r,t.position))[0],{draw:s}=this.internal,c=n.reverse().pos(o.position);s.circle({stroke:a.color.setAlpha(o.color,1),strokeWidth:fl,lineDash:pl,radius:ul,position:c}),s.circle({fill:this.internal.theme.colors.gray.l3,radius:dl,position:c}),s.text({text:tl(this.state.mode),position:c,level:`small`,align:`middle`,justify:`center`})}render(e){if(this.deleted)return;this.renderHover(e);let t=this.find(e);if(t==null)return;let[n,r]=t,{draw:i}=this.internal,{strokeDash:o,strokeWidth:s}=this.state,c=a.scale.XY.scale(a.box.DECIMAL).scale(e.region),l=c.pos(n.position),u=c.pos(r.position),d=Math.abs(n.value.x-r.value.x),f=r.value.y-n.value.y,p=Math.abs(f);if(!Number.isFinite(d)||!Number.isFinite(p))return;let m=new a.TimeSpan(d),h=f/m.seconds,g=Math.abs(l.x-u.x),_=Math.abs(l.y-u.y),v=_<yl,y=g<yl,b=g<yl||_<yl;i.line({start:a.xy.construct(l.x,l.y),end:a.xy.construct(l.x,u.y),stroke:this.verticalLineColor,lineDash:o,lineWidth:s}),i.line({start:a.xy.construct(l.x,u.y),end:a.xy.construct(u.x,u.y),stroke:this.horizontalLineColor,lineDash:o,lineWidth:s}),i.line({start:a.xy.construct(l.x,l.y),end:a.xy.construct(u.x,u.y),stroke:this.obliqueLineColor,lineDash:o,lineWidth:s}),this.drawPointMarker(l,n.color),this.drawPointMarker(u,r.color);let x=`${a.math.smartRound(p,a.bounds.construct(p))} ${n.units??``}`,S=m.lessThan(a.TimeSpan.milliseconds(kl))?a.TimeSpan.MICROSECOND:a.TimeSpan.MILLISECOND,C=m.truncate(S).toString(),w=a.math.smartRound(h,a.bounds.construct(Math.abs(h))).toString();if(n.units!=null&&n.units.length>0&&(w+=` ${n.units} / s`),b){let t=a.xy.construct((l.x+u.x)/2,(l.y+u.y)/2),n=sl*6,r=Math.max(C.length,x.length,w.length),i=al,o=n+r*cl+i*ll,s=ol*3+i*2,c=a.box.construct(a.xy.translate(t,[-o/2,-s/2]),o,s),d=l.y<u.y,f=ol*2+i*2,p=d?-(f+$):$,m=a.box.construct(a.xy.translate(l,[-150/2,p]),150,f),h=d?$:-(f+$),g=a.box.construct(a.xy.translate(u,[-150/2,h]),150,f),_=a.box.area(a.box.intersection(c,m))>0,v=a.box.area(a.box.intersection(c,g))>0,y=!_&&!v,b=y?t:a.xy.construct(Math.max(l.x,u.x)+bl,(l.y+u.y)/2);this.drawCombinedDeltaLabel(b,C,x,w,e.region,y)}else{let e=this.calculateYLabelPosition(a.xy.construct(l.x,(l.y+u.y)/2),b,y);this.drawLabelValue(`ΔY`,x,e,rl);let t=this.calculateXLabelPosition(a.xy.construct((l.x+u.x)/2,u.y),b,v);this.drawLabelValue(`ΔX`,C,a.xy.translateX(t,-15),nl);let n=this.calculateSlopeLabelPosition({basePos:a.xy.construct((l.x+u.x)/2,(l.y+u.y)/2),yLabelPos:e,isVeryClose:b,isHorizontal:v,xPixelDist:g,yPixelDist:_});this.drawLabelValue(`Slope`,w,n,il)}let T=l.y<u.y;this.drawPointLabel({pointNumber:1,position:l,value:n.value,units:n.units??null,bounds:n.bounds,toTop:T,viewRegion:e.region,xDist:m}),this.drawPointLabel({pointNumber:2,position:u,value:r.value,units:r.units??null,bounds:r.bounds,toTop:!T,viewRegion:e.region,xDist:m})}},jl={[Al.TYPE]:Al},Ml=o.z.object({container:a.box.box,viewport:a.box.box,hold:o.z.boolean().default(!1),grid:o.z.record(o.z.string(),dc),visible:o.z.boolean().default(!0),clearOverScan:a.xy.crudeZ.default(a.xy.ZERO)}),Nl=o.z.record(o.z.string(),o.z.object({lower:o.z.number(),upper:o.z.number()})),Pl={getBounds:o.z.function({input:o.z.tuple([]),output:Nl})},Fl=(e,t)=>a.box.width(e)*Math.sqrt(a.box.height(e))/(a.box.width(t)*Math.sqrt(a.box.height(t))),Il=[`upper2d`,`lower2d`,`gl`],Ll=[`upper2d`],Rl=class extends n.S{static TYPE=`LinePlot`;schema=Ml;methods=Pl;afterUpdate(e){this.internal.instrumentation=r.m(e,`lineplot`),this.internal.handleError=n.v(e),this.internal.renderCtx=r.l.use(e),r.a(e,e=>{this.state.visible&&this.requestRender(`low`,e)}),!(!this.state.visible&&!this.prevState.visible)&&this.requestRender(`high`,`layout`)}afterDelete(e){this.internal.renderCtx=r.l.use(e),this.requestRender(`high`,`layout`)}findByXDecimal(e){let t={...this.state,plot:this.calculatePlot(),exposure:this.exposure};return this.axes.flatMap(n=>n.findByXDecimal(t,e)).flat()}findByXValue(e){let t={...this.state,plot:this.calculatePlot(),exposure:this.exposure};return this.axes.flatMap(n=>n.findByXValue(t,e)).flat()}get axes(){return this.childrenOfType(Uc.TYPE)}get tooltips(){return this.childrenOfType(Xc.TYPE)}get measures(){return this.childrenOfType(Al.TYPE)}get exposure(){return Fl(this.state.viewport,this.state.container)}renderAxes(e,t){let n={...this.state,plot:e,canvases:t,exposure:this.exposure};this.axes.forEach(e=>e.render(n))}renderTooltips(e,t){let n={findByXDecimal:this.findByXDecimal.bind(this),region:e,canvases:t};this.tooltips.forEach(e=>e.render(n))}getBounds(){let e={};return this.axes.forEach(t=>{let n=t.state.axisKey??t.key;e[n]=t.bounds(this.state.hold),t.yAxes.forEach(t=>{let n=t.state.axisKey??t.key;e[n]=t.bounds(this.state.hold)})}),e}renderMeasures(e){let t={findByXDecimal:this.findByXDecimal.bind(this),findByXValue:this.findByXValue.bind(this),region:e};this.measures.forEach(e=>e.render(t))}calculatePlot(){return pc(this.state.grid,this.state.container)}render(e){let{instrumentation:t,renderCtx:n,handleError:r}=this.internal;if(this.deleted){t.L.debug(`deleted, skipping render`,{key:this.key});return}if(!this.state.visible)return t.L.debug(`not visible, skipping render`,{key:this.key}),({canvases:e})=>n.erase(this.state.container,this.state.clearOverScan,...e);let i=this.calculatePlot();t.L.debug(`rendering`,{key:this.key,viewport:this.state.viewport,container:this.state.container,grid:this.state.grid,plot:i,canvases:e});let o=a.xy.construct(this.state.clearOverScan),s=n.scissor(this.state.container,o,e.filter(e=>e!==`gl`)),c=n.scissor(i,a.xy.ZERO,e.filter(e=>e===`gl`));try{this.renderAxes(i,e),this.renderTooltips(i,e),this.renderMeasures(i)}catch(e){r(e,`failed to render line plot`)}finally{s(),c()}t.L.debug(`rendered`,{key:this.key});let l=a.box.copy(this.state.container);return({canvases:e})=>n.erase(l,this.state.clearOverScan,...e)}requestRender(e,t){let{renderCtx:n}=this.internal,r=Il;t===`tool`&&(r=Ll),n.loop.set({key:`${this.type}-${this.key}`,render:()=>this.render(r),priority:e,canvases:r})}},zl={[Rl.TYPE]:Rl,[Uc.TYPE]:Uc,[Fc.TYPE]:Fc},Bl=e.n({LinePlot:()=>Rl,REGISTRY:()=>zl,XAxis:()=>Uc,YAxis:()=>Fc,linePlotMethodsZ:()=>Pl,linePlotStateZ:()=>Ml,xAxisStateZ:()=>Hc,yAxisStateZ:()=>Mc}),Vl=o.z.object({region:a.box.box,wheelPos:o.z.number(),scrolling:o.z.boolean(),empty:o.z.boolean(),visible:o.z.boolean(),telem:Ht.default(Pt),font:t.a.default(`p`),color:a.color.colorZ.default(a.color.ZERO),overshoot:a.xy.xyZ.default({x:0,y:0})}),Hl=.98,Ul=`lower2d`,Wl={offset:0n,offsetRef:0n,scrollRef:0},Gl=class e extends n.C{static TYPE=`log`;static z=Vl;schema=e.z;values=new a.MultiSeries([]);scrollState=Wl;afterUpdate(e){let{internal:t}=this;t.render=r.l.use(e),t.theme=n.i(e),a.color.isZero(this.state.color)?this.internal.textColor=t.theme.colors.gray.l11:t.textColor=this.state.color,t.telem=L(e,this.state.telem,t.telem);let{scrolling:i,wheelPos:o}=this.state;if(this.state.scrolling&&!this.prevState.scrolling){let e=this.values.alignmentBounds.upper-1n;this.scrollState={offset:e,offsetRef:e,scrollRef:this.state.wheelPos}}else if(i){let{scrollState:e,values:t}=this,n=Math.ceil((o-this.scrollState.scrollRef)/this.lineHeight);e.offset=this.values.traverseAlignment(e.offsetRef,-BigInt(n)),e.offset<t.alignmentBounds.lower+BigInt(this.visibleLineCount)&&(e.offset=t.alignmentBounds.lower,this.setState(e=>({...e,wheelPos:this.prevState.wheelPos}))),e.offset>=t.alignmentBounds.upper&&this.setState(e=>({...e,scrolling:!1}))}let[s,c]=this.internal.telem.value();this.values=c,this.checkEmpty(),t.stopListeningTelem?.(),t.stopListeningTelem=t.telem.onChange(()=>{let[e,t]=this.internal.telem.value();this.checkEmpty(),this.values=t,this.requestRender()}),!(!this.state.visible&&!this.prevState.visible)&&this.requestRender()}checkEmpty(){let e=this.values.length===0;e!==this.state.empty&&this.setState(t=>({...t,empty:e}))}afterDelete(){let{telem:e,render:t}=this.internal;e.cleanup?.(),t.erase(a.box.construct(this.state.region),a.xy.ZERO,Ul)}requestRender(){let{render:e}=this.internal;e.loop.set({key:`${this.type}-${this.key}`,render:()=>this.render(),priority:`high`,canvases:[Ul]})}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((a.box.height(this.state.region)-12)/this.lineHeight),this.values.length)}render(){let{render:e}=this.internal,t=this.state.region;if(a.box.areaIsZero(t))return;if(!this.state.visible)return()=>e.erase(t,a.xy.ZERO,Ul);let n;if(!this.state.scrolling)n=this.values.subIterator(this.values.length-this.visibleLineCount,this.values.length);else{let e=this.values.traverseAlignment(this.scrollState.offset,-BigInt(this.visibleLineCount));n=this.values.subAlignmentSpanIterator(e,this.visibleLineCount)}let r=this.state.region,i=e[Ul],o=new Q(i,this.internal.theme),s=e.scissor(r,a.xy.ZERO,[Ul]);this.renderElements(o,n),this.renderScrollbar(o),s();let c=a.box.copy(this.state.region);return({canvases:t})=>e.erase(c,this.state.overshoot,...t)}renderScrollbar(e){let t=this.state.region,n=a.box.height(t)/this.totalHeight*a.box.height(t);if(n>=a.box.height(t)*Hl)return;let r=a.box.bottom(t)-n;this.state.scrolling&&(r-=Number(this.values.distance(this.values.alignmentBounds.upper,this.scrollState.offset))/this.values.length*a.box.height(t)),r<0&&(r=a.box.top(t)),e.container({region:a.box.construct({x:a.box.right(t)-6,y:r},{width:6,height:n}),bordered:!1,backgroundColor:e=>e.colors.gray.l6})}renderElements(e,t){let n=this.state.region,r=0;for(let i of t){let t=this.values.dataType.equals(a.DataType.JSON)?JSON.stringify(i):i.toString();e.text({text:t,level:this.state.font,shade:11,position:a.xy.translate(a.box.topLeft(n),{x:6,y:r*this.lineHeight+6}),code:!0}),r++}}},Kl={[Gl.TYPE]:Gl},ql=`roles`,Jl={listeners:[{channel:i.access.role.SET_CHANNEL_NAME,schema:i.access.role.roleZ,onChange:({store:e,changed:t})=>{e.roles.set(t.key,t)}},{channel:i.access.role.DELETE_CHANNEL_NAME,schema:i.access.role.keyZ,onChange:({store:e,changed:t})=>e.roles.delete(t)}]},Yl=`ranges`,Xl={equal:(e,t)=>a.deep.equal(e.payload,t.payload),listeners:[{channel:i.ranger.SET_CHANNEL_NAME,schema:i.ranger.payloadZ,onChange:async({store:e,changed:t,client:n})=>{let r=n.ranges.sugarOne(t),i=e.ranges.get(t.key),a;i?.labels??(a=await r.retrieveLabels());let o=null;i?.parent??(o=await r.retrieveParent()),e.ranges.set(t.key,e=>{let t={...r.payload};return t.labels=e?.labels??a,t.parent=e?.parent??o?.payload,n.ranges.sugarOne(t)})}},{channel:i.ranger.DELETE_CHANNEL_NAME,schema:i.ranger.keyZ,onChange:({store:e,changed:t})=>e.ranges.delete(t)}]},Zl=o.z.object({authority:a.control.authorityZ.optional(),valid:o.z.boolean().optional()}).default({authority:void 0,valid:!1}),Ql=o.z.object({triggered:o.z.boolean(),status:a.status.statusZ({details:Zl}),sink:Wt.default(vt),source:Xt.default(At)}),$l=class extends n.C{static TYPE=`Chip`;schema=Ql;afterUpdate(e){let{internal:t}=this,{sink:n,source:r}=this.state;t.source=L(e,r,t.source),t.sink=Or(e,n,t.sink),this.state.triggered&&!this.prevState.triggered&&t.sink.set(this.state.status.details?.authority!==a.control.ABSOLUTE_AUTHORITY),this.updateEnabledState(),t.stopListening?.(),t.stopListening=t.source.onChange(()=>this.updateEnabledState())}updateEnabledState(){let e=this.internal.source.value();a.deep.equal(e,this.state.status)||this.setState(t=>({...t,status:e,triggered:!1}))}afterDelete(){this.internal.stopListening(),this.internal.source.cleanup?.(),this.internal.sink.cleanup?.()}render(){}},eu=o.z.object({}),tu=`control-state-provider`,nu=i.control.stateZ.extend({subjectColor:a.color.colorZ}),ru=class extends n.S{static TYPE=`StateProvider`;schema=eu;colors=new Map;colorOverrides=new Map;tracker;disconnectTrackerChange;obs=new a.observe.Observer;static use(e){return e.get(tu)}afterUpdate(e){let{internal:t}=this;t.instrumentation=r.m(e,`control-state`);let i=n.i(e);t.palette=i.colors.visualization.palettes.default,t.defaultColor=i.colors.gray.l8;let a=D(e);t.client!=null&&a===t.client||(t.client=a,e.set(tu,this),n.v(e)(async()=>{await this.maybeCloseTracker(),t.client!=null&&(this.internal.instrumentation.L.debug(`starting state tracker`),await this.openTracker(t.client))},`failed to open control state tracker`))}async maybeCloseTracker(){this.tracker!=null&&(this.internal.instrumentation.L.debug(`stopping state tracker`),this.disconnectTrackerChange?.(),await this.tracker.close(),this.tracker=void 0)}afterDelete(e){n.v(e)(async()=>{await this.maybeCloseTracker()},`failed to close control state tracker`)}onChange(e){return this.obs.onChange(e)}setColorOverrides(e){let t=Object.entries(e);if(!(t.length===this.colorOverrides.size&&t.every(([e,t])=>{let n=this.colorOverrides.get(e);return n!=null&&a.color.equals(n,t)}))){this.colorOverrides.clear();for(let[e,n]of t)this.colorOverrides.set(e,a.color.construct(n));this.obs.notify([])}}get(e){return Array.isArray(e)?a.unique.unique(e).map(e=>this.getOne(e)).filter(e=>e!=null):this.getOne(e)}getOne(e){if(this.tracker==null)return;let t=this.tracker.states.get(e);if(t!=null)return{...t,subjectColor:this.colorOverrides.get(t.subject.key)??this.colors.get(t.subject.key)??this.internal.defaultColor}}async openTracker(e){let{internal:t}=this,{instrumentation:n}=t;try{this.tracker=await e.control.openStateTracker()}catch{n.L.error(`failed to open state tracker`);return}this.disconnectTrackerChange?.(),this.disconnectTrackerChange=this.tracker.onChange(e=>{if(n.L.debug(`transfer`,{transfers:e.map(e=>i.control.transferString(e))}),this.tracker==null)throw new i.UnexpectedError(`tracker is null inside it's own onChange callback!`);this.updateColors(this.tracker),this.obs.notify(e)})}updateColors(e){let t=e.subjects(),n=t.map(e=>e.key),r=Array.from(this.colors.values());this.colors.forEach((e,t)=>!n.includes(t)&&this.colors.delete(t));let{palette:i}=this.internal;t.forEach(e=>{if(this.colors.has(e.key))return;let t=i.find(e=>!r.includes(e))??i[0];this.colors.set(e.key,t),r.push(t)})}},iu=o.z.enum([`acquired`,`released`,`overridden`,`failed`]),au=o.z.object({name:o.z.string(),authority:o.z.number().default(0),status:iu.optional(),needsControlOf:i.channel.keyZ.array().default([])}),ou={acquire:o.z.function({input:o.z.tuple([]),output:o.z.void()}),release:o.z.function({input:o.z.tuple([]),output:o.z.void()})},su=class e extends n.S{static TYPE=`Controller`;static METHODS=ou;schema=au;methods=ou;registry=new Map;writer;acquirePromise;afterUpdate(e){let{internal:t}=this;t.instrumentation=r.m(e),t.addStatus=n.g(e),t.runAsync=n.v(e);let i=D(e);t.stateProv=ru.use(e),t.telemCtx=wr(e,this,t.telemCtx),t.client=i}afterDelete(){let{internal:e}=this;e.runAsync(()=>this.doRelease(),`failed to release control`)}async updateNeedsControlOf(){let{client:e}=this.internal;if(e==null)return;let t=new Set([]);for(let n of this.registry.keys())(await n.needsControlOf(e)).forEach(e=>e!==0&&t.add(e));let n=Array.from(t);a.compare.unorderedPrimitiveArrays(this.state.needsControlOf,n)!==a.compare.EQUAL&&this.setState(e=>({...e,needsControlOf:n}))}acquire(){this.internal.runAsync(()=>this.doAcquire(),`failed to acquire control`)}release(){this.internal.runAsync(()=>this.doRelease(),`failed to release control`)}async doAcquire(){if(this.acquirePromise!=null)return await this.acquirePromise;this.acquirePromise=this.doAcquireImpl();try{await this.acquirePromise}finally{this.acquirePromise=void 0}}async doAcquireImpl(){let{client:e,addStatus:t}=this.internal;if(e==null)return t({message:`Cannot acquire control on ${this.state.name} because no Core has been connected.`,variant:`warning`});try{await this.updateNeedsControlOf();let n=this.state.needsControlOf;if(n.length===0)return t({message:`Cannot acquire control on ${this.state.name} because there are no channels to control.`,variant:`warning`});let r=i.TimeStamp.now().sub(a.TimeSpan.milliseconds(1));this.writer=await e.openWriter({start:r,channels:n,controlSubject:{key:this.key,name:this.state.name},authorities:this.state.authority}),this.setState(e=>({...e,status:`acquired`}))}catch(e){if(this.setState(e=>({...e,status:`failed`})),!(e instanceof Error))throw e;t({variant:`error`,message:`${this.state.name} failed to acquire control`,description:e.message})}}async doRelease(){try{await this.writer?.close()}catch(e){this.internal.addStatus({message:`${this.state.name} failed to release control: ${e.message}`,variant:`error`})}finally{this.setState(e=>({...e,status:`released`})),this.writer=void 0}}static isRetryable(e){return c.StreamClosed.matches(e)||c.Unreachable.matches(e)}async closeWriter(){try{await this.writer?.close()}catch(t){if(!e.isRetryable(t))throw t}finally{this.writer=void 0}}async withRetry(t){this.writer??await this.doAcquire();try{await t()}catch(n){if(!e.isRetryable(n))throw n;await this.closeWriter(),await this.doAcquire(),await t()}}async set(e){await this.withRetry(async()=>this.writer?.write(await e()))}async setAuthority(e,t){await this.withRetry(async()=>this.writer?.setAuthority(Object.fromEntries(e.map(e=>[e,t]))))}async releaseAuthority(e){await this.withRetry(async()=>this.writer?.setAuthority(Object.fromEntries(e.map(e=>[e,this.state.authority]))))}deleteTelem(e){this.registry.delete(e),this.updateNeedsControlOf()}create(e){let{internal:t}=this,n=(()=>{switch(e.type){case lu.TYPE:{let n=new lu(this,t.runAsync,e.props);return this.registry.set(n,null),n}case gu.TYPE:{let t=new gu(this,this.internal.stateProv,e.props);return this.registry.set(t,null),t}case fu.TYPE:return new fu(this,t.runAsync,e.props);default:return null}})();return n!=null&&this.updateNeedsControlOf(),n}},cu=o.z.object({channel:o.z.number()}),lu=class extends en{static TYPE=`controlled-numeric-telem-sink`;controller;runAsync;schema=cu;constructor(e,t,n){super(n),this.controller=e,this.runAsync=t}invalidate(){}cleanup(){this.controller.deleteTelem(this)}async needsControlOf(e){if(this.props.channel===0)return[];let t=await e.channels.retrieve(this.props.channel),n=[t.key];return t.index!==0&&n.push(t.index),n}set(...e){this.runAsync(async()=>{let{client:t}=this.controller.internal;if(t==null)throw new i.DisconnectedError(`No Core connected`);if(this.props.channel===0)throw new i.ValidationError(`No command channel specified for actuator`);await this.controller.set(async()=>{let n=await t.channels.retrieve(this.props.channel),r={[n.key]:e};if(n.index!==0){let o=await t.channels.retrieve(n.index),s=i.TimeStamp.now();r[o.key]=Array.from({length:e.length},(e,t)=>s.add(a.TimeSpan.nanoseconds(t)))}return r})},`Failed to command channel`)}},uu=e=>({type:lu.TYPE,props:e,variant:`sink`,valueType:`number`}),du=o.z.object({authority:o.z.number().default(i.control.ABSOLUTE_AUTHORITY),channel:o.z.number()}),fu=class extends en{static TYPE=`acquire-channel-control`;controller;runAsync;schema=du;constructor(e,t,n){super(n),this.controller=e,this.runAsync=t}cleanup(){this.controller.deleteTelem(this)}async needsControlOf(e){let t=await e.channels.retrieve(this.props.channel),n=[t.key];return t.index!==0&&n.push(t.index),n}set(e){this.runAsync(async()=>{let{controller:t}=this,{client:n}=t.internal;if(n==null)return;let r=await n.channels.retrieve(this.props.channel),i=[r.key];r.index!==0&&i.push(r.index),e?await this.controller.setAuthority(i,this.props.authority):await this.controller.releaseAuthority(i)},`failed to set channel authority`)}},pu=e=>({type:fu.TYPE,props:e,variant:`sink`,valueType:`boolean`}),mu=o.z.object({channel:o.z.number()}),hu=o.z.object({valid:o.z.boolean(),color:a.color.colorZ.optional(),authority:o.z.number()}),gu=class extends F{static TYPE=`controlled-status-source`;prov;valid=!1;stopListening;controller;schema=mu;constructor(e,t,n){super(n),this.prov=t,this.controller=e}async needsControlOf(){return[]}maybeRevalidate(){if(this.valid)return;let{channel:e}=this.props;this.stopListening?.();let t=a.control.filterTransfersByChannelKey(e);this.stopListening=this.prov.onChange(e=>{e.length>0&&t(e).length===0||this.notify?.()}),this.valid=!0}value(){this.maybeRevalidate();let e=i.TimeStamp.now();if(this.props.channel===0)return{name:this.controller.key,key:this.controller.key,variant:`disabled`,message:`No Channel`,time:e,details:{valid:!1,authority:0}};let t=this.prov.get(this.props.channel);return t==null?{name:this.controller.key,key:this.controller.key,variant:`disabled`,message:`Uncontrolled`,time:e,details:{valid:!0,color:void 0,authority:0}}:{name:this.controller.key,key:t.subject.key,variant:t.subject.key===this.controller.key?`success`:`error`,message:`Controlled by ${t.subject.name}`,time:e,details:{valid:!0,color:t.subjectColor,authority:t.authority}}}cleanup(){this.controller.deleteTelem(this),this.stopListening?.()}},_u=e=>({type:gu.TYPE,props:e,variant:`source`,valueType:`status`}),vu=o.z.object({color:a.color.colorZ.optional()}).default({color:void 0}),yu=o.z.object({statusSource:Xt.default(At),colorSource:Yt.default(Mt),status:a.status.statusZ({details:vu}),color:a.color.colorZ.optional()}),bu=class extends n.C{static TYPE=`Indicator`;schema=yu;stopListeningStatus;stopListeningColor;afterUpdate(e){let{internal:t}=this,{statusSource:n,colorSource:r}=this.state;t.statusSource=L(e,n,t.statusSource),t.colorSource=L(e,r,t.colorSource),this.updateState(),this.stopListeningStatus?.(),this.stopListeningColor?.(),this.stopListeningStatus=t.statusSource.onChange(this.updateState.bind(this)),this.stopListeningColor=t.colorSource.onChange(this.updateState.bind(this))}afterDelete(){this.internal.statusSource.cleanup?.(),this.internal.colorSource.cleanup?.()}render(){}updateState(){let e=this.internal.colorSource.value(),t=this.internal.statusSource.value();a.color.equals(e,this.state.color)&&t.message===this.state.status.message&&a.color.equals(t.details?.color,this.state.status.details?.color)||this.setState(n=>({...n,color:e,status:t}))}},xu=o.z.object({needsControlOf:i.channel.keyZ.array(),states:nu.array(),colors:o.z.record(o.z.string(),o.z.string()).default({})}),Su=class extends n.C{static TYPE=`Legend`;schema=xu;afterUpdate(e){let{internal:t}=this;t.stateProv=ru.use(e),t.stateProv.setColorOverrides(this.state.colors);let n=this.state.needsControlOf;t.disconnectStateProv?.();let r=a.control.filterTransfersByChannelKey(...n),i=t.stateProv.get(n);this.setState(e=>({...e,states:i})),t.disconnectStateProv=t.stateProv.onChange(e=>{if(e.length>0&&r(e).length===0)return;let i=t.stateProv.get(n);this.setState(e=>({...e,states:i}))})}afterDelete(){let{internal:e}=this;e.disconnectStateProv?.()}render(){}},Cu={[su.TYPE]:su,[ru.TYPE]:ru,[bu.TYPE]:bu,[$l.TYPE]:$l,[Su.TYPE]:Su},wu=e.n({AcquireChannelControl:()=>fu,AuthoritySource:()=>gu,Chip:()=>$l,Controller:()=>su,Indicator:()=>bu,Legend:()=>Su,REGISTRY:()=>Cu,SetChannelValue:()=>lu,StateProvider:()=>ru,acquireChannelControl:()=>pu,acquireChannelControlPropsZ:()=>du,authoritySource:()=>_u,authoritySourceDetailsZ:()=>hu,authoritySourceProps:()=>mu,chipStateZ:()=>Ql,chipStatusDetailsZ:()=>Zl,controllerMethodsZ:()=>ou,controllerStateZ:()=>au,indicatorStateZ:()=>yu,indicatorStatusDetailsZ:()=>vu,legendStateZ:()=>xu,setChannelValue:()=>uu,setChannelValuePropsZ:()=>cu,stateProviderStateZ:()=>eu,statusZ:()=>iu,sugaredStateZ:()=>nu}),Tu=[`fire`,`momentary`,`pulse`],Eu=o.z.enum(Tu),Du=o.z.object({sink:Wt.default(vt),mode:Eu.default(`fire`)}),Ou={onMouseDown:o.z.function({input:o.z.tuple([]),output:o.z.void()}),onMouseUp:o.z.function({input:o.z.tuple([]),output:o.z.void()})},ku=class extends n.C{static TYPE=`Button`;static METHODS=Ou;schema=Du;methods=Ou;afterUpdate(e){let{sink:t}=this.state;this.internal.sink=Or(e,t,this.internal.sink)}onMouseDown(){let{mode:e}=this.state;e===`momentary`?this.internal.sink.set(!0):e===`pulse`&&this.internal.sink.set(!0,!1)}onMouseUp(){let{mode:e}=this.state;e===`fire`?this.internal.sink.set(!0):e===`momentary`&&this.internal.sink.set(!1)}afterDelete(){this.internal.sink.cleanup?.()}},Au={[ku.TYPE]:ku},ju=o.z.object({region:a.box.box,clearOverScan:a.xy.crudeZ.default(0),visible:o.z.boolean().default(!0),autoRenderInterval:o.z.number().default(1e3)}),Mu=[`upper2d`,`lower2d`],Nu=class e extends n.S{static TYPE=`Table`;static stateZ=ju;schema=e.stateZ;afterUpdate(e){let{internal:t}=this;t.renderCtx=r.l.use(e),t.handleError=n.v(e),t.autoRenderInterval??=setInterval(()=>this.state.visible&&this.requestRender(`low`),this.state.autoRenderInterval),r.a(e,()=>{this.state.visible&&this.requestRender(`low`)}),!(!this.state.visible&&!this.prevState.visible)&&this.requestRender(`high`)}afterDelete(){this.internal.autoRenderInterval!=null&&clearInterval(this.internal.autoRenderInterval),this.requestRender(`high`)}render(){if(this.deleted)return;let e=a.box.copy(this.state.region);if(!this.state.visible)return()=>this.internal.renderCtx.erase(e,this.state.clearOverScan);let{renderCtx:t,handleError:n}=this.internal,r=a.scale.XY.translate(a.box.topLeft(this.state.region)),i=t.scissor(this.state.region,a.xy.construct(this.state.clearOverScan),Mu);try{for(let e of this.children)e.render({viewportScale:r})}catch(e){n(e,`Failed to render table`)}finally{i()}return()=>this.internal.renderCtx.erase(e,this.state.clearOverScan)}requestRender(t){let{renderCtx:n}=this.internal;n.loop.set({key:`${e.TYPE}-${this.key}`,render:this.render.bind(this),priority:t,canvases:Mu})}},Pu={[Nu.TYPE]:Nu};o.z.enum([`small`,`medium`,`large`,`huge`]);var Fu=o.z.object({box:a.box.box,telem:Zt.default(Ot),backgroundTelem:Yt.default(Mt),level:t.a.default(`p`),color:a.color.colorZ.default(a.color.ZERO),precision:o.z.number().default(2),minWidth:o.z.number().default(60),width:o.z.number().optional(),notation:a.notation.notationZ.default(`standard`),location:a.location.xy.default({x:`left`,y:`center`}),units:o.z.string().default(`RPM`),bounds:a.bounds.boundsZ.default(a.bounds.construct(0,100)),barWidth:o.z.number().default(12)}),Iu=[`upper2d`,`lower2d`],Lu=class e extends n.C{static TYPE=`gauge`;static z=Fu;schema=e.z;afterUpdate(e){let{internal:i}=this;i.render=r.l.use(e),i.theme=n.i(e),a.color.isZero(this.state.color)?i.textColor=i.theme.colors.gray.l8:i.textColor=this.state.color,i.telem=L(e,this.state.telem,i.telem),i.stopListening?.(),i.stopListening=i.telem.onChange(()=>this.requestRender()),i.backgroundTelem=L(e,this.state.backgroundTelem,i.backgroundTelem),i.stopListeningBackground?.(),i.stopListeningBackground=i.backgroundTelem.onChange(()=>this.requestRender()),i.requestRender=r.s(e),i.strokeColor=a.color.isZero(this.state.color)?i.theme.colors.visualization.palettes.default[0]:this.state.color;let o=this.state.box,s=a.box.width(o)/2,{barWidth:c}=this.state;i.outerRadius=s-8,i.innerRadius=i.outerRadius-c;let l=Math.PI/2;i.gaugeStartAngle=3*Math.PI/4,i.gaugeAngleRange=2*Math.PI-l,i.gaugeEndAngle=i.gaugeStartAngle+i.gaugeAngleRange,i.labelRadius=i.outerRadius+12,i.labelInwardShift=12,i.centerPos=a.box.center(o);let u=i.centerPos.y+i.labelRadius*Math.sin(i.gaugeStartAngle)+6;i.minLabelPos=a.xy.construct(i.centerPos.x+i.labelRadius*Math.cos(i.gaugeStartAngle)+i.labelInwardShift,u),i.maxLabelPos=a.xy.construct(i.centerPos.x+i.labelRadius*Math.cos(i.gaugeEndAngle)-i.labelInwardShift,u),i.valueTextPos=a.xy.translateY(i.centerPos,-6),i.unitsTextPos=a.xy.translateY(i.centerPos,a.box.height(o)/9),i.textLevel=this.state.level,i.labelLevel=t.i(t.i(i.textLevel)),this.requestRender()}afterDelete(){let{internal:e}=this;e.stopListening?.(),e.stopListeningBackground?.(),e.telem.cleanup?.(),e.backgroundTelem.cleanup?.(),e.requestRender==null?e.render.erase(a.box.construct(this.state.box),a.xy.ZERO,...Iu):e.requestRender(`layout`)}requestRender(){let{requestRender:e}=this.internal;e==null?this.render({}):e(`layout`)}render({viewportScale:e=a.scale.XY.IDENTITY}){let{internal:n}=this,r=new Q(n.render.upper2d.applyScale(e),n.theme),i=n.telem.value(),{lower:o,upper:s}=this.state.bounds,c=Number(i),l=a.bounds.clamp(this.state.bounds,c),u=s-o,d=u===0?0:(l-o)/u,f=n.gaugeStartAngle+d*n.gaugeAngleRange;r.text({text:i,position:n.valueTextPos,shade:10,level:n.textLevel,align:`middle`,justify:`center`,weight:450,code:!0,useAtlas:!0}),r.text({text:this.state.units,position:n.unitsTextPos,shade:8,level:t.i(n.textLevel),align:`middle`,justify:`center`,code:!0,useAtlas:!0}),r.text({text:o.toString(),position:n.minLabelPos,shade:7,level:n.labelLevel,align:`middle`,justify:`center`,code:!0,useAtlas:!0}),r.text({text:s.toString(),position:n.maxLabelPos,shade:7,level:n.labelLevel,align:`middle`,justify:`center`,code:!0,useAtlas:!0}),r.circle({stroke:n.theme.colors.gray.l5,radius:{inner:n.innerRadius,outer:n.outerRadius},position:n.centerPos,angle:{lower:n.gaugeStartAngle,upper:n.gaugeEndAngle},lineCap:`round`}),r.circle({stroke:n.strokeColor,radius:{inner:n.innerRadius,outer:n.outerRadius},position:n.centerPos,angle:{lower:n.gaugeStartAngle,upper:f},lineCap:`round`})}},Ru={[Lu.TYPE]:Lu},zu=o.z.object({sink:Qt.default(Et)}),Bu={set:o.z.function({input:o.z.tuple([o.z.string()]),output:o.z.void()})},Vu=class extends n.C{static TYPE=`Input`;static METHODS=Bu;schema=zu;methods=Bu;afterUpdate(e){let{sink:t}=this.state;this.internal.sink=Or(e,t,this.internal.sink)}set(e){this.internal.sink.set(e)}afterDelete(){this.internal.sink.cleanup?.()}},Hu={[Vu.TYPE]:Vu},Uu=o.z.object({enabled:o.z.boolean(),source:Ut.default(St)}),Wu=class extends n.C{static TYPE=`Light`;schema=Uu;afterUpdate(e){let{internal:t}=this;this.internal.source=L(e,this.state.source,t.source),this.updateEnabledState(),t.stopListening?.(),t.stopListening=t.source.onChange(()=>this.updateEnabledState())}updateEnabledState(){let e=this.internal.source.value();e!==this.state.enabled&&this.setState(t=>({...t,enabled:e}))}afterDelete(){this.internal.stopListening?.(),this.internal.source.cleanup?.()}},Gu={[Wu.TYPE]:Wu},Ku=o.z.object({value:o.z.number(),sink:Jt.default(bt),source:qt.default(wt)}),qu={set:o.z.function({input:o.z.tuple([o.z.number()]),output:o.z.void()})},Ju=class extends n.C{static TYPE=`Setpoint`;static METHODS=qu;schema=Ku;methods=qu;afterUpdate(e){let{sink:t,source:n}=this.state,{internal:r}=this;r.source=L(e,n,r.source),r.sink=Or(e,t,r.sink),this.updateValue(),r.stopListening?.(),r.stopListening=r.source.onChange(()=>this.updateValue())}set(e){this.internal.sink.set(e)}updateValue(){let e=this.internal.source.value();e===this.state.value||isNaN(e)||this.setState(t=>({...t,value:e}))}afterDelete(){let{internal:e}=this;e.stopListening?.(),e.source.cleanup?.(),e.sink.cleanup?.()}},Yu={[Ju.TYPE]:Ju},Xu=o.z.object({key:o.z.string(),value:o.z.number()}),Zu=o.z.object({key:o.z.string().nullable().default(null),options:o.z.array(Xu).default([]),source:qt.default(wt)}),Qu=class extends n.C{static TYPE=`StateIndicator`;schema=Zu;afterUpdate(e){let{internal:t}=this;this.internal.source=L(e,this.state.source,t.source),this.updateMatchedOption(),t.stopListening?.(),t.stopListening=t.source.onChange(()=>this.updateMatchedOption())}updateMatchedOption(){let e=this.internal.source.value();if(isNaN(e))return;let t=this.state.options.find(t=>t.value===e)?.key??null;t!==this.state.key&&this.setState(e=>({...e,key:t}))}afterDelete(){this.internal.stopListening?.(),this.internal.source.cleanup?.()}},$u={[Qu.TYPE]:Qu},ed=o.z.object({enabled:o.z.boolean(),sink:Wt.default(vt),source:Ut.default(St)}),td={toggle:o.z.function({input:o.z.tuple([]),output:o.z.void()})},nd=class extends n.C{static TYPE=`Toggle`;static METHODS=td;schema=ed;methods=td;afterUpdate(e){this.internal.addStatus=n.y(e);let{sink:t,source:r}=this.state,{internal:i}=this;i.source=L(e,r,i.source),i.sink=Or(e,t,i.sink),this.updateEnabledState(),i.stopListening?.(),i.stopListening=i.source.onChange(()=>this.updateEnabledState())}toggle(){let{enabled:e}=this.state;this.internal.sink.set(!e)}updateEnabledState(){let e=this.internal.source.value();e!==this.state.enabled&&this.setState(t=>({...t,enabled:e}))}afterDelete(){this.internal.stopListening?.(),this.internal.source.cleanup?.(),this.internal.sink.cleanup?.()}},rd={[nd.TYPE]:nd},id=e.n({REGISTRY:()=>ld,Value:()=>cd}),ad={useAtlas:!0},od=o.z.object({box:a.box.box,telem:Zt.default(Ot),backgroundTelem:Yt.default(Mt),level:t.a.default(`p`),color:a.color.colorZ.default(a.color.ZERO),precision:o.z.number().default(2),stalenessTimeout:o.z.number().default(5),stalenessColor:a.color.colorZ.default(a.color.ZERO),minWidth:o.z.number().default(60),width:o.z.number().optional(),notation:a.notation.notationZ.default(`standard`),location:a.location.xy.default({x:`left`,y:`center`}),useWidthForBackground:o.z.boolean().default(!1),valueBackgroundShift:a.xy.xyZ.default(a.xy.ZERO),valueBackgroundOverScan:a.xy.xyZ.default(a.xy.ZERO)}),sd=[`upper2d`,`lower2d`],cd=class e extends n.C{static TYPE=`value`;static z=od;schema=e.z;afterUpdate(e){let{internal:t}=this;t.renderCtx=r.l.use(e),t.theme=n.i(e),t.telem=L(e,this.state.telem,t.telem),t.stopListening?.(),t.stopListening=t.telem.onChange(()=>{t.lastReceived=performance.now(),this.requestRender()}),t.fontString=n.a(t.theme,{level:this.state.level,code:!0}),t.backgroundTelem=L(e,this.state.backgroundTelem,t.backgroundTelem),t.stopListeningBackground?.(),t.stopListeningBackground=t.backgroundTelem.onChange(()=>this.requestRender()),t.requestRender=r.s(e),this.requestRender()}afterDelete(){let{internal:e}=this;e.stopListening?.(),e.stopListeningBackground?.(),e.telem.cleanup?.(),e.backgroundTelem.cleanup?.(),e.requestRender==null?e.renderCtx.erase(a.box.construct(this.state.box),a.xy.ZERO,...sd):e.requestRender(`layout`)}requestRender(){let{requestRender:e}=this.internal;e==null?this.render({}):e(`layout`)}get fontHeight(){let{theme:e}=this.internal;return e.typography[this.state.level].size*e.sizes.base}maybeUpdateWidth(e){let{theme:t}=this.internal,n=e+t.sizes.base+this.fontHeight;(this.state.width==null||this.state.width+this.fontHeight*.5<n||this.state.minWidth>n&&this.state.width!==this.state.minWidth||this.state.width-this.fontHeight>n)&&this.setState(e=>({...e,width:Math.max(n,e.minWidth)}))}getTextColor(){let{theme:e}=this.internal;return performance.now()-this.internal.lastReceived>this.state.stalenessTimeout*1e3?a.color.isZero(this.state.stalenessColor)?e.colors.warning.m1:this.state.stalenessColor:a.color.isZero(this.state.color)?a.color.pickByContrast(e.colors.border,e.colors.gray.l11,e.colors.gray.l0):a.color.pickByContrast(e.colors.border,e.colors.gray.l11,this.state.color)}render({viewportScale:e=a.scale.XY.IDENTITY}){let{renderCtx:t,telem:n,backgroundTelem:r,fontString:i,requestRender:o}=this.internal,{location:s,box:c}=this.state;if(a.box.areaIsZero(c))return;let l=a.box.topLeft(c),u=a.box.width(c),d=a.box.height(c),f=t.lower2d.applyScale(e),p=n.value();f.font=i;let m=this.fontHeight,h=p[0]==`-`;h&&(p=p.slice(1));let{theme:g}=this.internal,_=f.textDimensions(p,ad),v=_.width+g.sizes.base,y=_.height;o??t.erase(a.box.construct(this.prevState.box)),this.maybeUpdateWidth(v);let b={...a.xy.ZERO};s.x===`left`?b.x=6+m*.75:s.x===`center`&&(b.x=u/2-v/2),s.y===`center`&&(b.y=d/2+y/2);let x=a.xy.translate(l,b);if(this.state.backgroundTelem.type!=Mt.type){let e=r.value();if(!a.color.isZero(e)){f.fillStyle=a.color.hex(e);let t=this.state.useWidthForBackground?this.state.width??this.state.minWidth:a.box.width(c);f.fillRect(...a.xy.couple(a.xy.translate(l,this.state.valueBackgroundShift)),t+this.state.valueBackgroundOverScan.x,d+this.state.valueBackgroundOverScan.y)}}let S=this.getTextColor();f.fillStyle=a.color.hex(S),h&&f.fillText(`-`,...a.xy.couple(a.xy.translateX(x,-m*.6)),void 0,ad),f.fillText(p,...a.xy.couple(x),void 0,ad)}},ld={[cd.TYPE]:cd},ud=e.n({render:()=>fd}),dd={[Yl]:Xl,[ue]:fe,[de]:pe,[me]:he,[ql]:Jl},fd=()=>{let e=new a.RoutedWorker((e,t)=>postMessage(e,t));onmessage=e.handle.bind(e);let t={...r.f,...Au,...ji,...Cu,...Ii,...r.n,...Hu,...Gu,...wi,...zl,...jl,...Vc,...jc,...Yu,...$u,...n.m,...re,...oi,...n.r,...rd,...Zc,...ld,...Kl,...Pu,...Ru,...le({storeConfig:dd})};n.E({comms:e.route(`vis`),registry:t,instrumentation:new s.Instrumentation({logger:new s.Logger({filters:[(0,s.logThresholdFilter)(`info`)]})})})};Object.defineProperty(exports,`$`,{enumerable:!0,get:function(){return Yc}}),Object.defineProperty(exports,`$t`,{enumerable:!0,get:function(){return de}}),Object.defineProperty(exports,`A`,{enumerable:!0,get:function(){return _u}}),Object.defineProperty(exports,`At`,{enumerable:!0,get:function(){return $n}}),Object.defineProperty(exports,`B`,{enumerable:!0,get:function(){return Yl}}),Object.defineProperty(exports,`Bt`,{enumerable:!0,get:function(){return an}}),Object.defineProperty(exports,`C`,{enumerable:!0,get:function(){return wu}}),Object.defineProperty(exports,`Ct`,{enumerable:!0,get:function(){return ni}}),Object.defineProperty(exports,`D`,{enumerable:!0,get:function(){return yu}}),Object.defineProperty(exports,`Dt`,{enumerable:!0,get:function(){return ur}}),Object.defineProperty(exports,`E`,{enumerable:!0,get:function(){return bu}}),Object.defineProperty(exports,`Et`,{enumerable:!0,get:function(){return nr}}),Object.defineProperty(exports,`F`,{enumerable:!0,get:function(){return ru}}),Object.defineProperty(exports,`Ft`,{enumerable:!0,get:function(){return Cn}}),Object.defineProperty(exports,`G`,{enumerable:!0,get:function(){return Bl}}),Object.defineProperty(exports,`Gt`,{enumerable:!0,get:function(){return rt}}),Object.defineProperty(exports,`H`,{enumerable:!0,get:function(){return ql}}),Object.defineProperty(exports,`Ht`,{enumerable:!0,get:function(){return ht}}),Object.defineProperty(exports,`I`,{enumerable:!0,get:function(){return eu}}),Object.defineProperty(exports,`It`,{enumerable:!0,get:function(){return fn}}),Object.defineProperty(exports,`J`,{enumerable:!0,get:function(){return Ml}}),Object.defineProperty(exports,`Jt`,{enumerable:!0,get:function(){return me}}),Object.defineProperty(exports,`K`,{enumerable:!0,get:function(){return Rl}}),Object.defineProperty(exports,`Kt`,{enumerable:!0,get:function(){return Le}}),Object.defineProperty(exports,`L`,{enumerable:!0,get:function(){return $l}}),Object.defineProperty(exports,`Lt`,{enumerable:!0,get:function(){return dn}}),Object.defineProperty(exports,`M`,{enumerable:!0,get:function(){return au}}),Object.defineProperty(exports,`Mt`,{enumerable:!0,get:function(){return Wn}}),Object.defineProperty(exports,`N`,{enumerable:!0,get:function(){return uu}}),Object.defineProperty(exports,`Nt`,{enumerable:!0,get:function(){return xn}}),Object.defineProperty(exports,`O`,{enumerable:!0,get:function(){return su}}),Object.defineProperty(exports,`Ot`,{enumerable:!0,get:function(){return Hn}}),Object.defineProperty(exports,`P`,{enumerable:!0,get:function(){return cu}}),Object.defineProperty(exports,`Pt`,{enumerable:!0,get:function(){return Sn}}),Object.defineProperty(exports,`Q`,{enumerable:!0,get:function(){return Xc}}),Object.defineProperty(exports,`Qt`,{enumerable:!0,get:function(){return fe}}),Object.defineProperty(exports,`R`,{enumerable:!0,get:function(){return Ql}}),Object.defineProperty(exports,`Rt`,{enumerable:!0,get:function(){return ln}}),Object.defineProperty(exports,`S`,{enumerable:!0,get:function(){return Du}}),Object.defineProperty(exports,`St`,{enumerable:!0,get:function(){return ri}}),Object.defineProperty(exports,`T`,{enumerable:!0,get:function(){return xu}}),Object.defineProperty(exports,`Tt`,{enumerable:!0,get:function(){return ir}}),Object.defineProperty(exports,`U`,{enumerable:!0,get:function(){return Gl}}),Object.defineProperty(exports,`Ut`,{enumerable:!0,get:function(){return mt}}),Object.defineProperty(exports,`V`,{enumerable:!0,get:function(){return Jl}}),Object.defineProperty(exports,`Vt`,{enumerable:!0,get:function(){return Zt}}),Object.defineProperty(exports,`W`,{enumerable:!0,get:function(){return Vl}}),Object.defineProperty(exports,`Wt`,{enumerable:!0,get:function(){return ct}}),Object.defineProperty(exports,`X`,{enumerable:!0,get:function(){return el}}),Object.defineProperty(exports,`Xt`,{enumerable:!0,get:function(){return _e}}),Object.defineProperty(exports,`Y`,{enumerable:!0,get:function(){return Al}}),Object.defineProperty(exports,`Yt`,{enumerable:!0,get:function(){return ge}}),Object.defineProperty(exports,`Z`,{enumerable:!0,get:function(){return Qc}}),Object.defineProperty(exports,`Zt`,{enumerable:!0,get:function(){return ue}}),Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return Lu}}),Object.defineProperty(exports,`_n`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`_t`,{enumerable:!0,get:function(){return ki}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return td}}),Object.defineProperty(exports,`an`,{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,`at`,{enumerable:!0,get:function(){return Ac}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return Tu}}),Object.defineProperty(exports,`bt`,{enumerable:!0,get:function(){return di}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return Zu}}),Object.defineProperty(exports,`cn`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`ct`,{enumerable:!0,get:function(){return mc}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return Ku}}),Object.defineProperty(exports,`dn`,{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,`dt`,{enumerable:!0,get:function(){return Z}}),Object.defineProperty(exports,`en`,{enumerable:!0,get:function(){return pe}}),Object.defineProperty(exports,`et`,{enumerable:!0,get:function(){return Wc}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return Wu}}),Object.defineProperty(exports,`fn`,{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,`ft`,{enumerable:!0,get:function(){return uc}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return zu}}),Object.defineProperty(exports,`gn`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`gt`,{enumerable:!0,get:function(){return Ai}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return Bu}}),Object.defineProperty(exports,`hn`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`ht`,{enumerable:!0,get:function(){return Ni}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return nd}}),Object.defineProperty(exports,`in`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`it`,{enumerable:!0,get:function(){return Fc}}),Object.defineProperty(exports,`j`,{enumerable:!0,get:function(){return ou}}),Object.defineProperty(exports,`jt`,{enumerable:!0,get:function(){return Gn}}),Object.defineProperty(exports,`k`,{enumerable:!0,get:function(){return pu}}),Object.defineProperty(exports,`kt`,{enumerable:!0,get:function(){return tr}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return Ju}}),Object.defineProperty(exports,`ln`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`lt`,{enumerable:!0,get:function(){return Ec}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return Vu}}),Object.defineProperty(exports,`mn`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`mt`,{enumerable:!0,get:function(){return Mi}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return cd}}),Object.defineProperty(exports,`nn`,{enumerable:!0,get:function(){return ie}}),Object.defineProperty(exports,`nt`,{enumerable:!0,get:function(){return Bc}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return ed}}),Object.defineProperty(exports,`on`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`ot`,{enumerable:!0,get:function(){return Dc}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return Uu}}),Object.defineProperty(exports,`pn`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`pt`,{enumerable:!0,get:function(){return Fi}}),Object.defineProperty(exports,`q`,{enumerable:!0,get:function(){return Pl}}),Object.defineProperty(exports,`qt`,{enumerable:!0,get:function(){return he}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return id}}),Object.defineProperty(exports,`rn`,{enumerable:!0,get:function(){return ee}}),Object.defineProperty(exports,`rt`,{enumerable:!0,get:function(){return zc}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return Qu}}),Object.defineProperty(exports,`sn`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`st`,{enumerable:!0,get:function(){return Oc}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return ud}}),Object.defineProperty(exports,`tn`,{enumerable:!0,get:function(){return oe}}),Object.defineProperty(exports,`tt`,{enumerable:!0,get:function(){return Uc}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return qu}}),Object.defineProperty(exports,`un`,{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,`ut`,{enumerable:!0,get:function(){return _c}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return Nu}}),Object.defineProperty(exports,`vn`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`vt`,{enumerable:!0,get:function(){return Oi}}),Object.defineProperty(exports,`w`,{enumerable:!0,get:function(){return Su}}),Object.defineProperty(exports,`wt`,{enumerable:!0,get:function(){return sr}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return Ou}}),Object.defineProperty(exports,`xt`,{enumerable:!0,get:function(){return si}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return ku}}),Object.defineProperty(exports,`yt`,{enumerable:!0,get:function(){return _i}}),Object.defineProperty(exports,`z`,{enumerable:!0,get:function(){return Xl}}),Object.defineProperty(exports,`zt`,{enumerable:!0,get:function(){return cn}});
|