@marimo-team/frontend 0.21.1-dev12 → 0.21.1-dev14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/dist/assets/{CellStatus-CFRv4Tvd.js → CellStatus-CoejXnCc.js} +1 -1
  2. package/dist/assets/ConnectedDataExplorerComponent-DsPvYWwS.js +1 -0
  3. package/dist/assets/{JsonOutput-DJukuY6Z.js → JsonOutput-CBK4dhVh.js} +10 -10
  4. package/dist/assets/{MarimoErrorOutput-zVM0B_Vj.js → MarimoErrorOutput-B0nc63rx.js} +1 -1
  5. package/dist/assets/{RenderHTML-BuMvdWQd.js → RenderHTML-Bp9XY06U.js} +1 -1
  6. package/dist/assets/{add-cell-with-ai-BtzUxApq.js → add-cell-with-ai-CrnYAxuA.js} +1 -1
  7. package/dist/assets/{add-connection-dialog-BSsacvzU.js → add-connection-dialog-I31C6j-5.js} +1 -1
  8. package/dist/assets/{agent-panel-a_m3dm9Y.js → agent-panel-ufAvSbof.js} +1 -1
  9. package/dist/assets/{ai-model-dropdown-CcIreMqb.js → ai-model-dropdown-BYDC_z7s.js} +1 -1
  10. package/dist/assets/{app-config-button-D-mROEVq.js → app-config-button-CRfW3S6Z.js} +1 -1
  11. package/dist/assets/{azure-FFoHMnHA.js → azure-q5TZ9bt0.js} +1 -1
  12. package/dist/assets/{cell-editor-D_RsnX0J.js → cell-editor-eZKo6fP_.js} +1 -1
  13. package/dist/assets/{cell-link-BjgRgErj.js → cell-link-DWQZUFhO.js} +1 -1
  14. package/dist/assets/{cells-CAHXVi26.js → cells-Dqou-uie.js} +32 -32
  15. package/dist/assets/{chat-display-rX-JkJEO.js → chat-display-Vedn01P6.js} +1 -1
  16. package/dist/assets/{chat-panel-BudFFybg.js → chat-panel-udyCNql9.js} +1 -1
  17. package/dist/assets/{column-preview-Dk_9z2Mw.js → column-preview-DPhs4evg.js} +1 -1
  18. package/dist/assets/{command-_14PjWun.js → command-Ckfx4w5C.js} +1 -1
  19. package/dist/assets/command-palette-D51FjW1l.js +1 -0
  20. package/dist/assets/{common-D2sp4A8j.js → common-DMx0N5jj.js} +1 -1
  21. package/dist/assets/{components-BP1LfBLA.js → components-Bgj5U8rZ.js} +1 -1
  22. package/dist/assets/{components-Wzn4JDkV.js → components-CHO2M34L.js} +1 -1
  23. package/dist/assets/context-aware-panel-TU7i7Ais.js +3 -0
  24. package/dist/assets/{datasource-BNXHfowL.js → datasource-Cn-Wy4lo.js} +1 -1
  25. package/dist/assets/{dependency-graph-panel-B5Eq3e0f.js → dependency-graph-panel-Dd_ypMAw.js} +1 -1
  26. package/dist/assets/{documentation-panel-DLE-AkPt.js → documentation-panel-C1QC0dL_.js} +1 -1
  27. package/dist/assets/{download-SQhwj_Eq.js → download-D6Fv1GMQ.js} +1 -1
  28. package/dist/assets/{edit-page-qWzJGYd0.js → edit-page-DGpjBH-k.js} +7 -7
  29. package/dist/assets/{error-panel-DmmjuXRp.js → error-panel-BfF_Pl3q.js} +1 -1
  30. package/dist/assets/{file-explorer-panel-DW3BdMFp.js → file-explorer-panel-C6RCpRgm.js} +1 -1
  31. package/dist/assets/{file-icons-xucuZauP.js → file-icons-0zZkfGbI.js} +1 -1
  32. package/dist/assets/{floating-outline-2X-MQKSU.js → floating-outline-CNejeNGC.js} +1 -1
  33. package/dist/assets/{focus-DaKeoSx6.js → focus-CQRBseis.js} +1 -1
  34. package/dist/assets/{form-C5vg9S9o.js → form-B9Fj5Rl-.js} +1 -1
  35. package/dist/assets/formats-DzzQnJYt.js +1 -0
  36. package/dist/assets/{globals-DCdvUAk2.js → globals-DE7Q2ffe.js} +1 -1
  37. package/dist/assets/{home-page-4oOWwdL4.js → home-page-C8mwmLAs.js} +1 -1
  38. package/dist/assets/{hooks-CZT_TWa2.js → hooks-C8aiyK69.js} +1 -1
  39. package/dist/assets/{html-to-image-BgHw831z.js → html-to-image-BFwmkFZ4.js} +1 -1
  40. package/dist/assets/{index-CVpJvEAO.css → index-Bgbe24O9.css} +1 -1
  41. package/dist/assets/{index-CPEieVCj.js → index-bt3OH-Pk.js} +17 -17
  42. package/dist/assets/{kiosk-mode-BNqp-cFU.js → kiosk-mode-BO-KqM9l.js} +1 -1
  43. package/dist/assets/{layout-52MeytEk.js → layout-BEA77UDX.js} +1 -1
  44. package/dist/assets/{logs-panel-dWMS7IIv.js → logs-panel-BebwAaGv.js} +1 -1
  45. package/dist/assets/{markdown-renderer-MyhTrUey.js → markdown-renderer-CdEqa6lQ.js} +1 -1
  46. package/dist/assets/{mode-D_HXqDHH.js → mode-DSINUCzY.js} +1 -1
  47. package/dist/assets/{name-cell-input-CAAR5C2m.js → name-cell-input-DaDgZhjE.js} +1 -1
  48. package/dist/assets/{outline-panel-Bmfna9YR.js → outline-panel-DCpOiLnR.js} +1 -1
  49. package/dist/assets/{packages-panel-DKH34NxN.js → packages-panel-kOdMspq6.js} +1 -1
  50. package/dist/assets/{panels-jo8u0sPM.js → panels-BSQT0nmq.js} +1 -1
  51. package/dist/assets/{process-output-B2kGZ_VU.js → process-output-4ypD4fg7.js} +1 -1
  52. package/dist/assets/{readonly-python-code-Dz4GjF9D.js → readonly-python-code-CysvH2Zj.js} +1 -1
  53. package/dist/assets/run-page-BRdwXGaf.js +1 -0
  54. package/dist/assets/scratchpad-panel-DQQ_wRz5.js +1 -0
  55. package/dist/assets/session-panel-BACIy3wf.js +1 -0
  56. package/dist/assets/{snippets-panel-C0yfvEEg.js → snippets-panel-BjUFMiXc.js} +1 -1
  57. package/dist/assets/{state-CGu0LFDk.js → state-BqEQgvo3.js} +1 -1
  58. package/dist/assets/{switch-krcK9lRK.js → switch-JycgoJcn.js} +1 -1
  59. package/dist/assets/{tracing-3veLCmCp.js → tracing-1AoHNFA-.js} +1 -1
  60. package/dist/assets/{tracing-panel-KUJifV3W.js → tracing-panel-CrlCrmHo.js} +2 -2
  61. package/dist/assets/{useAddCell-_oR2xY1x.js → useAddCell-BSbQWv3q.js} +1 -1
  62. package/dist/assets/{useBoolean-D8-4no-l.js → useBoolean-Cm61eWz0.js} +1 -1
  63. package/dist/assets/{useCellActionButton-DNIW0rqj.js → useCellActionButton-DpdThmJR.js} +1 -1
  64. package/dist/assets/{useDeleteCell-BAuuakkK.js → useDeleteCell-DSpj4wDu.js} +1 -1
  65. package/dist/assets/{useDependencyPanelTab-ClmZIdnO.js → useDependencyPanelTab-1iAP2AMB.js} +1 -1
  66. package/dist/assets/{useNotebookActions-DhmD75et.js → useNotebookActions-CU14FoaT.js} +1 -1
  67. package/dist/assets/{useRunCells-BOsp_Hau.js → useRunCells-BSsgvk4y.js} +1 -1
  68. package/dist/assets/{useSplitCell-DfYEUeyE.js → useSplitCell-Ct7RykE3.js} +1 -1
  69. package/dist/assets/{tooltip-DLsts-7g.js → utils-BuPoTKhl.js} +3 -3
  70. package/dist/assets/vega-component-S1h0g70Q.js +1 -0
  71. package/dist/index.html +35 -35
  72. package/package.json +1 -1
  73. package/src/components/data-table/charts/lazy-chart.tsx +2 -0
  74. package/src/components/data-table/column-summary/column-summary.tsx +1 -0
  75. package/src/components/datasources/column-preview.tsx +1 -0
  76. package/src/components/editor/Output.tsx +2 -0
  77. package/src/components/editor/chrome/panels/context-aware-panel/context-aware-panel.tsx +6 -0
  78. package/src/components/editor/chrome/wrapper/__tests__/utils.test.ts +35 -0
  79. package/src/components/editor/chrome/wrapper/app-chrome.tsx +12 -14
  80. package/src/components/editor/chrome/wrapper/utils.ts +5 -1
  81. package/src/core/codemirror/reactive-references/__tests__/analyzer.test.ts +54 -0
  82. package/src/core/codemirror/reactive-references/analyzer.ts +14 -0
  83. package/src/plugins/impl/data-explorer/ConnectedDataExplorerComponent.tsx +6 -3
  84. package/src/plugins/impl/vega/__tests__/utils.test.ts +36 -0
  85. package/src/plugins/impl/vega/utils.ts +14 -0
  86. package/src/plugins/impl/vega/vega-component.tsx +6 -7
  87. package/src/plugins/impl/vega/vega.css +1 -1
  88. package/dist/assets/ConnectedDataExplorerComponent-BrZvYzEX.js +0 -1
  89. package/dist/assets/command-palette-NBOgLsWz.js +0 -1
  90. package/dist/assets/context-aware-panel--8JnQtYo.js +0 -3
  91. package/dist/assets/formats-CmvHepzl.js +0 -1
  92. package/dist/assets/run-page-DQIGlYAL.js +0 -1
  93. package/dist/assets/scratchpad-panel-ClYOgTQp.js +0 -1
  94. package/dist/assets/session-panel-BYjloSxn.js +0 -1
  95. package/dist/assets/vega-component-D3vsTtly.js +0 -1
@@ -1,6 +1,6 @@
1
- var ue=Object.defineProperty;var ce=(t,e,n)=>e in t?ue(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n;var A=(t,e,n)=>ce(t,typeof e!="symbol"?e+"":e,n);var at,lt,ot,ut,ct;import{C as de,S as he}from"./_Uint8Array-C0aUZfE0.js";import{c as fe,m as ye}from"./useEventListener-BGihH8bs.js";import{St as yt,a as pe,c as ge,gt as me,o as ve,wt as be}from"./vega-loader.browser-CZV6_g2i.js";var xe="[object Number]";function we(t){return typeof t=="number"||he(t)&&de(t)==xe}var Ie=we;const pt=Uint8Array.of(65,82,82,79,87,49),$={V1:0,V2:1,V3:2,V4:3,V5:4},D={NONE:0,Schema:1,DictionaryBatch:2,RecordBatch:3,Tensor:4,SparseTensor:5},l={Dictionary:-1,NONE:0,Null:1,Int:2,Float:3,Binary:4,Utf8:5,Bool:6,Decimal:7,Date:8,Time:9,Timestamp:10,Interval:11,List:12,Struct:13,Union:14,FixedSizeBinary:15,FixedSizeList:16,Map:17,Duration:18,LargeBinary:19,LargeUtf8:20,LargeList:21,RunEndEncoded:22,BinaryView:23,Utf8View:24,ListView:25,LargeListView:26},gt={HALF:0,SINGLE:1,DOUBLE:2},z={DAY:0,MILLISECOND:1},m={SECOND:0,MILLISECOND:1,MICROSECOND:2,NANOSECOND:3},C={YEAR_MONTH:0,DAY_TIME:1,MONTH_DAY_NANO:2},W={Sparse:0,Dense:1},mt=Uint8Array,vt=Uint16Array,bt=Uint32Array,xt=BigUint64Array,wt=Int8Array,Le=Int16Array,x=Int32Array,L=BigInt64Array,Ae=Float32Array,k=Float64Array;function Ne(t,e){let n=Math.log2(t)-3;return(e?[wt,Le,x,L]:[mt,vt,bt,xt])[n]}Object.getPrototypeOf(Int8Array);function X(t,e){let n=0,r=t.length;if(r<=2147483648)do{let i=n+r>>>1;t[i]<=e?n=i+1:r=i}while(n<r);else do{let i=Math.trunc((n+r)/2);t[i]<=e?n=i+1:r=i}while(n<r);return n}function J(t,e,n){if(e(t))return t;throw Error(n(t))}function w(t,e,n){return e=Array.isArray(e)?e:Object.values(e),J(t,r=>e.includes(r),n??(()=>`${t} must be one of ${e}`))}function It(t,e){for(let[n,r]of Object.entries(t))if(r===e)return n;return"<Unknown>"}const G=t=>`Unsupported data type: "${It(l,t)}" (id ${t})`,Lt=(t,e,n=!0,r=null)=>({name:t,type:e,nullable:n,metadata:r});function At(t){return Object.hasOwn(t,"name")&&Nt(t.type)}function Nt(t){return typeof(t==null?void 0:t.typeId)=="number"}function B(t,e="",n=!0){return At(t)?t:Lt(e,J(t,Nt,()=>"Data type expected."),n)}const Ee=(t,e,n=!1,r=-1)=>({typeId:l.Dictionary,id:r,dictionary:t,indices:e||St(),ordered:n}),Et=(t=32,e=!0)=>({typeId:l.Int,bitWidth:w(t,[8,16,32,64]),signed:e,values:Ne(t,e)}),St=()=>Et(32),Se=(t=2)=>({typeId:l.Float,precision:w(t,gt),values:[vt,Ae,k][t]}),De=()=>({typeId:l.Binary,offsets:x}),Be=()=>({typeId:l.Utf8,offsets:x}),Oe=(t,e,n=128)=>({typeId:l.Decimal,precision:t,scale:e,bitWidth:w(n,[128,256]),values:xt}),Te=t=>({typeId:l.Date,unit:w(t,z),values:t===z.DAY?x:L}),Me=(t=m.MILLISECOND,e=32)=>({typeId:l.Time,unit:w(t,m),bitWidth:w(e,[32,64]),values:e===32?x:L}),Ce=(t=m.MILLISECOND,e=null)=>({typeId:l.Timestamp,unit:w(t,m),timezone:e,values:L}),Ue=(t=C.MONTH_DAY_NANO)=>({typeId:l.Interval,unit:w(t,C),values:t===C.MONTH_DAY_NANO?void 0:x}),Ve=t=>({typeId:l.List,children:[B(t)],offsets:x}),Fe=t=>({typeId:l.Struct,children:Array.isArray(t)&&At(t[0])?t:Object.entries(t).map(([e,n])=>Lt(e,n))}),Re=(t,e,n,r)=>(n??(n=e.map((i,s)=>s)),{typeId:l.Union,mode:w(t,W),typeIds:n,typeMap:n.reduce((i,s,a)=>(i[s]=a,i),{}),children:e.map((i,s)=>B(i,`_${s}`)),typeIdForValue:r,offsets:x}),$e=t=>({typeId:l.FixedSizeBinary,stride:t}),ze=(t,e)=>({typeId:l.FixedSizeList,stride:e,children:[B(t)]}),ke=(t,e)=>({typeId:l.Map,keysSorted:t,children:[e],offsets:x}),je=(t=m.MILLISECOND)=>({typeId:l.Duration,unit:w(t,m),values:L}),Ye=()=>({typeId:l.LargeBinary,offsets:L}),_e=()=>({typeId:l.LargeUtf8,offsets:L}),He=t=>({typeId:l.LargeList,children:[B(t)],offsets:L}),Pe=(t,e)=>({typeId:l.RunEndEncoded,children:[J(B(t,"run_ends"),n=>n.type.typeId===l.Int,()=>"Run-ends must have an integer type."),B(e,"values")]}),We=t=>({typeId:l.ListView,children:[B(t,"value")],offsets:x}),Xe=t=>({typeId:l.LargeListView,children:[B(t,"value")],offsets:L});var j=new k(2).buffer;new L(j),new bt(j),new x(j),new mt(j);function O(t){if(t>2**53-1||t<-(2**53-1))throw Error(`BigInt exceeds integer number representation: ${t}`);return Number(t)}function Z(t,e){return Number(t/e)+Number(t%e)/Number(e)}var U=t=>BigInt.asUintN(64,t);function Je(t,e){let n=e<<1,r;return BigInt.asIntN(64,t[n+1])<0?(r=U(~t[n])|U(~t[n+1])<<64n,r=-(r+1n)):r=t[n]|t[n+1]<<64n,r}function Ge(t,e){let n=e<<2,r;return BigInt.asIntN(64,t[n+3])<0?(r=U(~t[n])|U(~t[n+1])<<64n|U(~t[n+2])<<128n|U(~t[n+3])<<192n,r=-(r+1n)):r=t[n]|t[n+1]<<64n|t[n+2]<<128n|t[n+3]<<192n,r}var Ze=new TextDecoder("utf-8");new TextEncoder;function Y(t){return Ze.decode(t)}function Dt(t,e){return(t[e>>3]&1<<e%8)!=0}function N(t,e){let n=e+h(t,e),r=n-h(t,n),i=v(t,r);return(s,a,o=null)=>{if(s<i){let u=v(t,r+s);if(u)return a(t,n+u)}return o}}function M(t,e){return e}function F(t,e){return!!qe(t,e)}function qe(t,e){return q(t,e)<<24>>24}function q(t,e){return t[e]}function v(t,e){return Ke(t,e)<<16>>16}function Ke(t,e){return t[e]|t[e+1]<<8}function h(t,e){return t[e]|t[e+1]<<8|t[e+2]<<16|t[e+3]<<24}function Bt(t,e){return h(t,e)>>>0}function b(t,e){return O(BigInt.asIntN(64,BigInt(Bt(t,e))+(BigInt(Bt(t,e+4))<<32n)))}function _(t,e){let n=e+h(t,e),r=h(t,n);return n+=4,Y(t.subarray(n,n+r))}function T(t,e,n,r){if(!e)return[];let i=e+h(t,e);return Array.from({length:h(t,i)},(s,a)=>r(t,i+4+a*n))}const K=Symbol("rowIndex");function Q(t,e){class n{constructor(s){this[K]=s}toJSON(){return Tt(t,e,this[K])}}let r=n.prototype;for(let i=0;i<t.length;++i){if(Object.hasOwn(r,t[i]))continue;let s=e[i];Object.defineProperty(r,t[i],{get(){return s.at(this[K])},enumerable:!0})}return i=>new n(i)}function Ot(t,e){return n=>Tt(t,e,n)}function Tt(t,e,n){let r={};for(let i=0;i<t.length;++i)r[t[i]]=e[i].at(n);return r}function Qe(t){return t instanceof P}var H=(at=class{constructor({length:t,nullCount:e,type:n,validity:r,values:i,offsets:s,sizes:a,children:o}){this.length=t,this.nullCount=e,this.type=n,this.validity=r,this.values=i,this.offsets=s,this.sizes=a,this.children=o,(!e||!this.validity)&&(this.at=u=>this.value(u))}get[Symbol.toStringTag](){return"Batch"}at(t){return this.isValid(t)?this.value(t):null}isValid(t){return Dt(this.validity,t)}value(t){return this.values[t]}slice(t,e){let n=e-t,r=Array(n);for(let i=0;i<n;++i)r[i]=this.at(t+i);return r}*[Symbol.iterator](){for(let t=0;t<this.length;++t)yield this.at(t)}},A(at,"ArrayType",null),at),P=class extends H{constructor(t){super(t);let{length:e,values:n}=this;this.values=n.subarray(0,e)}slice(t,e){return this.nullCount?super.slice(t,e):this.values.subarray(t,e)}[Symbol.iterator](){return this.nullCount?super[Symbol.iterator]():this.values[Symbol.iterator]()}},tt=(lt=class extends H{},A(lt,"ArrayType",k),lt),f=(ot=class extends H{},A(ot,"ArrayType",Array),ot),tn=class extends f{value(t){return null}},V=class extends tt{value(t){return O(this.values[t])}},en=class extends tt{value(t){let e=this.values[t],n=(e&31744)>>10,r=(e&1023)/1024,i=(-1)**((e&32768)>>15);switch(n){case 31:return i*(r?NaN:1/0);case 0:return i*(r?6103515625e-14*r:0)}return i*2**(n-15)*(1+r)}},nn=class extends f{value(t){return Dt(this.values,t)}},Mt=class extends H{constructor(t){super(t);let{bitWidth:e,scale:n}=this.type;this.decimal=e===128?Je:Ge,this.scale=10n**BigInt(n)}},rn=(ut=class extends Mt{value(t){return Z(this.decimal(this.values,t),this.scale)}},A(ut,"ArrayType",k),ut),sn=(ct=class extends Mt{value(t){return this.decimal(this.values,t)}},A(ct,"ArrayType",Array),ct),Ct=class extends f{constructor(t){super(t),this.source=t}value(t){return new Date(this.source.value(t))}},an=class extends tt{value(t){return 864e5*this.values[t]}};const ln=V;var on=class extends V{value(t){return super.value(t)*1e3}};const un=V;var cn=class extends V{value(t){return Z(this.values[t],1000n)}},dn=class extends V{value(t){return Z(this.values[t],1000000n)}},hn=class extends f{value(t){return this.values.subarray(t<<1,t+1<<1)}},fn=class extends f{value(t){let e=this.values,n=t<<4;return Float64Array.of(h(e,n),h(e,n+4),b(e,n+8))}},Ut=({values:t,offsets:e},n)=>t.subarray(e[n],e[n+1]),Vt=({values:t,offsets:e},n)=>t.subarray(O(e[n]),O(e[n+1])),yn=class extends f{value(t){return Ut(this,t)}},pn=class extends f{value(t){return Vt(this,t)}},gn=class extends f{value(t){return Y(Ut(this,t))}},mn=class extends f{value(t){return Y(Vt(this,t))}},vn=class extends f{value(t){let e=this.offsets;return this.children[0].slice(e[t],e[t+1])}},bn=class extends f{value(t){let e=this.offsets;return this.children[0].slice(O(e[t]),O(e[t+1]))}},xn=class extends f{value(t){let e=this.offsets[t],n=e+this.sizes[t];return this.children[0].slice(e,n)}},wn=class extends f{value(t){let e=this.offsets[t],n=e+this.sizes[t];return this.children[0].slice(O(e),O(n))}},Ft=class extends f{constructor(t){super(t),this.stride=this.type.stride}},In=class extends Ft{value(t){let{stride:e,values:n}=this;return n.subarray(t*e,(t+1)*e)}},Ln=class extends Ft{value(t){let{children:e,stride:n}=this;return e[0].slice(t*n,(t+1)*n)}};function Rt({children:t,offsets:e},n){let[r,i]=t[0].children,s=e[n],a=e[n+1],o=[];for(let u=s;u<a;++u)o.push([r.at(u),i.at(u)]);return o}var An=class extends f{value(t){return Rt(this,t)}},Nn=class extends f{value(t){return new Map(Rt(this,t))}},$t=class extends f{constructor({typeIds:t,...e}){super(e),this.typeIds=t,this.typeMap=this.type.typeMap}value(t,e=t){let{typeIds:n,children:r,typeMap:i}=this;return r[i[n[t]]].at(e)}},En=class extends $t{value(t){return super.value(t,this.offsets[t])}},zt=class extends f{constructor(t,e=Ot){super(t),this.names=this.type.children.map(n=>n.name),this.factory=e(this.names,this.children)}value(t){return this.factory(t)}},Sn=class extends zt{constructor(t){super(t,Q)}},Dn=class extends f{value(t){let[{values:e},n]=this.children;return n.at(X(e,t))}},Bn=class extends f{setDictionary(t){return this.dictionary=t,this.cache=t.cache(),this}value(t){return this.cache[this.key(t)]}key(t){return this.values[t]}},kt=class extends f{constructor({data:t,...e}){super(e),this.data=t}view(t){let{values:e,data:n}=this,r=t<<4,i=r+4,s=e,a=h(s,r);return a>12&&(i=h(s,r+12),s=n[h(s,r+8)]),s.subarray(i,i+a)}},On=class extends kt{value(t){return this.view(t)}},Tn=class extends kt{value(t){return Y(this.view(t))}};function jt(t){let e=[];return{add(n){return e.push(n),this},clear:()=>e=[],done:()=>new Mn(e,t)}}var Mn=class{constructor(t,e=(n=>(n=t[0])==null?void 0:n.type)()){this.type=e,this.length=t.reduce((s,a)=>s+a.length,0),this.nullCount=t.reduce((s,a)=>s+a.nullCount,0),this.data=t;let r=t.length,i=new Int32Array(r+1);if(r===1){let[s]=t;i[1]=s.length,this.at=a=>s.at(a)}else for(let s=0,a=0;s<r;++s)i[s+1]=a+=t[s].length;this.offsets=i}get[Symbol.toStringTag](){return"Column"}[Symbol.iterator](){let t=this.data;return t.length===1?t[0][Symbol.iterator]():Cn(t)}at(t){var i;let{data:e,offsets:n}=this,r=X(n,t)-1;return(i=e[r])==null?void 0:i.at(t-n[r])}get(t){return this.at(t)}toArray(){let{length:t,nullCount:e,data:n}=this,r=!e&&Qe(n[0]),i=n.length;if(r&&i===1)return n[0].values;let s=new(!i||e>0?Array:n[0].constructor.ArrayType??n[0].values.constructor)(t);return r?Un(s,n):Vn(s,n)}cache(){return this._cache??(this._cache=this.toArray())}};function*Cn(t){for(let e=0;e<t.length;++e){let n=t[e][Symbol.iterator]();for(let r=n.next();!r.done;r=n.next())yield r.value}}function Un(t,e){for(let n=0,r=0;n<e.length;++n){let{values:i}=e[n];t.set(i,r),r+=i.length}return t}function Vn(t,e){let n=-1;for(let r=0;r<e.length;++r){let i=e[r];for(let s=0;s<i.length;++s)t[++n]=i.at(s)}return t}var Fn=class le{constructor(e,n,r=!1){let i=e.fields.map(a=>a.name);this.schema=e,this.names=i,this.children=n,this.factory=r?Q:Ot;let s=[];this.getFactory=a=>s[a]??(s[a]=this.factory(i,n.map(o=>o.data[a])))}get[Symbol.toStringTag](){return"Table"}get numCols(){return this.names.length}get numRows(){var e;return((e=this.children[0])==null?void 0:e.length)??0}getChildAt(e){return this.children[e]}getChild(e){let n=this.names.findIndex(r=>r===e);return n>-1?this.children[n]:void 0}selectAt(e,n=[]){let{children:r,factory:i,schema:s}=this,{fields:a}=s;return new le({...s,fields:e.map((o,u)=>Rn(a[o],n[u]))},e.map(o=>r[o]),i===Q)}select(e,n){let r=this.names,i=e.map(s=>r.indexOf(s));return this.selectAt(i,n)}toColumns(){let{children:e,names:n}=this,r={};return n.forEach((i,s)=>{var a;return r[i]=((a=e[s])==null?void 0:a.toArray())??[]}),r}toArray(){var a;let{children:e,getFactory:n,numRows:r}=this,i=((a=e[0])==null?void 0:a.data)??[],s=Array(r);for(let o=0,u=-1;o<i.length;++o){let d=n(o);for(let c=0;c<i[o].length;++c)s[++u]=d(c)}return s}*[Symbol.iterator](){var i;let{children:e,getFactory:n}=this,r=((i=e[0])==null?void 0:i.data)??[];for(let s=0;s<r.length;++s){let a=n(s);for(let o=0;o<r[s].length;++o)yield a(o)}}at(e){let{children:n,getFactory:r,numRows:i}=this;if(e<0||e>=i)return null;let[{offsets:s}]=n,a=X(s,e)-1;return r(a)(e-s[a])}get(e){return this.at(e)}};function Rn(t,e){return e!=null&&e!==t.name?{...t,name:e}:t}function $n(t,e={}){let{typeId:n,bitWidth:r,precision:i,unit:s}=t,{useBigInt:a,useDate:o,useDecimalBigInt:u,useMap:d,useProxy:c}=e;switch(n){case l.Null:return tn;case l.Bool:return nn;case l.Int:case l.Time:case l.Duration:return a||r<64?P:V;case l.Float:return i?P:en;case l.Date:return Yt(s===z.DAY?an:ln,o&&Ct);case l.Timestamp:return Yt(s===m.SECOND?on:s===m.MILLISECOND?un:s===m.MICROSECOND?cn:dn,o&&Ct);case l.Decimal:return u?sn:rn;case l.Interval:return s===C.DAY_TIME?hn:s===C.YEAR_MONTH?P:fn;case l.FixedSizeBinary:return In;case l.Utf8:return gn;case l.LargeUtf8:return mn;case l.Binary:return yn;case l.LargeBinary:return pn;case l.BinaryView:return On;case l.Utf8View:return Tn;case l.List:return vn;case l.LargeList:return bn;case l.Map:return d?Nn:An;case l.ListView:return xn;case l.LargeListView:return wn;case l.FixedSizeList:return Ln;case l.Struct:return c?Sn:zt;case l.RunEndEncoded:return Dn;case l.Dictionary:return Bn;case l.Union:return t.mode?En:$t}throw Error(G(n))}function Yt(t,e){return e?class extends e{constructor(n){super(new t(n))}}:t}function zn(t,e){return{offset:b(t,e),metadataLength:h(t,e+8),bodyLength:b(t,e+16)}}function _t(t,e){return T(t,e,24,zn)}function Ht(t,e,n){let r=N(t,e);if(r(10,M,0))throw Error("Record batch compression not implemented");let i=n<$.V4?8:0;return{length:r(4,b,0),nodes:T(t,r(6,M),16,(s,a)=>({length:b(s,a),nullCount:b(s,a+8)})),regions:T(t,r(8,M),16+i,(s,a)=>({offset:b(s,a+i),length:b(s,a+i+8)})),variadic:T(t,r(12,M),8,b)}}function kn(t,e,n){let r=N(t,e);return{id:r(4,b,0),data:r(6,(i,s)=>Ht(i,s,n)),isDelta:r(8,F,!1)}}function Pt(t,e,n,r){w(n,l,G);let i=N(t,e);switch(n){case l.Binary:return De();case l.Utf8:return Be();case l.LargeBinary:return Ye();case l.LargeUtf8:return _e();case l.List:return Ve(r[0]);case l.ListView:return We(r[0]);case l.LargeList:return He(r[0]);case l.LargeListView:return Xe(r[0]);case l.Struct:return Fe(r);case l.RunEndEncoded:return Pe(r[0],r[1]);case l.Int:return Et(i(4,h,0),i(6,F,!1));case l.Float:return Se(i(4,v,gt.HALF));case l.Decimal:return Oe(i(4,h,0),i(6,h,0),i(8,h,128));case l.Date:return Te(i(4,v,z.MILLISECOND));case l.Time:return Me(i(4,v,m.MILLISECOND),i(6,h,32));case l.Timestamp:return Ce(i(4,v,m.SECOND),i(6,_));case l.Interval:return Ue(i(4,v,C.YEAR_MONTH));case l.Duration:return je(i(4,v,m.MILLISECOND));case l.FixedSizeBinary:return $e(i(4,h,0));case l.FixedSizeList:return ze(r[0],i(4,h,0));case l.Map:return ke(i(4,F,!1),r[0]);case l.Union:return Re(i(4,v,W.Sparse),r,T(t,i(6,M),4,h))}return{typeId:n}}function et(t,e){let n=T(t,e,4,(r,i)=>{let s=N(r,i);return[s(4,_),s(6,_)]});return n.length?new Map(n):null}function Wt(t,e,n){let r=N(t,e);return{version:n,endianness:r(4,v,0),fields:r(6,jn,[]),metadata:r(8,et)}}function jn(t,e){return T(t,e,4,Xt)}function Xt(t,e){let n=N(t,e),r=n(8,q,l.NONE),i=n(10,M,0),s=n(12,_n),a=Pt(t,i,r,n(14,(o,u)=>Yn(o,u)));return s&&(s.dictionary=a,a=s),{name:n(4,_),type:a,nullable:n(6,F,!1),metadata:n(16,et)}}function Yn(t,e){let n=T(t,e,4,Xt);return n.length?n:null}function _n(t,e){if(!e)return null;let n=N(t,e);return Ee(null,n(6,Hn,St()),n(8,F,!1),n(4,b,0))}function Hn(t,e){return Pt(t,e,l.Int)}var Pn=(t,e)=>`Expected to read ${t} metadata bytes, but only read ${e}.`,Wn=(t,e)=>`Expected to read ${t} bytes for message body, but only read ${e}.`,Xn=t=>`Unsupported message type: ${t} (${It(D,t)})`;function nt(t,e){let n=h(t,e)||0;if(e+=4,n===-1&&(n=h(t,e)||0,e+=4),n===0)return null;let r=t.subarray(e,e+=n);if(r.byteLength<n)throw Error(Pn(n,r.byteLength));let i=N(r,0),s=i(4,v,$.V1),a=i(6,q,D.NONE),o=i(8,M,0),u=i(10,b,0),d;if(o){let c=a===D.Schema?Wt:a===D.DictionaryBatch?kn:a===D.RecordBatch?Ht:null;if(!c)throw Error(Xn(a));if(d=c(r,o,s),u>0){let g=t.subarray(e,e+=u);if(g.byteLength<u)throw Error(Wn(u,g.byteLength));d.body=g}}return{version:s,type:a,index:e,content:d}}function Jn(t){let e=t instanceof ArrayBuffer?new Uint8Array(t):t;return e instanceof Uint8Array&&Gn(e)?qn(e):Zn(e)}function Gn(t){if(!t||t.length<4)return!1;for(let e=0;e<6;++e)if(pt[e]!==t[e])return!1;return!0}function Zn(t){let e=[t].flat(),n,r=[],i=[];for(let s of e){if(!(s instanceof Uint8Array))throw Error("IPC data batch was not a Uint8Array.");let a=0;for(;;){let o=nt(s,a);if(o===null)break;if(a=o.index,o.content)switch(o.type){case D.Schema:n||(n=o.content);break;case D.RecordBatch:r.push(o.content);break;case D.DictionaryBatch:i.push(o.content);break}}}return{schema:n,dictionaries:i,records:r,metadata:null}}function qn(t){let e=t.byteLength-(pt.length+4),n=N(t,e-h(t,e)),r=n(4,v,$.V1),i=n(8,_t,[]),s=n(10,_t,[]);return{schema:n(6,(a,o)=>Wt(a,o,r)),dictionaries:i.map(({offset:a})=>nt(t,a).content),records:s.map(({offset:a})=>nt(t,a).content),metadata:n(12,et)}}function rt(t,e){return Kn(Jn(t),e)}function Kn(t,e={}){let{schema:n={fields:[]},dictionaries:r,records:i}=t,{version:s,fields:a}=n,o=new Map,u=tr(e,s,o),d=new Map;Qn(n,y=>{let p=y.type;p.typeId===l.Dictionary&&d.set(p.id,p.dictionary)});let c=new Map;for(let y of r){let{id:p,data:E,isDelta:S,body:oe}=y,dt=d.get(p),ht=it(dt,u({...E,body:oe}));if(c.has(p)){let ft=c.get(p);S||ft.clear(),ft.add(ht)}else{if(S)throw Error("Delta update can not be first dictionary batch.");c.set(p,jt(dt).add(ht))}}c.forEach((y,p)=>o.set(p,y.done()));let g=a.map(y=>jt(y.type));for(let y of i){let p=u(y);a.forEach((E,S)=>g[S].add(it(E.type,p)))}return new Fn(n,g.map(y=>y.done()),e.useProxy)}function Qn(t,e){t.fields.forEach(function n(r){var i,s,a;e(r),(s=(i=r.type.dictionary)==null?void 0:i.children)==null||s.forEach(n),(a=r.type.children)==null||a.forEach(n)})}function tr(t,e,n){let r={version:e,options:t,dictionary:i=>n.get(i)};return i=>{let{length:s,nodes:a,regions:o,variadic:u,body:d}=i,c=-1,g=-1,y=-1;return{...r,length:s,node:()=>a[++c],buffer:p=>{let{length:E,offset:S}=o[++g];return p?new p(d.buffer,d.byteOffset+S,E/p.BYTES_PER_ELEMENT):d.subarray(S,S+E)},variadic:()=>u[++y],visit(p){return p.map(E=>it(E.type,this))}}}}function it(t,e){let{typeId:n}=t,{length:r,options:i,node:s,buffer:a,variadic:o,version:u}=e,d=$n(t,i);if(n===l.Null)return new d({length:r,nullCount:r,type:t});let c={...s(),type:t};switch(n){case l.Bool:case l.Int:case l.Time:case l.Duration:case l.Float:case l.Decimal:case l.Date:case l.Timestamp:case l.Interval:case l.FixedSizeBinary:return new d({...c,validity:a(),values:a(t.values)});case l.Utf8:case l.LargeUtf8:case l.Binary:case l.LargeBinary:return new d({...c,validity:a(),offsets:a(t.offsets),values:a()});case l.BinaryView:case l.Utf8View:return new d({...c,validity:a(),values:a(),data:Array.from({length:o()},()=>a())});case l.List:case l.LargeList:case l.Map:return new d({...c,validity:a(),offsets:a(t.offsets),children:e.visit(t.children)});case l.ListView:case l.LargeListView:return new d({...c,validity:a(),offsets:a(t.offsets),sizes:a(t.offsets),children:e.visit(t.children)});case l.FixedSizeList:case l.Struct:return new d({...c,validity:a(),children:e.visit(t.children)});case l.RunEndEncoded:return new d({...c,children:e.visit(t.children)});case l.Dictionary:{let{id:g,indices:y}=t;return new d({...c,validity:a(),values:a(y.values)}).setDictionary(e.dictionary(g))}case l.Union:return u<$.V5&&a(),new d({...c,typeIds:a(wt),offsets:t.mode===W.Sparse?null:a(t.offsets),children:e.visit(t.children)});default:throw Error(G(n))}}new Uint16Array(new Uint8Array([1,0]).buffer)[0];function R(t,e){let n=new Map;return(...r)=>{let i=e(...r);if(n.has(i))return n.get(i);let s=t(...r).finally(()=>{n.delete(i)});return n.set(i,s),s}}function st(t,e){return ve(t,e)}function er(){return pe()}const I=ge;function Jt(){let t=nr(er()),e=n=>JSON.stringify(n);return{load:R(t.load.bind(t),e),sanitize:R(t.sanitize.bind(t),e),http:R(t.http.bind(t),e),file:R(t.file.bind(t),e)}}function nr(t){return{...t,async load(e,n){return e.endsWith(".arrow")?rt(await Gt(e),{useProxy:!1}).toArray():t.load(e,n)}}}const Gt=R(t=>fetch(t).then(e=>e.arrayBuffer()),t=>t);var Zt=I.integer,qt=I.number,rr=I.date,ir=I.boolean,Kt=()=>(I.integer=t=>{if(t==="")return"";if(t==="-inf"||t==="inf")return t;function e(r){let i=Zt(r);return Number.isNaN(i)?r:i}let n=Number.parseInt(t,10);if(Ie(n)){if(!(Math.abs(n)>2**53-1))return e(t);try{return BigInt(t)}catch{return e(t)}}else return""},I.number=t=>{if(t==="-inf"||t==="inf")return t;let e=qt(t);return Number.isNaN(e)?t:e},()=>{I.integer=Zt,I.number=qt}),Qt=()=>(I.date=t=>{if(t==="")return"";if(t==null)return null;if(!/^\d{4}-\d{2}-\d{2}(T[\d.:]+(Z|[+-]\d{2}:?\d{2})?)?$/.test(t))return t;try{let e=new Date(t);return Number.isNaN(e.getTime())?t:e}catch{return ye.warn(`Failed to parse date: ${t}`),t}},()=>{I.date=rr});I.boolean=t=>t==="True"?!0:t==="False"?!1:ir(t);const te=Jt();async function sr(t,e,n={}){let{handleBigIntAndNumberLike:r=!1,replacePeriod:i=!1}=n;if(t.endsWith(".arrow")||(e==null?void 0:e.type)==="arrow")return rt(await Gt(t),{useProxy:!0,useDate:!0,useBigInt:r}).toArray();let s=[Qt];r&&s.push(Kt);let a=[];try{let o=await te.load(t);if(!e){if(typeof o=="string")try{JSON.parse(o),e={type:"json"}}catch{e={type:"csv",parse:"auto"}}typeof o=="object"&&(e={type:"json"})}let u=(e==null?void 0:e.type)==="csv";u&&typeof o=="string"&&(o=lr(o)),u&&typeof o=="string"&&i&&(o=or(o));let d=(e==null?void 0:e.parse)||"auto";return typeof d=="object"&&(d=fe.mapValues(d,c=>c==="time"?"string":c==="datetime"?"date":c)),a=s.map(c=>c()),u?st(o,{...e,parse:d}):st(o,e)}finally{a.forEach(o=>o())}}function ar(t,e=!0){let n=[Qt];e&&n.push(Kt);let r=n.map(s=>s()),i=st(t,{type:"csv",parse:"auto"});return r.forEach(s=>s()),i}function lr(t){return t!=null&&t.includes(",")?ee(t,e=>{let n=new Set;return e.map(r=>{let i=cr(r,n);return n.add(i),i})}):t}function or(t){return t!=null&&t.includes(".")?ee(t,e=>e.map(n=>n.replaceAll(".","\u2024"))):t}function ee(t,e){let n=t.split(`
1
+ var ce=Object.defineProperty;var de=(t,e,n)=>e in t?ce(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n;var A=(t,e,n)=>de(t,typeof e!="symbol"?e+"":e,n);var at,lt,ot,ut,ct;import{C as he,S as fe}from"./_Uint8Array-C0aUZfE0.js";import{c as yt,m as ye}from"./useEventListener-BGihH8bs.js";import{St as pt,a as pe,c as ge,gt as me,o as ve,wt as be}from"./vega-loader.browser-CZV6_g2i.js";var xe="[object Number]";function we(t){return typeof t=="number"||fe(t)&&he(t)==xe}var Ie=we;const gt=Uint8Array.of(65,82,82,79,87,49),$={V1:0,V2:1,V3:2,V4:3,V5:4},D={NONE:0,Schema:1,DictionaryBatch:2,RecordBatch:3,Tensor:4,SparseTensor:5},l={Dictionary:-1,NONE:0,Null:1,Int:2,Float:3,Binary:4,Utf8:5,Bool:6,Decimal:7,Date:8,Time:9,Timestamp:10,Interval:11,List:12,Struct:13,Union:14,FixedSizeBinary:15,FixedSizeList:16,Map:17,Duration:18,LargeBinary:19,LargeUtf8:20,LargeList:21,RunEndEncoded:22,BinaryView:23,Utf8View:24,ListView:25,LargeListView:26},mt={HALF:0,SINGLE:1,DOUBLE:2},z={DAY:0,MILLISECOND:1},m={SECOND:0,MILLISECOND:1,MICROSECOND:2,NANOSECOND:3},C={YEAR_MONTH:0,DAY_TIME:1,MONTH_DAY_NANO:2},W={Sparse:0,Dense:1},vt=Uint8Array,bt=Uint16Array,xt=Uint32Array,wt=BigUint64Array,It=Int8Array,Le=Int16Array,x=Int32Array,L=BigInt64Array,Ae=Float32Array,k=Float64Array;function Ne(t,e){let n=Math.log2(t)-3;return(e?[It,Le,x,L]:[vt,bt,xt,wt])[n]}Object.getPrototypeOf(Int8Array);function X(t,e){let n=0,r=t.length;if(r<=2147483648)do{let i=n+r>>>1;t[i]<=e?n=i+1:r=i}while(n<r);else do{let i=Math.trunc((n+r)/2);t[i]<=e?n=i+1:r=i}while(n<r);return n}function J(t,e,n){if(e(t))return t;throw Error(n(t))}function w(t,e,n){return e=Array.isArray(e)?e:Object.values(e),J(t,r=>e.includes(r),n??(()=>`${t} must be one of ${e}`))}function Lt(t,e){for(let[n,r]of Object.entries(t))if(r===e)return n;return"<Unknown>"}const G=t=>`Unsupported data type: "${Lt(l,t)}" (id ${t})`,At=(t,e,n=!0,r=null)=>({name:t,type:e,nullable:n,metadata:r});function Nt(t){return Object.hasOwn(t,"name")&&Et(t.type)}function Et(t){return typeof(t==null?void 0:t.typeId)=="number"}function B(t,e="",n=!0){return Nt(t)?t:At(e,J(t,Et,()=>"Data type expected."),n)}const Ee=(t,e,n=!1,r=-1)=>({typeId:l.Dictionary,id:r,dictionary:t,indices:e||Dt(),ordered:n}),St=(t=32,e=!0)=>({typeId:l.Int,bitWidth:w(t,[8,16,32,64]),signed:e,values:Ne(t,e)}),Dt=()=>St(32),Se=(t=2)=>({typeId:l.Float,precision:w(t,mt),values:[bt,Ae,k][t]}),De=()=>({typeId:l.Binary,offsets:x}),Be=()=>({typeId:l.Utf8,offsets:x}),Oe=(t,e,n=128)=>({typeId:l.Decimal,precision:t,scale:e,bitWidth:w(n,[128,256]),values:wt}),Te=t=>({typeId:l.Date,unit:w(t,z),values:t===z.DAY?x:L}),Me=(t=m.MILLISECOND,e=32)=>({typeId:l.Time,unit:w(t,m),bitWidth:w(e,[32,64]),values:e===32?x:L}),Ce=(t=m.MILLISECOND,e=null)=>({typeId:l.Timestamp,unit:w(t,m),timezone:e,values:L}),Ue=(t=C.MONTH_DAY_NANO)=>({typeId:l.Interval,unit:w(t,C),values:t===C.MONTH_DAY_NANO?void 0:x}),Ve=t=>({typeId:l.List,children:[B(t)],offsets:x}),Fe=t=>({typeId:l.Struct,children:Array.isArray(t)&&Nt(t[0])?t:Object.entries(t).map(([e,n])=>At(e,n))}),Re=(t,e,n,r)=>(n??(n=e.map((i,s)=>s)),{typeId:l.Union,mode:w(t,W),typeIds:n,typeMap:n.reduce((i,s,a)=>(i[s]=a,i),{}),children:e.map((i,s)=>B(i,`_${s}`)),typeIdForValue:r,offsets:x}),$e=t=>({typeId:l.FixedSizeBinary,stride:t}),ze=(t,e)=>({typeId:l.FixedSizeList,stride:e,children:[B(t)]}),ke=(t,e)=>({typeId:l.Map,keysSorted:t,children:[e],offsets:x}),je=(t=m.MILLISECOND)=>({typeId:l.Duration,unit:w(t,m),values:L}),Ye=()=>({typeId:l.LargeBinary,offsets:L}),_e=()=>({typeId:l.LargeUtf8,offsets:L}),He=t=>({typeId:l.LargeList,children:[B(t)],offsets:L}),Pe=(t,e)=>({typeId:l.RunEndEncoded,children:[J(B(t,"run_ends"),n=>n.type.typeId===l.Int,()=>"Run-ends must have an integer type."),B(e,"values")]}),We=t=>({typeId:l.ListView,children:[B(t,"value")],offsets:x}),Xe=t=>({typeId:l.LargeListView,children:[B(t,"value")],offsets:L});var j=new k(2).buffer;new L(j),new xt(j),new x(j),new vt(j);function O(t){if(t>2**53-1||t<-(2**53-1))throw Error(`BigInt exceeds integer number representation: ${t}`);return Number(t)}function Z(t,e){return Number(t/e)+Number(t%e)/Number(e)}var U=t=>BigInt.asUintN(64,t);function Je(t,e){let n=e<<1,r;return BigInt.asIntN(64,t[n+1])<0?(r=U(~t[n])|U(~t[n+1])<<64n,r=-(r+1n)):r=t[n]|t[n+1]<<64n,r}function Ge(t,e){let n=e<<2,r;return BigInt.asIntN(64,t[n+3])<0?(r=U(~t[n])|U(~t[n+1])<<64n|U(~t[n+2])<<128n|U(~t[n+3])<<192n,r=-(r+1n)):r=t[n]|t[n+1]<<64n|t[n+2]<<128n|t[n+3]<<192n,r}var Ze=new TextDecoder("utf-8");new TextEncoder;function Y(t){return Ze.decode(t)}function Bt(t,e){return(t[e>>3]&1<<e%8)!=0}function N(t,e){let n=e+h(t,e),r=n-h(t,n),i=v(t,r);return(s,a,o=null)=>{if(s<i){let u=v(t,r+s);if(u)return a(t,n+u)}return o}}function M(t,e){return e}function F(t,e){return!!qe(t,e)}function qe(t,e){return q(t,e)<<24>>24}function q(t,e){return t[e]}function v(t,e){return Ke(t,e)<<16>>16}function Ke(t,e){return t[e]|t[e+1]<<8}function h(t,e){return t[e]|t[e+1]<<8|t[e+2]<<16|t[e+3]<<24}function Ot(t,e){return h(t,e)>>>0}function b(t,e){return O(BigInt.asIntN(64,BigInt(Ot(t,e))+(BigInt(Ot(t,e+4))<<32n)))}function _(t,e){let n=e+h(t,e),r=h(t,n);return n+=4,Y(t.subarray(n,n+r))}function T(t,e,n,r){if(!e)return[];let i=e+h(t,e);return Array.from({length:h(t,i)},(s,a)=>r(t,i+4+a*n))}const K=Symbol("rowIndex");function Q(t,e){class n{constructor(s){this[K]=s}toJSON(){return Mt(t,e,this[K])}}let r=n.prototype;for(let i=0;i<t.length;++i){if(Object.hasOwn(r,t[i]))continue;let s=e[i];Object.defineProperty(r,t[i],{get(){return s.at(this[K])},enumerable:!0})}return i=>new n(i)}function Tt(t,e){return n=>Mt(t,e,n)}function Mt(t,e,n){let r={};for(let i=0;i<t.length;++i)r[t[i]]=e[i].at(n);return r}function Qe(t){return t instanceof P}var H=(at=class{constructor({length:t,nullCount:e,type:n,validity:r,values:i,offsets:s,sizes:a,children:o}){this.length=t,this.nullCount=e,this.type=n,this.validity=r,this.values=i,this.offsets=s,this.sizes=a,this.children=o,(!e||!this.validity)&&(this.at=u=>this.value(u))}get[Symbol.toStringTag](){return"Batch"}at(t){return this.isValid(t)?this.value(t):null}isValid(t){return Bt(this.validity,t)}value(t){return this.values[t]}slice(t,e){let n=e-t,r=Array(n);for(let i=0;i<n;++i)r[i]=this.at(t+i);return r}*[Symbol.iterator](){for(let t=0;t<this.length;++t)yield this.at(t)}},A(at,"ArrayType",null),at),P=class extends H{constructor(t){super(t);let{length:e,values:n}=this;this.values=n.subarray(0,e)}slice(t,e){return this.nullCount?super.slice(t,e):this.values.subarray(t,e)}[Symbol.iterator](){return this.nullCount?super[Symbol.iterator]():this.values[Symbol.iterator]()}},tt=(lt=class extends H{},A(lt,"ArrayType",k),lt),f=(ot=class extends H{},A(ot,"ArrayType",Array),ot),tn=class extends f{value(t){return null}},V=class extends tt{value(t){return O(this.values[t])}},en=class extends tt{value(t){let e=this.values[t],n=(e&31744)>>10,r=(e&1023)/1024,i=(-1)**((e&32768)>>15);switch(n){case 31:return i*(r?NaN:1/0);case 0:return i*(r?6103515625e-14*r:0)}return i*2**(n-15)*(1+r)}},nn=class extends f{value(t){return Bt(this.values,t)}},Ct=class extends H{constructor(t){super(t);let{bitWidth:e,scale:n}=this.type;this.decimal=e===128?Je:Ge,this.scale=10n**BigInt(n)}},rn=(ut=class extends Ct{value(t){return Z(this.decimal(this.values,t),this.scale)}},A(ut,"ArrayType",k),ut),sn=(ct=class extends Ct{value(t){return this.decimal(this.values,t)}},A(ct,"ArrayType",Array),ct),Ut=class extends f{constructor(t){super(t),this.source=t}value(t){return new Date(this.source.value(t))}},an=class extends tt{value(t){return 864e5*this.values[t]}};const ln=V;var on=class extends V{value(t){return super.value(t)*1e3}};const un=V;var cn=class extends V{value(t){return Z(this.values[t],1000n)}},dn=class extends V{value(t){return Z(this.values[t],1000000n)}},hn=class extends f{value(t){return this.values.subarray(t<<1,t+1<<1)}},fn=class extends f{value(t){let e=this.values,n=t<<4;return Float64Array.of(h(e,n),h(e,n+4),b(e,n+8))}},Vt=({values:t,offsets:e},n)=>t.subarray(e[n],e[n+1]),Ft=({values:t,offsets:e},n)=>t.subarray(O(e[n]),O(e[n+1])),yn=class extends f{value(t){return Vt(this,t)}},pn=class extends f{value(t){return Ft(this,t)}},gn=class extends f{value(t){return Y(Vt(this,t))}},mn=class extends f{value(t){return Y(Ft(this,t))}},vn=class extends f{value(t){let e=this.offsets;return this.children[0].slice(e[t],e[t+1])}},bn=class extends f{value(t){let e=this.offsets;return this.children[0].slice(O(e[t]),O(e[t+1]))}},xn=class extends f{value(t){let e=this.offsets[t],n=e+this.sizes[t];return this.children[0].slice(e,n)}},wn=class extends f{value(t){let e=this.offsets[t],n=e+this.sizes[t];return this.children[0].slice(O(e),O(n))}},Rt=class extends f{constructor(t){super(t),this.stride=this.type.stride}},In=class extends Rt{value(t){let{stride:e,values:n}=this;return n.subarray(t*e,(t+1)*e)}},Ln=class extends Rt{value(t){let{children:e,stride:n}=this;return e[0].slice(t*n,(t+1)*n)}};function $t({children:t,offsets:e},n){let[r,i]=t[0].children,s=e[n],a=e[n+1],o=[];for(let u=s;u<a;++u)o.push([r.at(u),i.at(u)]);return o}var An=class extends f{value(t){return $t(this,t)}},Nn=class extends f{value(t){return new Map($t(this,t))}},zt=class extends f{constructor({typeIds:t,...e}){super(e),this.typeIds=t,this.typeMap=this.type.typeMap}value(t,e=t){let{typeIds:n,children:r,typeMap:i}=this;return r[i[n[t]]].at(e)}},En=class extends zt{value(t){return super.value(t,this.offsets[t])}},kt=class extends f{constructor(t,e=Tt){super(t),this.names=this.type.children.map(n=>n.name),this.factory=e(this.names,this.children)}value(t){return this.factory(t)}},Sn=class extends kt{constructor(t){super(t,Q)}},Dn=class extends f{value(t){let[{values:e},n]=this.children;return n.at(X(e,t))}},Bn=class extends f{setDictionary(t){return this.dictionary=t,this.cache=t.cache(),this}value(t){return this.cache[this.key(t)]}key(t){return this.values[t]}},jt=class extends f{constructor({data:t,...e}){super(e),this.data=t}view(t){let{values:e,data:n}=this,r=t<<4,i=r+4,s=e,a=h(s,r);return a>12&&(i=h(s,r+12),s=n[h(s,r+8)]),s.subarray(i,i+a)}},On=class extends jt{value(t){return this.view(t)}},Tn=class extends jt{value(t){return Y(this.view(t))}};function Yt(t){let e=[];return{add(n){return e.push(n),this},clear:()=>e=[],done:()=>new Mn(e,t)}}var Mn=class{constructor(t,e=(n=>(n=t[0])==null?void 0:n.type)()){this.type=e,this.length=t.reduce((s,a)=>s+a.length,0),this.nullCount=t.reduce((s,a)=>s+a.nullCount,0),this.data=t;let r=t.length,i=new Int32Array(r+1);if(r===1){let[s]=t;i[1]=s.length,this.at=a=>s.at(a)}else for(let s=0,a=0;s<r;++s)i[s+1]=a+=t[s].length;this.offsets=i}get[Symbol.toStringTag](){return"Column"}[Symbol.iterator](){let t=this.data;return t.length===1?t[0][Symbol.iterator]():Cn(t)}at(t){var i;let{data:e,offsets:n}=this,r=X(n,t)-1;return(i=e[r])==null?void 0:i.at(t-n[r])}get(t){return this.at(t)}toArray(){let{length:t,nullCount:e,data:n}=this,r=!e&&Qe(n[0]),i=n.length;if(r&&i===1)return n[0].values;let s=new(!i||e>0?Array:n[0].constructor.ArrayType??n[0].values.constructor)(t);return r?Un(s,n):Vn(s,n)}cache(){return this._cache??(this._cache=this.toArray())}};function*Cn(t){for(let e=0;e<t.length;++e){let n=t[e][Symbol.iterator]();for(let r=n.next();!r.done;r=n.next())yield r.value}}function Un(t,e){for(let n=0,r=0;n<e.length;++n){let{values:i}=e[n];t.set(i,r),r+=i.length}return t}function Vn(t,e){let n=-1;for(let r=0;r<e.length;++r){let i=e[r];for(let s=0;s<i.length;++s)t[++n]=i.at(s)}return t}var Fn=class oe{constructor(e,n,r=!1){let i=e.fields.map(a=>a.name);this.schema=e,this.names=i,this.children=n,this.factory=r?Q:Tt;let s=[];this.getFactory=a=>s[a]??(s[a]=this.factory(i,n.map(o=>o.data[a])))}get[Symbol.toStringTag](){return"Table"}get numCols(){return this.names.length}get numRows(){var e;return((e=this.children[0])==null?void 0:e.length)??0}getChildAt(e){return this.children[e]}getChild(e){let n=this.names.findIndex(r=>r===e);return n>-1?this.children[n]:void 0}selectAt(e,n=[]){let{children:r,factory:i,schema:s}=this,{fields:a}=s;return new oe({...s,fields:e.map((o,u)=>Rn(a[o],n[u]))},e.map(o=>r[o]),i===Q)}select(e,n){let r=this.names,i=e.map(s=>r.indexOf(s));return this.selectAt(i,n)}toColumns(){let{children:e,names:n}=this,r={};return n.forEach((i,s)=>{var a;return r[i]=((a=e[s])==null?void 0:a.toArray())??[]}),r}toArray(){var a;let{children:e,getFactory:n,numRows:r}=this,i=((a=e[0])==null?void 0:a.data)??[],s=Array(r);for(let o=0,u=-1;o<i.length;++o){let d=n(o);for(let c=0;c<i[o].length;++c)s[++u]=d(c)}return s}*[Symbol.iterator](){var i;let{children:e,getFactory:n}=this,r=((i=e[0])==null?void 0:i.data)??[];for(let s=0;s<r.length;++s){let a=n(s);for(let o=0;o<r[s].length;++o)yield a(o)}}at(e){let{children:n,getFactory:r,numRows:i}=this;if(e<0||e>=i)return null;let[{offsets:s}]=n,a=X(s,e)-1;return r(a)(e-s[a])}get(e){return this.at(e)}};function Rn(t,e){return e!=null&&e!==t.name?{...t,name:e}:t}function $n(t,e={}){let{typeId:n,bitWidth:r,precision:i,unit:s}=t,{useBigInt:a,useDate:o,useDecimalBigInt:u,useMap:d,useProxy:c}=e;switch(n){case l.Null:return tn;case l.Bool:return nn;case l.Int:case l.Time:case l.Duration:return a||r<64?P:V;case l.Float:return i?P:en;case l.Date:return _t(s===z.DAY?an:ln,o&&Ut);case l.Timestamp:return _t(s===m.SECOND?on:s===m.MILLISECOND?un:s===m.MICROSECOND?cn:dn,o&&Ut);case l.Decimal:return u?sn:rn;case l.Interval:return s===C.DAY_TIME?hn:s===C.YEAR_MONTH?P:fn;case l.FixedSizeBinary:return In;case l.Utf8:return gn;case l.LargeUtf8:return mn;case l.Binary:return yn;case l.LargeBinary:return pn;case l.BinaryView:return On;case l.Utf8View:return Tn;case l.List:return vn;case l.LargeList:return bn;case l.Map:return d?Nn:An;case l.ListView:return xn;case l.LargeListView:return wn;case l.FixedSizeList:return Ln;case l.Struct:return c?Sn:kt;case l.RunEndEncoded:return Dn;case l.Dictionary:return Bn;case l.Union:return t.mode?En:zt}throw Error(G(n))}function _t(t,e){return e?class extends e{constructor(n){super(new t(n))}}:t}function zn(t,e){return{offset:b(t,e),metadataLength:h(t,e+8),bodyLength:b(t,e+16)}}function Ht(t,e){return T(t,e,24,zn)}function Pt(t,e,n){let r=N(t,e);if(r(10,M,0))throw Error("Record batch compression not implemented");let i=n<$.V4?8:0;return{length:r(4,b,0),nodes:T(t,r(6,M),16,(s,a)=>({length:b(s,a),nullCount:b(s,a+8)})),regions:T(t,r(8,M),16+i,(s,a)=>({offset:b(s,a+i),length:b(s,a+i+8)})),variadic:T(t,r(12,M),8,b)}}function kn(t,e,n){let r=N(t,e);return{id:r(4,b,0),data:r(6,(i,s)=>Pt(i,s,n)),isDelta:r(8,F,!1)}}function Wt(t,e,n,r){w(n,l,G);let i=N(t,e);switch(n){case l.Binary:return De();case l.Utf8:return Be();case l.LargeBinary:return Ye();case l.LargeUtf8:return _e();case l.List:return Ve(r[0]);case l.ListView:return We(r[0]);case l.LargeList:return He(r[0]);case l.LargeListView:return Xe(r[0]);case l.Struct:return Fe(r);case l.RunEndEncoded:return Pe(r[0],r[1]);case l.Int:return St(i(4,h,0),i(6,F,!1));case l.Float:return Se(i(4,v,mt.HALF));case l.Decimal:return Oe(i(4,h,0),i(6,h,0),i(8,h,128));case l.Date:return Te(i(4,v,z.MILLISECOND));case l.Time:return Me(i(4,v,m.MILLISECOND),i(6,h,32));case l.Timestamp:return Ce(i(4,v,m.SECOND),i(6,_));case l.Interval:return Ue(i(4,v,C.YEAR_MONTH));case l.Duration:return je(i(4,v,m.MILLISECOND));case l.FixedSizeBinary:return $e(i(4,h,0));case l.FixedSizeList:return ze(r[0],i(4,h,0));case l.Map:return ke(i(4,F,!1),r[0]);case l.Union:return Re(i(4,v,W.Sparse),r,T(t,i(6,M),4,h))}return{typeId:n}}function et(t,e){let n=T(t,e,4,(r,i)=>{let s=N(r,i);return[s(4,_),s(6,_)]});return n.length?new Map(n):null}function Xt(t,e,n){let r=N(t,e);return{version:n,endianness:r(4,v,0),fields:r(6,jn,[]),metadata:r(8,et)}}function jn(t,e){return T(t,e,4,Jt)}function Jt(t,e){let n=N(t,e),r=n(8,q,l.NONE),i=n(10,M,0),s=n(12,_n),a=Wt(t,i,r,n(14,(o,u)=>Yn(o,u)));return s&&(s.dictionary=a,a=s),{name:n(4,_),type:a,nullable:n(6,F,!1),metadata:n(16,et)}}function Yn(t,e){let n=T(t,e,4,Jt);return n.length?n:null}function _n(t,e){if(!e)return null;let n=N(t,e);return Ee(null,n(6,Hn,Dt()),n(8,F,!1),n(4,b,0))}function Hn(t,e){return Wt(t,e,l.Int)}var Pn=(t,e)=>`Expected to read ${t} metadata bytes, but only read ${e}.`,Wn=(t,e)=>`Expected to read ${t} bytes for message body, but only read ${e}.`,Xn=t=>`Unsupported message type: ${t} (${Lt(D,t)})`;function nt(t,e){let n=h(t,e)||0;if(e+=4,n===-1&&(n=h(t,e)||0,e+=4),n===0)return null;let r=t.subarray(e,e+=n);if(r.byteLength<n)throw Error(Pn(n,r.byteLength));let i=N(r,0),s=i(4,v,$.V1),a=i(6,q,D.NONE),o=i(8,M,0),u=i(10,b,0),d;if(o){let c=a===D.Schema?Xt:a===D.DictionaryBatch?kn:a===D.RecordBatch?Pt:null;if(!c)throw Error(Xn(a));if(d=c(r,o,s),u>0){let g=t.subarray(e,e+=u);if(g.byteLength<u)throw Error(Wn(u,g.byteLength));d.body=g}}return{version:s,type:a,index:e,content:d}}function Jn(t){let e=t instanceof ArrayBuffer?new Uint8Array(t):t;return e instanceof Uint8Array&&Gn(e)?qn(e):Zn(e)}function Gn(t){if(!t||t.length<4)return!1;for(let e=0;e<6;++e)if(gt[e]!==t[e])return!1;return!0}function Zn(t){let e=[t].flat(),n,r=[],i=[];for(let s of e){if(!(s instanceof Uint8Array))throw Error("IPC data batch was not a Uint8Array.");let a=0;for(;;){let o=nt(s,a);if(o===null)break;if(a=o.index,o.content)switch(o.type){case D.Schema:n||(n=o.content);break;case D.RecordBatch:r.push(o.content);break;case D.DictionaryBatch:i.push(o.content);break}}}return{schema:n,dictionaries:i,records:r,metadata:null}}function qn(t){let e=t.byteLength-(gt.length+4),n=N(t,e-h(t,e)),r=n(4,v,$.V1),i=n(8,Ht,[]),s=n(10,Ht,[]);return{schema:n(6,(a,o)=>Xt(a,o,r)),dictionaries:i.map(({offset:a})=>nt(t,a).content),records:s.map(({offset:a})=>nt(t,a).content),metadata:n(12,et)}}function rt(t,e){return Kn(Jn(t),e)}function Kn(t,e={}){let{schema:n={fields:[]},dictionaries:r,records:i}=t,{version:s,fields:a}=n,o=new Map,u=tr(e,s,o),d=new Map;Qn(n,y=>{let p=y.type;p.typeId===l.Dictionary&&d.set(p.id,p.dictionary)});let c=new Map;for(let y of r){let{id:p,data:E,isDelta:S,body:ue}=y,dt=d.get(p),ht=it(dt,u({...E,body:ue}));if(c.has(p)){let ft=c.get(p);S||ft.clear(),ft.add(ht)}else{if(S)throw Error("Delta update can not be first dictionary batch.");c.set(p,Yt(dt).add(ht))}}c.forEach((y,p)=>o.set(p,y.done()));let g=a.map(y=>Yt(y.type));for(let y of i){let p=u(y);a.forEach((E,S)=>g[S].add(it(E.type,p)))}return new Fn(n,g.map(y=>y.done()),e.useProxy)}function Qn(t,e){t.fields.forEach(function n(r){var i,s,a;e(r),(s=(i=r.type.dictionary)==null?void 0:i.children)==null||s.forEach(n),(a=r.type.children)==null||a.forEach(n)})}function tr(t,e,n){let r={version:e,options:t,dictionary:i=>n.get(i)};return i=>{let{length:s,nodes:a,regions:o,variadic:u,body:d}=i,c=-1,g=-1,y=-1;return{...r,length:s,node:()=>a[++c],buffer:p=>{let{length:E,offset:S}=o[++g];return p?new p(d.buffer,d.byteOffset+S,E/p.BYTES_PER_ELEMENT):d.subarray(S,S+E)},variadic:()=>u[++y],visit(p){return p.map(E=>it(E.type,this))}}}}function it(t,e){let{typeId:n}=t,{length:r,options:i,node:s,buffer:a,variadic:o,version:u}=e,d=$n(t,i);if(n===l.Null)return new d({length:r,nullCount:r,type:t});let c={...s(),type:t};switch(n){case l.Bool:case l.Int:case l.Time:case l.Duration:case l.Float:case l.Decimal:case l.Date:case l.Timestamp:case l.Interval:case l.FixedSizeBinary:return new d({...c,validity:a(),values:a(t.values)});case l.Utf8:case l.LargeUtf8:case l.Binary:case l.LargeBinary:return new d({...c,validity:a(),offsets:a(t.offsets),values:a()});case l.BinaryView:case l.Utf8View:return new d({...c,validity:a(),values:a(),data:Array.from({length:o()},()=>a())});case l.List:case l.LargeList:case l.Map:return new d({...c,validity:a(),offsets:a(t.offsets),children:e.visit(t.children)});case l.ListView:case l.LargeListView:return new d({...c,validity:a(),offsets:a(t.offsets),sizes:a(t.offsets),children:e.visit(t.children)});case l.FixedSizeList:case l.Struct:return new d({...c,validity:a(),children:e.visit(t.children)});case l.RunEndEncoded:return new d({...c,children:e.visit(t.children)});case l.Dictionary:{let{id:g,indices:y}=t;return new d({...c,validity:a(),values:a(y.values)}).setDictionary(e.dictionary(g))}case l.Union:return u<$.V5&&a(),new d({...c,typeIds:a(It),offsets:t.mode===W.Sparse?null:a(t.offsets),children:e.visit(t.children)});default:throw Error(G(n))}}new Uint16Array(new Uint8Array([1,0]).buffer)[0];function R(t,e){let n=new Map;return(...r)=>{let i=e(...r);if(n.has(i))return n.get(i);let s=t(...r).finally(()=>{n.delete(i)});return n.set(i,s),s}}function st(t,e){return ve(t,e)}function er(){return pe()}const I=ge;function Gt(){let t=nr(er()),e=n=>JSON.stringify(n);return{load:R(t.load.bind(t),e),sanitize:R(t.sanitize.bind(t),e),http:R(t.http.bind(t),e),file:R(t.file.bind(t),e)}}function nr(t){return{...t,async load(e,n){return e.endsWith(".arrow")?rt(await Zt(e),{useProxy:!1}).toArray():t.load(e,n)}}}const Zt=R(t=>fetch(t).then(e=>e.arrayBuffer()),t=>t);var qt=I.integer,Kt=I.number,rr=I.date,ir=I.boolean,Qt=()=>(I.integer=t=>{if(t==="")return"";if(t==="-inf"||t==="inf")return t;function e(r){let i=qt(r);return Number.isNaN(i)?r:i}let n=Number.parseInt(t,10);if(Ie(n)){if(!(Math.abs(n)>2**53-1))return e(t);try{return BigInt(t)}catch{return e(t)}}else return""},I.number=t=>{if(t==="-inf"||t==="inf")return t;let e=Kt(t);return Number.isNaN(e)?t:e},()=>{I.integer=qt,I.number=Kt}),te=()=>(I.date=t=>{if(t==="")return"";if(t==null)return null;if(!/^\d{4}-\d{2}-\d{2}(T[\d.:]+(Z|[+-]\d{2}:?\d{2})?)?$/.test(t))return t;try{let e=new Date(t);return Number.isNaN(e.getTime())?t:e}catch{return ye.warn(`Failed to parse date: ${t}`),t}},()=>{I.date=rr});I.boolean=t=>t==="True"?!0:t==="False"?!1:ir(t);const ee=Gt();async function sr(t,e,n={}){let{handleBigIntAndNumberLike:r=!1,replacePeriod:i=!1}=n;if(t.endsWith(".arrow")||(e==null?void 0:e.type)==="arrow")return rt(await Zt(t),{useProxy:!0,useDate:!0,useBigInt:r}).toArray();let s=[te];r&&s.push(Qt);let a=[];try{let o=await ee.load(t);if(!e){if(typeof o=="string")try{JSON.parse(o),e={type:"json"}}catch{e={type:"csv",parse:"auto"}}typeof o=="object"&&(e={type:"json"})}let u=(e==null?void 0:e.type)==="csv";u&&typeof o=="string"&&(o=lr(o)),u&&typeof o=="string"&&i&&(o=or(o));let d=(e==null?void 0:e.parse)||"auto";return typeof d=="object"&&(d=yt.mapValues(d,c=>c==="time"?"string":c==="datetime"?"date":c)),a=s.map(c=>c()),u?st(o,{...e,parse:d}):st(o,e)}finally{a.forEach(o=>o())}}function ar(t,e=!0){let n=[te];e&&n.push(Qt);let r=n.map(s=>s()),i=st(t,{type:"csv",parse:"auto"});return r.forEach(s=>s()),i}function lr(t){return t!=null&&t.includes(",")?ne(t,e=>{let n=new Set;return e.map(r=>{let i=cr(r,n);return n.add(i),i})}):t}function or(t){return t!=null&&t.includes(".")?ne(t,e=>e.map(n=>n.replaceAll(".","\u2024"))):t}function ne(t,e){let n=t.split(`
2
2
  `);return n[0]=e(n[0].split(",")).join(","),n.join(`
3
- `)}var ur="\u200B";function cr(t,e){let n=t,r=1;for(;e.has(n);)n=`${t}${ur.repeat(r)}`,r++;return n}var dr={version:"1.1.0"};function hr(t,e,n,r){if(me(t))return`[${t.map(i=>e(be(i)?i:ne(i,n))).join(", ")}]`;if(yt(t)){let i="",{title:s,image:a,...o}=t;s&&(i+=`<h2>${e(s)}</h2>`),a&&(i+=`<img src="${new URL(e(a),r||location.href).href}">`);let u=Object.keys(o);if(u.length>0){i+="<table>";for(let d of u){let c=o[d];c!==void 0&&(yt(c)&&(c=ne(c,n)),i+=`<tr><td class="key">${e(d)}</td><td class="value">${e(c)}</td></tr>`)}i+="</table>"}return i||"{}"}return e(t)}function fr(t){let e=[];return function(n,r){return typeof r!="object"||!r?r:(e.length=e.indexOf(this)+1,e.length>t?"[Object]":e.indexOf(r)>=0?"[Circular]":(e.push(r),r))}}function ne(t,e){return JSON.stringify(t,fr(e))}var yr=`#vg-tooltip-element {
3
+ `)}var ur="\u200B";function cr(t,e){let n=t,r=1;for(;e.has(n);)n=`${t}${ur.repeat(r)}`,r++;return n}var dr={version:"1.1.0"};function hr(t,e,n,r){if(me(t))return`[${t.map(i=>e(be(i)?i:re(i,n))).join(", ")}]`;if(pt(t)){let i="",{title:s,image:a,...o}=t;s&&(i+=`<h2>${e(s)}</h2>`),a&&(i+=`<img src="${new URL(e(a),r||location.href).href}">`);let u=Object.keys(o);if(u.length>0){i+="<table>";for(let d of u){let c=o[d];c!==void 0&&(pt(c)&&(c=re(c,n)),i+=`<tr><td class="key">${e(d)}</td><td class="value">${e(c)}</td></tr>`)}i+="</table>"}return i||"{}"}return e(t)}function fr(t){let e=[];return function(n,r){return typeof r!="object"||!r?r:(e.length=e.indexOf(this)+1,e.length>t?"[Object]":e.indexOf(r)>=0?"[Circular]":(e.push(r),r))}}function re(t,e){return JSON.stringify(t,fr(e))}var yr=`#vg-tooltip-element {
4
4
  visibility: hidden;
5
5
  padding: 8px;
6
6
  position: fixed;
@@ -58,4 +58,4 @@ var ue=Object.defineProperty;var ce=(t,e,n)=>e in t?ue(t,e,{enumerable:!0,config
58
58
  #vg-tooltip-element.dark-theme td.key {
59
59
  color: #bfbfbf;
60
60
  }
61
- `,re="vg-tooltip-element",pr={offsetX:10,offsetY:10,id:re,styleId:"vega-tooltip-style",theme:"light",disableDefaultStyle:!1,sanitize:gr,maxDepth:2,formatTooltip:hr,baseURL:"",anchor:"cursor",position:["top","bottom","left","right","top-left","top-right","bottom-left","bottom-right"]};function gr(t){return String(t).replace(/&/g,"&amp;").replace(/</g,"&lt;")}function mr(t){if(!/^[A-Za-z]+[-:.\w]*$/.test(t))throw Error("Invalid HTML ID");return yr.toString().replaceAll(re,t)}function ie(t,e,{offsetX:n,offsetY:r}){let i=se({x1:t.clientX,x2:t.clientX,y1:t.clientY,y2:t.clientY},e,n,r);for(let s of["bottom-right","bottom-left","top-right","top-left"])if(ae(i[s],e))return i[s];return i["top-left"]}function vr(t,e,n,r,i){let{position:s,offsetX:a,offsetY:o}=i,u=t._el.getBoundingClientRect(),d=t._origin,c=se(br(u,d,n),r,a,o),g=Array.isArray(s)?s:[s];for(let y of g)if(ae(c[y],r)&&!xr(e,c[y],r))return c[y];return ie(e,r,i)}function br(t,e,n){let r=n.isVoronoi?n.datum.bounds:n.bounds,i=t.left+e[0]+r.x1,s=t.top+e[1]+r.y1,a=n;for(;a.mark.group;)a=a.mark.group,i+=a.x??0,s+=a.y??0;let o=r.x2-r.x1,u=r.y2-r.y1;return{x1:i,x2:i+o,y1:s,y2:s+u}}function se(t,e,n,r){let i=(t.x1+t.x2)/2,s=(t.y1+t.y2)/2,a=t.x1-e.width-n,o=i-e.width/2,u=t.x2+n,d=t.y1-e.height-r,c=s-e.height/2,g=t.y2+r;return{top:{x:o,y:d},bottom:{x:o,y:g},left:{x:a,y:c},right:{x:u,y:c},"top-left":{x:a,y:d},"top-right":{x:u,y:d},"bottom-left":{x:a,y:g},"bottom-right":{x:u,y:g}}}function ae(t,e){return t.x>=0&&t.y>=0&&t.x+e.width<=window.innerWidth&&t.y+e.height<=window.innerHeight}function xr(t,e,n){return t.clientX>=e.x&&t.clientX<=e.x+n.width&&t.clientY>=e.y&&t.clientY<=e.y+n.height}var wr=class{constructor(t){A(this,"call");A(this,"options");A(this,"el");this.options={...pr,...t};let e=this.options.id;if(this.el=null,this.call=this.tooltipHandler.bind(this),!this.options.disableDefaultStyle&&!document.getElementById(this.options.styleId)){let n=document.createElement("style");n.setAttribute("id",this.options.styleId),n.innerHTML=mr(e);let r=document.head;r.childNodes.length>0?r.insertBefore(n,r.childNodes[0]):r.appendChild(n)}}tooltipHandler(t,e,n,r){if(this.el=document.getElementById(this.options.id),this.el||(this.el=document.createElement("div"),this.el.setAttribute("id",this.options.id),this.el.classList.add("vg-tooltip"),(document.fullscreenElement??document.body).appendChild(this.el)),r==null||r===""){this.el.classList.remove("visible",`${this.options.theme}-theme`);return}this.el.innerHTML=this.options.formatTooltip(r,this.options.sanitize,this.options.maxDepth,this.options.baseURL),this.el.classList.add("visible",`${this.options.theme}-theme`);let{x:i,y:s}=this.options.anchor==="mark"?vr(t,e,n,this.el.getBoundingClientRect(),this.options):ie(e,this.el.getBoundingClientRect(),this.options);this.el.style.top=`${s}px`,this.el.style.left=`${i}px`}};dr.version;const Ir=new wr;export{Jt as a,te as i,ar as n,rt as o,sr as r,Ir as t};
61
+ `,ie="vg-tooltip-element",pr={offsetX:10,offsetY:10,id:ie,styleId:"vega-tooltip-style",theme:"light",disableDefaultStyle:!1,sanitize:gr,maxDepth:2,formatTooltip:hr,baseURL:"",anchor:"cursor",position:["top","bottom","left","right","top-left","top-right","bottom-left","bottom-right"]};function gr(t){return String(t).replace(/&/g,"&amp;").replace(/</g,"&lt;")}function mr(t){if(!/^[A-Za-z]+[-:.\w]*$/.test(t))throw Error("Invalid HTML ID");return yr.toString().replaceAll(ie,t)}function se(t,e,{offsetX:n,offsetY:r}){let i=ae({x1:t.clientX,x2:t.clientX,y1:t.clientY,y2:t.clientY},e,n,r);for(let s of["bottom-right","bottom-left","top-right","top-left"])if(le(i[s],e))return i[s];return i["top-left"]}function vr(t,e,n,r,i){let{position:s,offsetX:a,offsetY:o}=i,u=t._el.getBoundingClientRect(),d=t._origin,c=ae(br(u,d,n),r,a,o),g=Array.isArray(s)?s:[s];for(let y of g)if(le(c[y],r)&&!xr(e,c[y],r))return c[y];return se(e,r,i)}function br(t,e,n){let r=n.isVoronoi?n.datum.bounds:n.bounds,i=t.left+e[0]+r.x1,s=t.top+e[1]+r.y1,a=n;for(;a.mark.group;)a=a.mark.group,i+=a.x??0,s+=a.y??0;let o=r.x2-r.x1,u=r.y2-r.y1;return{x1:i,x2:i+o,y1:s,y2:s+u}}function ae(t,e,n,r){let i=(t.x1+t.x2)/2,s=(t.y1+t.y2)/2,a=t.x1-e.width-n,o=i-e.width/2,u=t.x2+n,d=t.y1-e.height-r,c=s-e.height/2,g=t.y2+r;return{top:{x:o,y:d},bottom:{x:o,y:g},left:{x:a,y:c},right:{x:u,y:c},"top-left":{x:a,y:d},"top-right":{x:u,y:d},"bottom-left":{x:a,y:g},"bottom-right":{x:u,y:g}}}function le(t,e){return t.x>=0&&t.y>=0&&t.x+e.width<=window.innerWidth&&t.y+e.height<=window.innerHeight}function xr(t,e,n){return t.clientX>=e.x&&t.clientX<=e.x+n.width&&t.clientY>=e.y&&t.clientY<=e.y+n.height}var wr=class{constructor(t){A(this,"call");A(this,"options");A(this,"el");this.options={...pr,...t};let e=this.options.id;if(this.el=null,this.call=this.tooltipHandler.bind(this),!this.options.disableDefaultStyle&&!document.getElementById(this.options.styleId)){let n=document.createElement("style");n.setAttribute("id",this.options.styleId),n.innerHTML=mr(e);let r=document.head;r.childNodes.length>0?r.insertBefore(n,r.childNodes[0]):r.appendChild(n)}}tooltipHandler(t,e,n,r){if(this.el=document.getElementById(this.options.id),this.el||(this.el=document.createElement("div"),this.el.setAttribute("id",this.options.id),this.el.classList.add("vg-tooltip"),(document.fullscreenElement??document.body).appendChild(this.el)),r==null||r===""){this.el.classList.remove("visible",`${this.options.theme}-theme`);return}this.el.innerHTML=this.options.formatTooltip(r,this.options.sanitize,this.options.maxDepth,this.options.baseURL),this.el.classList.add("visible",`${this.options.theme}-theme`);let{x:i,y:s}=this.options.anchor==="mark"?vr(t,e,n,this.el.getBoundingClientRect(),this.options):se(e,this.el.getBoundingClientRect(),this.options);this.el.style.top=`${s}px`,this.el.style.left=`${i}px`}};dr.version;const Ir=new wr;function Lr(t){if(typeof t=="object"&&t&&"width"in t)return t.width}function Ar(t){return!t||Object.keys(t).length===0?"auto":yt.mapValues(t,e=>e==="date"||e==="time"?"string":e==="datetime"?"date":e)}export{sr as a,rt as c,ar as i,Ar as n,ee as o,Ir as r,Gt as s,Lr as t};
@@ -0,0 +1 @@
1
+ import{s as z}from"./chunk-LvLJmgfZ.js";import{n as C}from"./useEvent-O0nX5vok.js";import{t as Y}from"./react-Bj1aDYRI.js";import"./react-dom-CSu739Rf.js";import{t as tt}from"./compiler-runtime-B3qBwwSJ.js";import{t as et}from"./debounce-DS_VtWMt.js";import{a as nt,r as rt,t as at}from"./utils-BuPoTKhl.js";import{t as N}from"./uniq-fnEfqrGj.js";import{c as T,m as _}from"./useEventListener-BGihH8bs.js";import{n as V}from"./config-DeEqZTX7.js";import{t as it}from"./jsx-runtime-icT_Ltz2.js";import{r as ot}from"./button-BZAv3veu.js";import{t as lt}from"./cn-BoaCR37F.js";import{u as ct}from"./toDate-BqKH-Jd9.js";import"./session-CXChHxAw.js";import{r as st}from"./useTheme-CM9j8dgy.js";import"./Combination-CBJmtdux.js";import{t as mt}from"./tooltip-CNmaER6z.js";import{t as pt}from"./isValid-BGe7pJXT.js";import{n as ut}from"./vega-loader.browser-CZV6_g2i.js";import{t as ft}from"./react-vega-BZav_-2n.js";import"./defaultLocale-OkOxlkkM.js";import"./defaultLocale-DK1MWd7f.js";import{r as dt,t as ht}from"./alert-OQZHipbB.js";import{n as gt}from"./error-banner-DQBz1e-2.js";import{n as yt}from"./useAsyncData-D-4ifFXh.js";import{t as vt}from"./formats-DzzQnJYt.js";import{t as H}from"./useDeepCompareMemoize-yyiB9aJX.js";var kt=tt(),x=z(Y(),1);function bt(t){return t.data&&"url"in t.data&&(t.data.url=V(t.data.url).href),t}const u={arc:"arc",area:"area",bar:"bar",image:"image",line:"line",point:"point",rect:"rect",rule:"rule",text:"text",tick:"tick",trail:"trail",circle:"circle",square:"square",geoshape:"geoshape"};var F=new Set(["boxplot","errorband","errorbar"]);const S={getMarkType(t){let e=typeof t=="string"?t:t.type;if(F.has(e))throw Error("Not supported");return e},isInteractive(t){let e=typeof t=="string"?t:t.type;return!F.has(e)},makeClickable(t){let e=typeof t=="string"?t:t.type;return e in u?typeof t=="string"?{type:t,cursor:"pointer",tooltip:!0}:{...t,type:e,cursor:"pointer",tooltip:!0}:t},getOpacity(t){return typeof t=="string"?null:"opacity"in t&&typeof t.opacity=="number"?t.opacity:null}},y={point(t){return t==null?"select_point":`select_point_${t}`},interval(t){return t==null?"select_interval":`select_interval_${t}`},legendSelection(t){return`legend_selection_${t}`},binColoring(t){return t==null?"bin_coloring":`bin_coloring_${t}`},HIGHLIGHT:"highlight",PAN_ZOOM:"pan_zoom",hasPoint(t){return t.some(e=>e.startsWith("select_point"))},hasInterval(t){return t.some(e=>e.startsWith("select_interval"))},hasLegend(t){return t.some(e=>e.startsWith("legend_selection"))},hasPanZoom(t){return t.some(e=>e.startsWith("pan_zoom"))},isBinColoring(t){return t.startsWith("bin_coloring")}},j={highlight(){return{name:y.HIGHLIGHT,select:{type:"point",on:"mouseover"}}},interval(t,e){return{name:y.interval(e),select:{type:"interval",encodings:W(t),mark:{fill:"#669EFF",fillOpacity:.07,stroke:"#669EFF",strokeOpacity:.4},on:"[mousedown[!event.metaKey], mouseup] > mousemove[!event.metaKey]",translate:"[mousedown[!event.metaKey], mouseup] > mousemove[!event.metaKey]"}}},point(t,e){return{name:y.point(e),select:{type:"point",encodings:W(t),on:"click[!event.metaKey]"}}},binColoring(t){return{name:y.binColoring(t),select:{type:"point",on:"click[!event.metaKey]"}}},legend(t){return{name:y.legendSelection(t),select:{type:"point",fields:[t]},bind:"legend"}},panZoom(){return{name:y.PAN_ZOOM,bind:"scales",select:{type:"interval",on:"[mousedown[event.metaKey], window:mouseup] > window:mousemove!",translate:"[mousedown[event.metaKey], window:mouseup] > window:mousemove!",zoom:"wheel![event.metaKey]"}}}};function W(t){switch(S.getMarkType(t.mark)){case u.image:case u.trail:return;case u.area:case u.arc:return["color"];case u.bar:{let e=wt(t);return e==="horizontal"?["y"]:e==="vertical"?["x"]:void 0}case u.circle:case u.geoshape:case u.line:case u.point:case u.rect:case u.rule:case u.square:case u.text:case u.tick:return["x","y"]}}function P(t){return"params"in t&&t.params&&t.params.length>0?N(t.params.filter(e=>e==null?!1:"select"in e&&e.select!==void 0).map(e=>e.name)):"layer"in t?N(t.layer.flatMap(P)):"vconcat"in t?N(t.vconcat.flatMap(P)):"hconcat"in t?N(t.hconcat.flatMap(P)):[]}function wt(t){var a,r;if(!t||!("mark"in t))return;let e=(a=t.encoding)==null?void 0:a.x,n=(r=t.encoding)==null?void 0:r.y;if(e&&"type"in e&&e.type==="nominal")return"vertical";if(n&&"type"in n&&n.type==="nominal"||e&&"aggregate"in e)return"horizontal";if(n&&"aggregate"in n)return"vertical"}function xt(t){if(!t.encoding)return[];let e=[];for(let n of Object.values(t.encoding))n&&typeof n=="object"&&"bin"in n&&n.bin&&"field"in n&&typeof n.field=="string"&&e.push(n.field);return e}function D(t){if(!t||!("encoding"in t))return[];let{encoding:e}=t;return e?Object.entries(e).flatMap(n=>{let[a,r]=n;return!r||!St.has(a)?[]:"field"in r&&typeof r.field=="string"?[r.field]:"condition"in r&&r.condition&&typeof r.condition=="object"&&"field"in r.condition&&r.condition.field&&typeof r.condition.field=="string"?[r.condition.field]:[]}):[]}var St=new Set(["color","fill","fillOpacity","opacity","shape","size"]);function G(t,e,n,a){let r=n.filter(o=>y.isBinColoring(o)),i={and:(r.length>0?r:n).map(o=>({param:o}))};if(t==="opacity"){let o=S.getOpacity(a)||1;return{...e,opacity:{condition:{test:i,value:o},value:o/5}}}else return e}function At(t){if(!("select"in t)||!t.select)return JSON.stringify(t);let e=t.select;if(typeof e=="string")return JSON.stringify({type:e,bind:t.bind});let n={type:e.type,encodings:"encodings"in e&&e.encodings?[...e.encodings].sort():void 0,fields:"fields"in e&&e.fields?[...e.fields].sort():void 0,bind:t.bind};return JSON.stringify(n)}function $(t){let e=E(t);if(e.length===0)return t;let n=_t(e);return n.length===0?t:{...L(K(t,new Set(n.map(a=>a.name))),n.map(a=>a.name)),params:[...t.params||[],...n]}}function E(t){let e=[];if("vconcat"in t&&Array.isArray(t.vconcat))for(let n of t.vconcat)e.push(...E(n));else if("hconcat"in t&&Array.isArray(t.hconcat))for(let n of t.hconcat)e.push(...E(n));else{if("layer"in t)return[];"mark"in t&&"params"in t&&t.params&&t.params.length>0&&e.push({params:t.params})}return e}function _t(t){if(t.length===0)return[];let e=new Map,n=t.length;for(let{params:r}of t){let i=new Set;for(let o of r){let l=At(o);i.has(l)||(i.add(l),e.has(l)||e.set(l,{count:0,param:o}),e.get(l).count++)}}let a=[];for(let[,{count:r,param:i}]of e)r===n&&a.push(i);return a}function K(t,e){if("vconcat"in t&&Array.isArray(t.vconcat))return{...t,vconcat:t.vconcat.map(n=>K(n,e))};if("hconcat"in t&&Array.isArray(t.hconcat))return{...t,hconcat:t.hconcat.map(n=>K(n,e))};if("mark"in t&&"params"in t&&t.params){let n=t.params,a=[];for(let r of n){if(!r||typeof r!="object"||!("name"in r)){a.push(r);continue}e.has(r.name)||a.push(r)}if(a.length===0){let{params:r,...i}=t;return i}return{...t,params:a}}return t}function L(t,e){return"vconcat"in t&&Array.isArray(t.vconcat)?{...t,vconcat:t.vconcat.map(n=>L(n,e))}:"hconcat"in t&&Array.isArray(t.hconcat)?{...t,hconcat:t.hconcat.map(n=>L(n,e))}:"layer"in t?t:"mark"in t&&S.isInteractive(t.mark)?{...t,mark:S.makeClickable(t.mark),encoding:G("opacity",t.encoding||{},e,t.mark)}:t}function Z(t,e){var l,k;let{chartSelection:n=!0,fieldSelection:a=!0}=e;if(!n&&!a)return t;(l=t.params)!=null&&l.some(s=>s.bind==="legend")&&(a=!1);let r=(k=t.params)==null?void 0:k.some(s=>!s.bind);r&&(n=!1);let i="vconcat"in t||"hconcat"in t;if(r&&i)return t;if("vconcat"in t){let s=t.vconcat.map(m=>"mark"in m?Z(m,{chartSelection:n,fieldSelection:a}):m);return $({...t,vconcat:s})}if("hconcat"in t){let s=t.hconcat.map(m=>"mark"in m?Z(m,{chartSelection:n,fieldSelection:a}):m);return $({...t,hconcat:s})}if("layer"in t){let s=t.params&&t.params.length>0,m=a!==!1&&!s,v=[];if(m){let p=t.layer.flatMap(f=>"mark"in f?D(f):[]);v=[...new Set(p)],Array.isArray(a)&&(v=v.filter(f=>a.includes(f)))}let w=t.layer.map((p,f)=>{if(!("mark"in p))return p;let h=p;if(f===0&&v.length>0){let O=v.map(M=>j.legend(M));h={...h,params:[...h.params||[],...O]}}return h=q(h,n,f),h=R(h),f===0&&(h=J(h)),h});return{...t,layer:w}}if(!("mark"in t)||!S.isInteractive(t.mark))return t;let o=t;return o=jt(o,a),o=q(o,n,void 0),o=R(o),o=J(o),o}function jt(t,e){if(e===!1)return t;let n=D(t);Array.isArray(e)&&(n=n.filter(i=>e.includes(i)));let a=n.map(i=>j.legend(i)),r=[...t.params||[],...a];return{...t,params:r}}function q(t,e,n){if(e===!1)return t;let a;try{a=S.getMarkType(t.mark)}catch{return t}if(a==="geoshape")return t;let r=xt(t),i=e===!0?r.length>0?["point"]:Ot(a):[e];if(!i||i.length===0)return t;let o=i.map(k=>k==="interval"?j.interval(t,n):j.point(t,n)),l=[...t.params||[],...o];return r.length>0&&i.includes("point")&&l.push(j.binColoring(n)),{...t,params:l}}function J(t){let e;try{e=S.getMarkType(t.mark)}catch{}if(e==="geoshape")return t;let n=t.params||[];return n.some(a=>a.bind==="scales")?t:{...t,params:[...n,j.panZoom()]}}function R(t){let e="encoding"in t?t.encoding:void 0,n=t.params||[],a=n.map(r=>r.name);return n.length===0||!S.isInteractive(t.mark)?t:{...t,mark:S.makeClickable(t.mark),encoding:G("opacity",e||{},a,t.mark)}}function Ot(t){switch(t){case"arc":case"area":return["point"];case"text":case"bar":return["point","interval"];case"line":return;default:return["point","interval"]}}async function Mt(t){if(!t)return t;let e="datasets"in t?{...t.datasets}:{},n=async r=>{if(!r)return r;if("layer"in r){let l=await Promise.all(r.layer.map(n));r={...r,layer:l}}if("hconcat"in r){let l=await Promise.all(r.hconcat.map(n));r={...r,hconcat:l}}if("vconcat"in r){let l=await Promise.all(r.vconcat.map(n));r={...r,vconcat:l}}if("spec"in r&&(r={...r,spec:await n(r.spec)}),!r.data||!("url"in r.data))return r;let i;try{i=V(r.data.url)}catch{return r}let o=await nt(i.href,r.data.format);return e[i.pathname]=o,{...r,data:{name:i.pathname}}},a=await n(t);return Object.keys(e).length===0?a:{...a,datasets:e}}var d=z(it(),1);ut("arrow",vt);var Nt=t=>{let e=(0,kt.c)(12),{value:n,setValue:a,chartSelection:r,fieldSelection:i,spec:o,embedOptions:l}=t,k,s;e[0]===o?(k=e[1],s=e[2]):(k=async()=>Mt(o),s=[o],e[0]=o,e[1]=k,e[2]=s);let{data:m,error:v}=yt(k,s);if(v){let p;return e[3]===v?p=e[4]:(p=(0,d.jsx)(gt,{error:v}),e[3]=v,e[4]=p),p}if(!m)return null;let w;return e[5]!==r||e[6]!==l||e[7]!==i||e[8]!==m||e[9]!==a||e[10]!==n?(w=(0,d.jsx)(Pt,{value:n,setValue:a,chartSelection:r,fieldSelection:i,spec:m,embedOptions:l}),e[5]=r,e[6]=l,e[7]=i,e[8]=m,e[9]=a,e[10]=n,e[11]=w):w=e[11],w},Pt=({value:t,setValue:e,chartSelection:n,fieldSelection:a,spec:r,embedOptions:i})=>{let{theme:o}=st(),l=(0,x.useRef)(null),k=(0,x.useRef)(void 0),[s,m]=(0,x.useState)(),v=(0,x.useMemo)(()=>i&&"actions"in i?i.actions:{source:!1,compiled:!1},[i]),w=H(r),p=(0,x.useMemo)(()=>Z(bt(w),{chartSelection:n,fieldSelection:a}),[w,n,a]),f=(0,x.useMemo)(()=>P(p),[p]),h=C(c=>{e({...t,...c})}),O=(0,x.useMemo)(()=>et((c,g)=>{_.debug("[Vega signal]",c,g);let b=T.mapValues(g,Ct);b=T.mapValues(b,It),h({[c]:b})},100),[h]),M=H(f),I=(0,x.useMemo)(()=>M.reduce((c,g)=>(y.PAN_ZOOM===g||y.isBinColoring(g)||c.push({signalName:g,handler:(b,X)=>O(b,X)}),c),[]),[M,O]),B=C(c=>{_.error(c),_.debug(p),m(c)}),Q=C(c=>{_.debug("[Vega view] created",c),k.current=c,m(void 0)}),U=()=>{let c=[];return y.hasPoint(f)&&c.push(["Point selection","click to select a point; hold shift for multi-select"]),y.hasInterval(f)&&c.push(["Interval selection","click and drag to select an interval"]),y.hasLegend(f)&&c.push(["Legend selection","click to select a legend item; hold shift for multi-select"]),y.hasPanZoom(f)&&c.push(["Pan","hold the meta key and drag"],["Zoom","hold the meta key and scroll"]),c.length===0?null:(0,d.jsx)(mt,{delayDuration:300,side:"left",content:(0,d.jsx)("div",{className:"text-xs flex flex-col",children:c.map((g,b)=>(0,d.jsxs)("div",{children:[(0,d.jsxs)("span",{className:"font-bold tracking-wide",children:[g[0],":"]})," ",g[1]]},b))}),children:(0,d.jsx)(ct,{className:"absolute bottom-1 right-0 m-2 h-4 w-4 cursor-help text-muted-foreground hover:text-foreground"})})},A=ft({ref:l,spec:p,options:{theme:o==="dark"?"dark":void 0,actions:v,mode:"vega-lite",tooltip:rt.call,renderer:"canvas"},onError:B,onEmbed:Q});return(0,x.useEffect)(()=>(I.forEach(({signalName:c,handler:g})=>{try{A==null||A.view.addSignalListener(c,g)}catch(b){_.error(b)}}),()=>{I.forEach(({signalName:c,handler:g})=>{try{A==null||A.view.removeSignalListener(c,g)}catch(b){_.error(b)}})}),[A,I]),(0,d.jsxs)(d.Fragment,{children:[s&&(0,d.jsxs)(ht,{variant:"destructive",children:[(0,d.jsx)(dt,{children:s.message}),(0,d.jsx)("div",{className:"text-md",children:s.stack})]}),(0,d.jsxs)("div",{className:lt("relative"),onPointerDown:ot.stopPropagation(),children:[(0,d.jsx)("div",{ref:l,"data-container-width":at(p)}),U()]})]})};function It(t){return t instanceof Set?[...t]:t}function Ct(t){return Array.isArray(t)?t.map(e=>e instanceof Date&&pt(e)?new Date(e).getTime():e):t}var Et=Nt;export{Et as default};
package/dist/index.html CHANGED
@@ -66,7 +66,7 @@
66
66
  <marimo-server-token data-token="{{ server_token }}" hidden></marimo-server-token>
67
67
  <!-- /TODO -->
68
68
  <title>{{ title }}</title>
69
- <script type="module" crossorigin src="./assets/index-CPEieVCj.js"></script>
69
+ <script type="module" crossorigin src="./assets/index-bt3OH-Pk.js"></script>
70
70
  <link rel="modulepreload" crossorigin href="./assets/preload-helper-BW0IMuFq.js">
71
71
  <link rel="modulepreload" crossorigin href="./assets/clsx-BDxNtGmi.js">
72
72
  <link rel="modulepreload" crossorigin href="./assets/cn-BoaCR37F.js">
@@ -134,7 +134,7 @@
134
134
  <link rel="modulepreload" crossorigin href="./assets/toInteger-CO3ppIfA.js">
135
135
  <link rel="modulepreload" crossorigin href="./assets/database-zap-DTWCDKdn.js">
136
136
  <link rel="modulepreload" crossorigin href="./assets/main-DrBRErTM.js">
137
- <link rel="modulepreload" crossorigin href="./assets/cells-CAHXVi26.js">
137
+ <link rel="modulepreload" crossorigin href="./assets/cells-Dqou-uie.js">
138
138
  <link rel="modulepreload" crossorigin href="./assets/spinner-C5JoisA7.js">
139
139
  <link rel="modulepreload" crossorigin href="./assets/chevron-right-D0GQBpTb.js">
140
140
  <link rel="modulepreload" crossorigin href="./assets/dropdown-menu-CJ-Wwa2I.js">
@@ -148,7 +148,7 @@
148
148
  <link rel="modulepreload" crossorigin href="./assets/dist-D7GD2EM4.js">
149
149
  <link rel="modulepreload" crossorigin href="./assets/label-SLjr8zzy.js">
150
150
  <link rel="modulepreload" crossorigin href="./assets/useDebounce-B0dx2Gp0.js">
151
- <link rel="modulepreload" crossorigin href="./assets/azure-FFoHMnHA.js">
151
+ <link rel="modulepreload" crossorigin href="./assets/azure-q5TZ9bt0.js">
152
152
  <link rel="modulepreload" crossorigin href="./assets/numbers-aIvy9Kr7.js">
153
153
  <link rel="modulepreload" crossorigin href="./assets/SSRProvider-DC7ElCZZ.js">
154
154
  <link rel="modulepreload" crossorigin href="./assets/context-CIAP2NOh.js">
@@ -157,9 +157,9 @@
157
157
  <link rel="modulepreload" crossorigin href="./assets/input-BRZ8bt6P.js">
158
158
  <link rel="modulepreload" crossorigin href="./assets/links-DzgPOFJ-.js">
159
159
  <link rel="modulepreload" crossorigin href="./assets/popover-Du6bDNYH.js">
160
- <link rel="modulepreload" crossorigin href="./assets/switch-krcK9lRK.js">
160
+ <link rel="modulepreload" crossorigin href="./assets/switch-JycgoJcn.js">
161
161
  <link rel="modulepreload" crossorigin href="./assets/table-BhH-Mm8O.js">
162
- <link rel="modulepreload" crossorigin href="./assets/mode-D_HXqDHH.js">
162
+ <link rel="modulepreload" crossorigin href="./assets/mode-DSINUCzY.js">
163
163
  <link rel="modulepreload" crossorigin href="./assets/useAsyncData-D-4ifFXh.js">
164
164
  <link rel="modulepreload" crossorigin href="./assets/errors-Bfogio62.js">
165
165
  <link rel="modulepreload" crossorigin href="./assets/error-banner-DQBz1e-2.js">
@@ -172,32 +172,32 @@
172
172
  <link rel="modulepreload" crossorigin href="./assets/refresh-cw-CHAHPgkx.js">
173
173
  <link rel="modulepreload" crossorigin href="./assets/trash-2-CAoNMkjq.js">
174
174
  <link rel="modulepreload" crossorigin href="./assets/triangle-alert-qZo1ox6x.js">
175
- <link rel="modulepreload" crossorigin href="./assets/ai-model-dropdown-CcIreMqb.js">
175
+ <link rel="modulepreload" crossorigin href="./assets/ai-model-dropdown-BYDC_z7s.js">
176
176
  <link rel="modulepreload" crossorigin href="./assets/defaultLocale-OkOxlkkM.js">
177
177
  <link rel="modulepreload" crossorigin href="./assets/precisionRound-BOmLQIKI.js">
178
178
  <link rel="modulepreload" crossorigin href="./assets/defaultLocale-DK1MWd7f.js">
179
179
  <link rel="modulepreload" crossorigin href="./assets/vega-loader.browser-CZV6_g2i.js">
180
- <link rel="modulepreload" crossorigin href="./assets/tooltip-DLsts-7g.js">
180
+ <link rel="modulepreload" crossorigin href="./assets/utils-BuPoTKhl.js">
181
181
  <link rel="modulepreload" crossorigin href="./assets/ErrorBoundary-H5EQrcAX.js">
182
182
  <link rel="modulepreload" crossorigin href="./assets/useInstallPackage-CIJ1-EHx.js">
183
183
  <link rel="modulepreload" crossorigin href="./assets/ImperativeModal-CDxa8mJa.js">
184
- <link rel="modulepreload" crossorigin href="./assets/cell-link-BjgRgErj.js">
185
- <link rel="modulepreload" crossorigin href="./assets/datasource-BNXHfowL.js">
186
- <link rel="modulepreload" crossorigin href="./assets/state-CGu0LFDk.js">
187
- <link rel="modulepreload" crossorigin href="./assets/MarimoErrorOutput-zVM0B_Vj.js">
184
+ <link rel="modulepreload" crossorigin href="./assets/cell-link-DWQZUFhO.js">
185
+ <link rel="modulepreload" crossorigin href="./assets/datasource-Cn-Wy4lo.js">
186
+ <link rel="modulepreload" crossorigin href="./assets/state-BqEQgvo3.js">
187
+ <link rel="modulepreload" crossorigin href="./assets/MarimoErrorOutput-B0nc63rx.js">
188
188
  <link rel="modulepreload" crossorigin href="./assets/copy-icon-Ditn6lfU.js">
189
- <link rel="modulepreload" crossorigin href="./assets/html-to-image-BgHw831z.js">
190
- <link rel="modulepreload" crossorigin href="./assets/focus-DaKeoSx6.js">
189
+ <link rel="modulepreload" crossorigin href="./assets/html-to-image-BFwmkFZ4.js">
190
+ <link rel="modulepreload" crossorigin href="./assets/focus-CQRBseis.js">
191
191
  <link rel="modulepreload" crossorigin href="./assets/LazyAnyLanguageCodeMirror-CrcxjfJR.js">
192
192
  <link rel="modulepreload" crossorigin href="./assets/chunk-5FQGJX7Z-CM1a_K7I.js">
193
193
  <link rel="modulepreload" crossorigin href="./assets/katex-rvFxOCU-.js">
194
- <link rel="modulepreload" crossorigin href="./assets/markdown-renderer-MyhTrUey.js">
195
- <link rel="modulepreload" crossorigin href="./assets/command-_14PjWun.js">
196
- <link rel="modulepreload" crossorigin href="./assets/download-SQhwj_Eq.js">
197
- <link rel="modulepreload" crossorigin href="./assets/useRunCells-BOsp_Hau.js">
198
- <link rel="modulepreload" crossorigin href="./assets/RenderHTML-BuMvdWQd.js">
194
+ <link rel="modulepreload" crossorigin href="./assets/markdown-renderer-CdEqa6lQ.js">
195
+ <link rel="modulepreload" crossorigin href="./assets/command-Ckfx4w5C.js">
196
+ <link rel="modulepreload" crossorigin href="./assets/download-D6Fv1GMQ.js">
197
+ <link rel="modulepreload" crossorigin href="./assets/useRunCells-BSsgvk4y.js">
198
+ <link rel="modulepreload" crossorigin href="./assets/RenderHTML-Bp9XY06U.js">
199
199
  <link rel="modulepreload" crossorigin href="./assets/useIframeCapabilities-DDlGrM1g.js">
200
- <link rel="modulepreload" crossorigin href="./assets/formats-CmvHepzl.js">
200
+ <link rel="modulepreload" crossorigin href="./assets/formats-DzzQnJYt.js">
201
201
  <link rel="modulepreload" crossorigin href="./assets/en-US-BO8E69bZ.js">
202
202
  <link rel="modulepreload" crossorigin href="./assets/isValid-BGe7pJXT.js">
203
203
  <link rel="modulepreload" crossorigin href="./assets/dates-BcvJrESI.js">
@@ -207,42 +207,42 @@
207
207
  <link rel="modulepreload" crossorigin href="./assets/useDateFormatter-CpE7XQLs.js">
208
208
  <link rel="modulepreload" crossorigin href="./assets/range-CJeRXUtp.js">
209
209
  <link rel="modulepreload" crossorigin href="./assets/table-BCnp9gKC.js">
210
- <link rel="modulepreload" crossorigin href="./assets/JsonOutput-DJukuY6Z.js">
211
- <link rel="modulepreload" crossorigin href="./assets/useDeleteCell-BAuuakkK.js">
210
+ <link rel="modulepreload" crossorigin href="./assets/JsonOutput-CBK4dhVh.js">
211
+ <link rel="modulepreload" crossorigin href="./assets/useDeleteCell-DSpj4wDu.js">
212
212
  <link rel="modulepreload" crossorigin href="./assets/icons-CrUXojcA.js">
213
- <link rel="modulepreload" crossorigin href="./assets/process-output-B2kGZ_VU.js">
213
+ <link rel="modulepreload" crossorigin href="./assets/process-output-4ypD4fg7.js">
214
214
  <link rel="modulepreload" crossorigin href="./assets/blob-CObhN-9g.js">
215
215
  <link rel="modulepreload" crossorigin href="./assets/objectWithoutPropertiesLoose-DP4vAkvg.js">
216
216
  <link rel="modulepreload" crossorigin href="./assets/esm-CBkHtTOV.js">
217
217
  <link rel="modulepreload" crossorigin href="./assets/file-DzHkbIdO.js">
218
218
  <link rel="modulepreload" crossorigin href="./assets/image-DXfkah9d.js">
219
219
  <link rel="modulepreload" crossorigin href="./assets/play-DKSqmedg.js">
220
- <link rel="modulepreload" crossorigin href="./assets/add-cell-with-ai-BtzUxApq.js">
220
+ <link rel="modulepreload" crossorigin href="./assets/add-cell-with-ai-CrnYAxuA.js">
221
221
  <link rel="modulepreload" crossorigin href="./assets/isEmpty-CfmnKtgL.js">
222
222
  <link rel="modulepreload" crossorigin href="./assets/bot-message-square-CK6eoGWy.js">
223
- <link rel="modulepreload" crossorigin href="./assets/chat-display-rX-JkJEO.js">
223
+ <link rel="modulepreload" crossorigin href="./assets/chat-display-Vedn01P6.js">
224
224
  <link rel="modulepreload" crossorigin href="./assets/chart-no-axes-column-DV8gdCvH.js">
225
225
  <link rel="modulepreload" crossorigin href="./assets/square-function-B006EYFX.js">
226
226
  <link rel="modulepreload" crossorigin href="./assets/spec-CYMZZDXr.js">
227
227
  <link rel="modulepreload" crossorigin href="./assets/ellipsis-vertical-CAB7tdza.js">
228
- <link rel="modulepreload" crossorigin href="./assets/components-BP1LfBLA.js">
229
- <link rel="modulepreload" crossorigin href="./assets/column-preview-Dk_9z2Mw.js">
228
+ <link rel="modulepreload" crossorigin href="./assets/components-Bgj5U8rZ.js">
229
+ <link rel="modulepreload" crossorigin href="./assets/column-preview-DPhs4evg.js">
230
230
  <link rel="modulepreload" crossorigin href="./assets/toggle-BiIJZR6-.js">
231
- <link rel="modulepreload" crossorigin href="./assets/globals-DCdvUAk2.js">
231
+ <link rel="modulepreload" crossorigin href="./assets/globals-DE7Q2ffe.js">
232
232
  <link rel="modulepreload" crossorigin href="./assets/share-BYioqUE0.js">
233
233
  <link rel="modulepreload" crossorigin href="./assets/_baseSet-D5BgdrnX.js">
234
234
  <link rel="modulepreload" crossorigin href="./assets/react-resizable-panels.browser.esm-DDRqG5ui.js">
235
- <link rel="modulepreload" crossorigin href="./assets/context-aware-panel--8JnQtYo.js">
236
- <link rel="modulepreload" crossorigin href="./assets/floating-outline-2X-MQKSU.js">
237
- <link rel="modulepreload" crossorigin href="./assets/useAddCell-_oR2xY1x.js">
235
+ <link rel="modulepreload" crossorigin href="./assets/context-aware-panel-TU7i7Ais.js">
236
+ <link rel="modulepreload" crossorigin href="./assets/floating-outline-CNejeNGC.js">
237
+ <link rel="modulepreload" crossorigin href="./assets/useAddCell-BSbQWv3q.js">
238
238
  <link rel="modulepreload" crossorigin href="./assets/eye-off-vwi9L975.js">
239
- <link rel="modulepreload" crossorigin href="./assets/readonly-python-code-Dz4GjF9D.js">
239
+ <link rel="modulepreload" crossorigin href="./assets/readonly-python-code-CysvH2Zj.js">
240
240
  <link rel="modulepreload" crossorigin href="./assets/file-headphone-B5q2Ow55.js">
241
- <link rel="modulepreload" crossorigin href="./assets/file-icons-xucuZauP.js">
241
+ <link rel="modulepreload" crossorigin href="./assets/file-icons-0zZkfGbI.js">
242
242
  <link rel="modulepreload" crossorigin href="./assets/refresh-ccw-DLpfIr8v.js">
243
- <link rel="modulepreload" crossorigin href="./assets/form-C5vg9S9o.js">
243
+ <link rel="modulepreload" crossorigin href="./assets/form-B9Fj5Rl-.js">
244
244
  <link rel="modulepreload" crossorigin href="./assets/field-qoWy8wEy.js">
245
- <link rel="modulepreload" crossorigin href="./assets/useBoolean-D8-4no-l.js">
245
+ <link rel="modulepreload" crossorigin href="./assets/useBoolean-Cm61eWz0.js">
246
246
  <link rel="modulepreload" crossorigin href="./assets/useDeepCompareMemoize-yyiB9aJX.js">
247
247
  <link rel="modulepreload" crossorigin href="./assets/types-C1RN112u.js">
248
248
  <link rel="modulepreload" crossorigin href="./assets/prop-types-RrUi-pOT.js">
@@ -259,7 +259,7 @@
259
259
  <link rel="stylesheet" crossorigin href="./assets/cells-jmgGt1lS.css">
260
260
  <link rel="stylesheet" crossorigin href="./assets/markdown-renderer-DdDKmWlR.css">
261
261
  <link rel="stylesheet" crossorigin href="./assets/JsonOutput-B7vuddcd.css">
262
- <link rel="stylesheet" crossorigin href="./assets/index-CVpJvEAO.css">
262
+ <link rel="stylesheet" crossorigin href="./assets/index-Bgbe24O9.css">
263
263
  </head>
264
264
  <body>
265
265
  <div id="root"></div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@marimo-team/frontend",
3
- "version": "0.21.1-dev12",
3
+ "version": "0.21.1-dev14",
4
4
  "main": "dist/main.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "type": "module",
@@ -4,6 +4,7 @@ import React from "react";
4
4
  import type { TopLevelSpec } from "vega-lite";
5
5
  import { LazyVegaEmbed } from "@/components/charts/lazy";
6
6
  import { tooltipHandler } from "@/components/charts/tooltip";
7
+ import { getContainerWidth } from "@/plugins/impl/vega/utils";
7
8
  import { useTheme } from "@/theme/useTheme";
8
9
  import type { ErrorMessage } from "./chart-spec/spec";
9
10
  import { augmentSpecWithData } from "./chart-spec/spec";
@@ -30,6 +31,7 @@ export const LazyChart: React.FC<{
30
31
  <React.Suspense fallback={<LoadingChart />}>
31
32
  <LazyVegaEmbed
32
33
  spec={spec}
34
+ data-container-width={getContainerWidth(spec)}
33
35
  options={{
34
36
  theme: theme === "dark" ? "dark" : undefined,
35
37
  height: height,
@@ -45,6 +45,7 @@ export const TableColumnSummary = <TData, TValue>({
45
45
  <Suspense fallback={skeleton}>
46
46
  <LazyVegaEmbed
47
47
  spec={spec}
48
+ data-container-width="container"
48
49
  options={{
49
50
  width: 80,
50
51
  height: 30,
@@ -224,6 +224,7 @@ export function renderChart(chartSpec: string, theme: Theme) {
224
224
  return (
225
225
  <Suspense fallback={LoadingChart}>
226
226
  <LazyVegaEmbed
227
+ data-container-width="container"
227
228
  spec={updateSpec(JSON.parse(chartSpec) as TopLevelFacetedUnitSpec)}
228
229
  options={{
229
230
  theme: theme === "dark" ? "dark" : "vox",
@@ -27,6 +27,7 @@ import { useOverflowDetection } from "@/hooks/useOverflowDetection";
27
27
  import { renderHTML } from "@/plugins/core/RenderHTML";
28
28
  import { Banner } from "@/plugins/impl/common/error-banner";
29
29
  import type { TopLevelFacetedUnitSpec } from "@/plugins/impl/data-explorer/queries/types";
30
+ import { getContainerWidth } from "@/plugins/impl/vega/utils";
30
31
  import { useTheme } from "@/theme/useTheme";
31
32
  import { Events } from "@/utils/events";
32
33
  import { invariant } from "@/utils/invariant";
@@ -205,6 +206,7 @@ export const OutputRenderer: React.FC<{
205
206
  <Suspense fallback={<ChartLoadingState />}>
206
207
  <LazyVegaEmbed
207
208
  spec={parsedJsonData as TopLevelFacetedUnitSpec}
209
+ data-container-width={getContainerWidth(parsedJsonData)}
208
210
  options={{
209
211
  theme: theme === "dark" ? "dark" : undefined,
210
212
  mode: "vega-lite",
@@ -5,6 +5,7 @@ import { useAtom } from "jotai";
5
5
  import { CrosshairIcon, PinIcon, PinOffIcon, XIcon } from "lucide-react";
6
6
  import type { PropsWithChildren } from "react";
7
7
  import { Panel, PanelResizeHandle } from "react-resizable-panels";
8
+ import { raf2 } from "@/components/editor/navigation/focus-utils";
8
9
  import { Button } from "@/components/ui/button";
9
10
  import { Toggle } from "@/components/ui/toggle";
10
11
  import { Tooltip } from "@/components/ui/tooltip";
@@ -151,6 +152,11 @@ const ResizableComponent = ({ children }: ResizableComponentProps) => {
151
152
  startingWidth: 400,
152
153
  minWidth: 300,
153
154
  maxWidth: 1500,
155
+ onResize: () => {
156
+ raf2(() => {
157
+ window.dispatchEvent(new Event("resize"));
158
+ });
159
+ },
154
160
  });
155
161
 
156
162
  return (
@@ -0,0 +1,35 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+
3
+ import { describe, expect, it, vi } from "vitest";
4
+ import { handleDragging } from "../utils";
5
+
6
+ describe("handleDragging", () => {
7
+ it("should dispatch a resize event after dragging ends", async () => {
8
+ const listener = vi.fn();
9
+ window.addEventListener("resize", listener);
10
+
11
+ handleDragging(false);
12
+
13
+ // raf2: wait two animation frames
14
+ await new Promise((resolve) => requestAnimationFrame(resolve));
15
+ await new Promise((resolve) => requestAnimationFrame(resolve));
16
+
17
+ expect(listener).toHaveBeenCalledTimes(1);
18
+
19
+ window.removeEventListener("resize", listener);
20
+ });
21
+
22
+ it("should not dispatch a resize event while dragging", async () => {
23
+ const listener = vi.fn();
24
+ window.addEventListener("resize", listener);
25
+
26
+ handleDragging(true);
27
+
28
+ await new Promise((resolve) => requestAnimationFrame(resolve));
29
+ await new Promise((resolve) => requestAnimationFrame(resolve));
30
+
31
+ expect(listener).not.toHaveBeenCalled();
32
+
33
+ window.removeEventListener("resize", listener);
34
+ });
35
+ });
@@ -17,6 +17,7 @@ import "./app-chrome.css";
17
17
  import { TooltipProvider } from "@radix-ui/react-tooltip";
18
18
  import { useAtom, useAtomValue } from "jotai";
19
19
  import { XIcon } from "lucide-react";
20
+ import useEvent from "react-use-event-hook";
20
21
  import { Button } from "@/components/ui/button";
21
22
  import { ReorderableList } from "@/components/ui/reorderable-list";
22
23
  import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs";
@@ -26,6 +27,7 @@ import { capabilitiesAtom } from "@/core/config/capabilities";
26
27
  import { getFeatureFlag } from "@/core/config/feature-flag";
27
28
  import { cn } from "@/utils/cn";
28
29
  import { ErrorBoundary } from "../../boundary/ErrorBoundary";
30
+ import { raf2 } from "../../navigation/focus-utils";
29
31
  import { ContextAwarePanel } from "../panels/context-aware-panel/context-aware-panel";
30
32
  import { PanelSectionProvider } from "../panels/panel-context";
31
33
  import { panelLayoutAtom, useChromeActions, useChromeState } from "../state";
@@ -147,6 +149,14 @@ export const AppChrome: React.FC<PropsWithChildren> = ({ children }) => {
147
149
  });
148
150
  }, [panelLayout.sidebar, capabilities]);
149
151
 
152
+ const emitResizeEvent = useEvent(() => {
153
+ // HACK: Unfortunately, we have to do this twice to make sure the
154
+ // panel is fully expanded before we dispatch the resize event
155
+ raf2(() => {
156
+ window.dispatchEvent(new Event("resize"));
157
+ });
158
+ });
159
+
150
160
  // sync sidebar
151
161
  useEffect(() => {
152
162
  if (!sidebarRef.current) {
@@ -162,13 +172,7 @@ export const AppChrome: React.FC<PropsWithChildren> = ({ children }) => {
162
172
  }
163
173
 
164
174
  // Dispatch a resize event so widgets know to resize
165
- requestAnimationFrame(() => {
166
- // HACK: Unfortunately, we have to do this twice to make sure it the
167
- // panel is fully expanded before we dispatch the resize event
168
- requestAnimationFrame(() => {
169
- window.dispatchEvent(new Event("resize"));
170
- });
171
- });
175
+ emitResizeEvent();
172
176
  }, [isSidebarOpen]);
173
177
 
174
178
  // sync panel
@@ -186,13 +190,7 @@ export const AppChrome: React.FC<PropsWithChildren> = ({ children }) => {
186
190
  }
187
191
 
188
192
  // Dispatch a resize event so widgets know to resize
189
- requestAnimationFrame(() => {
190
- // HACK: Unfortunately, we have to do this twice to make sure it the
191
- // panel is fully expanded before we dispatch the resize event
192
- requestAnimationFrame(() => {
193
- window.dispatchEvent(new Event("resize"));
194
- });
195
- });
193
+ emitResizeEvent();
196
194
  }, [isDeveloperPanelOpen]);
197
195
 
198
196
  // Auto-correct developer panel selection when the selected tab is no longer available
@@ -1,8 +1,12 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
+ import { raf2 } from "../../navigation/focus-utils";
4
+
3
5
  export function handleDragging(isDragging: boolean) {
4
6
  if (!isDragging) {
5
7
  // Once the user is done dragging, dispatch a resize event
6
- window.dispatchEvent(new Event("resize"));
8
+ raf2(() => {
9
+ window.dispatchEvent(new Event("resize"));
10
+ });
7
11
  }
8
12
  }
@@ -1115,6 +1115,60 @@ class Foo:
1115
1115
  `);
1116
1116
  });
1117
1117
 
1118
+ test("should not highlight attribute access matching a for-loop variable", () => {
1119
+ // When `tool` is used as a for-loop variable, `mcp.tool` (attribute access)
1120
+ // should NOT have `tool` highlighted — it's a property, not a variable reference.
1121
+ expect(
1122
+ runHighlight(
1123
+ ["mcp", "client"],
1124
+ `
1125
+ @mcp.tool
1126
+ def roll_dice():
1127
+ pass
1128
+
1129
+ async with client:
1130
+ for tool in await client.list_tools():
1131
+ print(tool)
1132
+ `,
1133
+ ),
1134
+ ).toMatchInlineSnapshot(`
1135
+ "
1136
+ @mcp.tool
1137
+ ^^^
1138
+ def roll_dice():
1139
+ pass
1140
+
1141
+ async with client:
1142
+ ^^^^^^
1143
+ for tool in await client.list_tools():
1144
+ ^^^^^^
1145
+ print(tool)
1146
+ "
1147
+ `);
1148
+ });
1149
+
1150
+ test("should not highlight property name matching a global variable", () => {
1151
+ // `tool` is a global variable, but `mcp.tool` should not highlight `tool`
1152
+ // because it's a property access, not a variable reference.
1153
+ expect(
1154
+ runHighlight(
1155
+ ["mcp", "tool"],
1156
+ `
1157
+ @mcp.tool
1158
+ def roll_dice():
1159
+ pass
1160
+ `,
1161
+ ),
1162
+ ).toMatchInlineSnapshot(`
1163
+ "
1164
+ @mcp.tool
1165
+ ^^^
1166
+ def roll_dice():
1167
+ pass
1168
+ "
1169
+ `);
1170
+ });
1171
+
1118
1172
  test("class property self-reference", () => {
1119
1173
  expect(
1120
1174
  runHighlight(