@malloydata/render 0.0.222-dev241211235345 → 0.0.222-dev241212001744

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.
@@ -83271,7 +83271,7 @@ const cZe = navigator.userAgent.toLowerCase().indexOf("chrome") >= 0, fZe = cZe,
83271
83271
  i: void 0
83272
83272
  }), g;
83273
83273
  })();
83274
- }, ER = ["chart"], jH = (t) => {
83274
+ }, ER = ["chart", "link"], jH = (t) => {
83275
83275
  let e = "", n = "";
83276
83276
  ({
83277
83277
  renderValue: e,
@@ -1676,7 +1676,7 @@ ${o}
1676
1676
  `;function A2(t,e,n){let r=n.initialDeps??[],i;return()=>{var s,o,u,a;let l;n.key&&((s=n.debug)!=null&&s.call(n))&&(l=Date.now());const c=t();if(!(c.length!==r.length||c.some((d,p)=>r[p]!==d)))return i;r=c;let x;if(n.key&&((o=n.debug)!=null&&o.call(n))&&(x=Date.now()),i=e(...c),n.key&&((u=n.debug)!=null&&u.call(n))){const d=Math.round((Date.now()-l)*100)/100,p=Math.round((Date.now()-x)*100)/100,m=p/16,g=(y,E)=>{for(y=String(y);y.length<E;)y=" "+y;return y};console.info(`%c⏱ ${g(p,5)} /${g(d,5)} ms`,`
1677
1677
  font-size: .6rem;
1678
1678
  font-weight: bold;
1679
- color: hsl(${Math.max(0,Math.min(120-120*m,120))}deg 100% 31%);`,n==null?void 0:n.key)}return(a=n==null?void 0:n.onChange)==null||a.call(n,i),i}}function iI(t,e){if(t===void 0)throw new Error("Unexpected undefined");return t}const OKe=(t,e)=>Math.abs(t-e)<1,RKe=(t,e,n)=>{let r;return function(...i){t.clearTimeout(r),r=t.setTimeout(()=>e.apply(this,i),n)}};var S2={};const DKe=t=>t,wKe=t=>{const e=Math.max(t.startIndex-t.overscan,0),n=Math.min(t.endIndex+t.overscan,t.count-1),r=[];for(let i=e;i<=n;i++)r.push(i);return r},NKe=(t,e)=>{const n=t.scrollElement;if(!n)return;const r=t.targetWindow;if(!r)return;const i=o=>{const{width:u,height:a}=o;e({width:Math.round(u),height:Math.round(a)})};if(i(n.getBoundingClientRect()),!r.ResizeObserver)return()=>{};const s=new r.ResizeObserver(o=>{const u=o[0];if(u!=null&&u.borderBoxSize){const a=u.borderBoxSize[0];if(a){i({width:a.inlineSize,height:a.blockSize});return}}i(n.getBoundingClientRect())});return s.observe(n,{box:"border-box"}),()=>{s.unobserve(n)}},kse={passive:!0},FKe=typeof window>"u"?!0:"onscrollend"in window,LKe=(t,e)=>{const n=t.scrollElement;if(!n)return;const r=t.targetWindow;if(!r)return;let i=0;const s=FKe?()=>{}:RKe(r,()=>{e(i,!1)},t.options.isScrollingResetDelay),o=l=>()=>{const{horizontal:c,isRtl:f}=t.options;i=c?n.scrollLeft*(f&&-1||1):n.scrollTop,s(),e(i,l)},u=o(!0),a=o(!1);return a(),n.addEventListener("scroll",u,kse),n.addEventListener("scrollend",a,kse),()=>{n.removeEventListener("scroll",u),n.removeEventListener("scrollend",a)}},IKe=(t,e,n)=>{if(e!=null&&e.borderBoxSize){const r=e.borderBoxSize[0];if(r)return Math.round(r[n.options.horizontal?"inlineSize":"blockSize"])}return Math.round(t.getBoundingClientRect()[n.options.horizontal?"width":"height"])},$Ke=(t,{adjustments:e=0,behavior:n},r)=>{var i,s;const o=t+e;(s=(i=r.scrollElement)==null?void 0:i.scrollTo)==null||s.call(i,{[r.options.horizontal?"left":"top"]:o,behavior:n})};class BKe{constructor(e){this.unsubs=[],this.scrollElement=null,this.targetWindow=null,this.isScrolling=!1,this.scrollToIndexTimeoutId=null,this.measurementsCache=[],this.itemSizeCache=new Map,this.pendingMeasuredCacheIndexes=[],this.scrollRect=null,this.scrollOffset=null,this.scrollDirection=null,this.scrollAdjustments=0,this.elementsCache=new Map,this.observer=(()=>{let n=null;const r=()=>n||(!this.targetWindow||!this.targetWindow.ResizeObserver?null:n=new this.targetWindow.ResizeObserver(i=>{i.forEach(s=>{this._measureElement(s.target,s)})}));return{disconnect:()=>{var i;return(i=r())==null?void 0:i.disconnect()},observe:i=>{var s;return(s=r())==null?void 0:s.observe(i,{box:"border-box"})},unobserve:i=>{var s;return(s=r())==null?void 0:s.unobserve(i)}}})(),this.range=null,this.setOptions=n=>{Object.entries(n).forEach(([r,i])=>{typeof i>"u"&&delete n[r]}),this.options={debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:DKe,rangeExtractor:wKe,onChange:()=>{},measureElement:IKe,initialRect:{width:0,height:0},scrollMargin:0,gap:0,indexAttribute:"data-index",initialMeasurementsCache:[],lanes:1,isScrollingResetDelay:150,enabled:!0,isRtl:!1,...n}},this.notify=n=>{var r,i;(i=(r=this.options).onChange)==null||i.call(r,this,n)},this.maybeNotify=A2(()=>(this.calculateRange(),[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]),n=>{this.notify(n)},{key:S2.NODE_ENV!=="production"&&"maybeNotify",debug:()=>this.options.debug,initialDeps:[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]}),this.cleanup=()=>{this.unsubs.filter(Boolean).forEach(n=>n()),this.unsubs=[],this.scrollElement=null,this.targetWindow=null,this.observer.disconnect(),this.elementsCache.clear()},this._didMount=()=>()=>{this.cleanup()},this._willUpdate=()=>{var n;const r=this.options.enabled?this.options.getScrollElement():null;if(this.scrollElement!==r){if(this.cleanup(),!r){this.maybeNotify();return}this.scrollElement=r,this.scrollElement&&"ownerDocument"in this.scrollElement?this.targetWindow=this.scrollElement.ownerDocument.defaultView:this.targetWindow=((n=this.scrollElement)==null?void 0:n.window)??null,this._scrollToOffset(this.getScrollOffset(),{adjustments:void 0,behavior:void 0}),this.unsubs.push(this.options.observeElementRect(this,i=>{this.scrollRect=i,this.maybeNotify()})),this.unsubs.push(this.options.observeElementOffset(this,(i,s)=>{this.scrollAdjustments=0,this.scrollDirection=s?this.getScrollOffset()<i?"forward":"backward":null,this.scrollOffset=i,this.isScrolling=s,this.maybeNotify()}))}},this.getSize=()=>this.options.enabled?(this.scrollRect=this.scrollRect??this.options.initialRect,this.scrollRect[this.options.horizontal?"width":"height"]):(this.scrollRect=null,0),this.getScrollOffset=()=>this.options.enabled?(this.scrollOffset=this.scrollOffset??(typeof this.options.initialOffset=="function"?this.options.initialOffset():this.options.initialOffset),this.scrollOffset):(this.scrollOffset=null,0),this.getFurthestMeasurement=(n,r)=>{const i=new Map,s=new Map;for(let o=r-1;o>=0;o--){const u=n[o];if(i.has(u.lane))continue;const a=s.get(u.lane);if(a==null||u.end>a.end?s.set(u.lane,u):u.end<a.end&&i.set(u.lane,!0),i.size===this.options.lanes)break}return s.size===this.options.lanes?Array.from(s.values()).sort((o,u)=>o.end===u.end?o.index-u.index:o.end-u.end)[0]:void 0},this.getMeasurementOptions=A2(()=>[this.options.count,this.options.paddingStart,this.options.scrollMargin,this.options.getItemKey,this.options.enabled],(n,r,i,s,o)=>(this.pendingMeasuredCacheIndexes=[],{count:n,paddingStart:r,scrollMargin:i,getItemKey:s,enabled:o}),{key:!1}),this.getMeasurements=A2(()=>[this.getMeasurementOptions(),this.itemSizeCache],({count:n,paddingStart:r,scrollMargin:i,getItemKey:s,enabled:o},u)=>{if(!o)return this.measurementsCache=[],this.itemSizeCache.clear(),[];this.measurementsCache.length===0&&(this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach(c=>{this.itemSizeCache.set(c.key,c.size)}));const a=this.pendingMeasuredCacheIndexes.length>0?Math.min(...this.pendingMeasuredCacheIndexes):0;this.pendingMeasuredCacheIndexes=[];const l=this.measurementsCache.slice(0,a);for(let c=a;c<n;c++){const f=s(c),x=this.options.lanes===1?l[c-1]:this.getFurthestMeasurement(l,c),d=x?x.end+this.options.gap:r+i,p=u.get(f),m=typeof p=="number"?p:this.options.estimateSize(c),g=d+m,y=x?x.lane:c%this.options.lanes;l[c]={index:c,start:d,size:m,end:g,key:f,lane:y}}return this.measurementsCache=l,l},{key:S2.NODE_ENV!=="production"&&"getMeasurements",debug:()=>this.options.debug}),this.calculateRange=A2(()=>[this.getMeasurements(),this.getSize(),this.getScrollOffset()],(n,r,i)=>this.range=n.length>0&&r>0?kKe({measurements:n,outerSize:r,scrollOffset:i}):null,{key:S2.NODE_ENV!=="production"&&"calculateRange",debug:()=>this.options.debug}),this.getIndexes=A2(()=>[this.options.rangeExtractor,this.calculateRange(),this.options.overscan,this.options.count],(n,r,i,s)=>r===null?[]:n({startIndex:r.startIndex,endIndex:r.endIndex,overscan:i,count:s}),{key:S2.NODE_ENV!=="production"&&"getIndexes",debug:()=>this.options.debug}),this.indexFromElement=n=>{const r=this.options.indexAttribute,i=n.getAttribute(r);return i?parseInt(i,10):(console.warn(`Missing attribute name '${r}={index}' on measured element.`),-1)},this._measureElement=(n,r)=>{const i=this.indexFromElement(n),s=this.measurementsCache[i];if(!s)return;const o=s.key,u=this.elementsCache.get(o);u!==n&&(u&&this.observer.unobserve(u),this.observer.observe(n),this.elementsCache.set(o,n)),n.isConnected&&this.resizeItem(i,this.options.measureElement(n,r,this))},this.resizeItem=(n,r)=>{const i=this.measurementsCache[n];if(!i)return;const s=this.itemSizeCache.get(i.key)??i.size,o=r-s;o!==0&&((this.shouldAdjustScrollPositionOnItemSizeChange!==void 0?this.shouldAdjustScrollPositionOnItemSizeChange(i,o,this):i.start<this.getScrollOffset()+this.scrollAdjustments)&&(S2.NODE_ENV!=="production"&&this.options.debug&&console.info("correction",o),this._scrollToOffset(this.getScrollOffset(),{adjustments:this.scrollAdjustments+=o,behavior:void 0})),this.pendingMeasuredCacheIndexes.push(i.index),this.itemSizeCache=new Map(this.itemSizeCache.set(i.key,r)),this.notify(!1))},this.measureElement=n=>{if(!n){this.elementsCache.forEach((r,i)=>{r.isConnected||(this.observer.unobserve(r),this.elementsCache.delete(i))});return}this._measureElement(n,void 0)},this.getVirtualItems=A2(()=>[this.getIndexes(),this.getMeasurements()],(n,r)=>{const i=[];for(let s=0,o=n.length;s<o;s++){const u=n[s],a=r[u];i.push(a)}return i},{key:S2.NODE_ENV!=="production"&&"getVirtualItems",debug:()=>this.options.debug}),this.getVirtualItemForOffset=n=>{const r=this.getMeasurements();if(r.length!==0)return iI(r[Pse(0,r.length-1,i=>iI(r[i]).start,n)])},this.getOffsetForAlignment=(n,r)=>{const i=this.getSize(),s=this.getScrollOffset();r==="auto"&&(n<=s?r="start":n>=s+i?r="end":r="start"),r==="start"?n=n:r==="end"?n=n-i:r==="center"&&(n=n-i/2);const o=this.options.horizontal?"scrollWidth":"scrollHeight",a=(this.scrollElement?"document"in this.scrollElement?this.scrollElement.document.documentElement[o]:this.scrollElement[o]:0)-i;return Math.max(Math.min(a,n),0)},this.getOffsetForIndex=(n,r="auto")=>{n=Math.max(0,Math.min(n,this.options.count-1));const i=this.measurementsCache[n];if(!i)return;const s=this.getSize(),o=this.getScrollOffset();if(r==="auto")if(i.end>=o+s-this.options.scrollPaddingEnd)r="end";else if(i.start<=o+this.options.scrollPaddingStart)r="start";else return[o,r];const u=r==="end"?i.end+this.options.scrollPaddingEnd:i.start-this.options.scrollPaddingStart;return[this.getOffsetForAlignment(u,r),r]},this.isDynamicMode=()=>this.elementsCache.size>0,this.cancelScrollToIndex=()=>{this.scrollToIndexTimeoutId!==null&&this.targetWindow&&(this.targetWindow.clearTimeout(this.scrollToIndexTimeoutId),this.scrollToIndexTimeoutId=null)},this.scrollToOffset=(n,{align:r="start",behavior:i}={})=>{this.cancelScrollToIndex(),i==="smooth"&&this.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size."),this._scrollToOffset(this.getOffsetForAlignment(n,r),{adjustments:void 0,behavior:i})},this.scrollToIndex=(n,{align:r="auto",behavior:i}={})=>{n=Math.max(0,Math.min(n,this.options.count-1)),this.cancelScrollToIndex(),i==="smooth"&&this.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size.");const s=this.getOffsetForIndex(n,r);if(!s)return;const[o,u]=s;this._scrollToOffset(o,{adjustments:void 0,behavior:i}),i!=="smooth"&&this.isDynamicMode()&&this.targetWindow&&(this.scrollToIndexTimeoutId=this.targetWindow.setTimeout(()=>{if(this.scrollToIndexTimeoutId=null,this.elementsCache.has(this.options.getItemKey(n))){const[l]=iI(this.getOffsetForIndex(n,u));OKe(l,this.getScrollOffset())||this.scrollToIndex(n,{align:u,behavior:i})}else this.scrollToIndex(n,{align:u,behavior:i})}))},this.scrollBy=(n,{behavior:r}={})=>{this.cancelScrollToIndex(),r==="smooth"&&this.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size."),this._scrollToOffset(this.getScrollOffset()+n,{adjustments:void 0,behavior:r})},this.getTotalSize=()=>{var n;const r=this.getMeasurements();let i;return r.length===0?i=this.options.paddingStart:i=this.options.lanes===1?((n=r[r.length-1])==null?void 0:n.end)??0:Math.max(...r.slice(-this.options.lanes).map(s=>s.end)),i-this.options.scrollMargin+this.options.paddingEnd},this._scrollToOffset=(n,{adjustments:r,behavior:i})=>{this.options.scrollToFn(n,{behavior:i,adjustments:r},this)},this.measure=()=>{this.itemSizeCache=new Map,this.notify(!1)},this.setOptions(e)}}const Pse=(t,e,n,r)=>{for(;t<=e;){const i=(t+e)/2|0,s=n(i);if(s<r)t=i+1;else if(s>r)e=i-1;else return i}return t>0?t-1:0};function kKe({measurements:t,outerSize:e,scrollOffset:n}){const r=t.length-1,s=Pse(0,r,u=>t[u].start,n);let o=s;for(;o<r&&t[o].end<n+e;)o++;return{startIndex:s,endIndex:o}}function PKe(t){const e=Zo(t),n=new BKe(e),[r,i]=iC(n.getVirtualItems()),[s,o]=dr(n.getTotalSize()),u={get(l,c){switch(c){case"getVirtualItems":return()=>r;case"getTotalSize":return()=>s();default:return Reflect.get(l,c)}}},a=new Proxy(n,u);return a.setOptions(e),tp(()=>{const l=a._didMount();a._willUpdate(),np(l)}),k0e(()=>{a.setOptions(Zo(e,t,{onChange:(l,c)=>{var f;l._willUpdate(),i(lKe(l.getVirtualItems(),{key:"index"})),o(l.getTotalSize()),(f=t.onChange)==null||f.call(t,l,c)}})),a.measure()}),a}function Mse(t){return PKe(Zo({observeElementRect:NKe,observeElementOffset:LKe,scrollToFn:$Ke},t))}var MKe=mt("<div class=cell-content>"),jKe=mt('<div class="column-cell th">'),UKe=mt('<div class="column-cell td">'),qKe=mt("<div style=position:sticky;left:0px;height:0px;visibility:hidden;>"),zKe=mt("<div style=position:sticky;top:0px;left:0px;height:0px;visibility:hidden;>"),HKe=mt("<div class=pinned-header-row>"),QKe=mt("<div class=table-row><div class=table-row>"),sI=mt("<div class=table-row>"),GKe=mt('<div class="table-row limit-row table-gutter-left table-gutter-right">Limiting nested table to <!> records'),WKe=mt("<div class=malloy-table>"),VKe=mt("<div class=pinned-header-subrow>");const YKe=navigator.userAgent.toLowerCase().indexOf("chrome")>=0,jse=t=>{const e=()=>{const i=Ox().layout,s=t.field.tagParse().tag.tag("column"),o=i.fieldLayout(t.field).width,u=i.fieldLayout(t.field).height,a={};return t.isHeader||(o&&(a.width=`${o}px`,a["min-width"]=`${o}px`,a["max-width"]=`${o}px;`),u&&(a.height=`${u}px`),(s==null?void 0:s.text("word_break"))==="break_all"&&(a["word-break"]="break-all")),a},n=oo(),r=i=>{n.onClick&&n.onClick({field:t.field,displayValue:t.isHeader?t.rawValue:typeof t.value!="function"?t.value:null,value:typeof t.rawValue!="function"?t.rawValue:null,fieldPath:t.field.fieldPath,isHeader:!!t.isHeader,event:i,type:"table-cell"})};return(()=>{var i=MKe();return zB(i,"click",n.onClick?r:void 0),Xe(i,()=>t.value),Pn(s=>{var o=!!t.isHeader,u=!!t.hideStartGutter,a=!!t.hideEndGutter,l=!!t.tableGutterLeft,c=!!t.tableGutterRight,f=!!t.isChart,x=e(),d=typeof t.value=="string"?t.value:"";return o!==s.e&&i.classList.toggle("header",s.e=o),u!==s.t&&i.classList.toggle("hide-start-gutter",s.t=u),a!==s.a&&i.classList.toggle("hide-end-gutter",s.a=a),l!==s.o&&i.classList.toggle("table-gutter-left",s.o=l),c!==s.i&&i.classList.toggle("table-gutter-right",s.i=c),f!==s.n&&i.classList.toggle("chart",s.n=f),s.s=wc(i,x,s.s),d!==s.h&&Ji(i,"title",s.h=d),s},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0}),i})()},Use=t=>{const{layout:e}=Ox(),n=rc(),r=nm(t.field),i=nm(t.field.parentExplore),s=!t.field.parentExplore.isExploreField(),o=r&&(i||s),u=tm(t.field),a=tm(t.field.parentExplore),l=u&&(a||s),c=e.fieldLayout(t.field),f=t.isPinned?c.absoluteColumnRange:c.relativeColumnRange,x=c.depth>0&&nm(t.field)||c.metadata.renderAs==="table",d=c.depth>0&&tm(t.field)||c.depth===0&&c.metadata.renderAs==="table",m=t.field.tagParse().tag.text("label")??t.field.name.replace(/_/g,"_​");return(()=>{var g=jKe();return Xe(g,Ge(jse,{get field(){return t.field},value:m,hideStartGutter:o,hideEndGutter:l,tableGutterLeft:x,tableGutterRight:d,isHeader:!0,get rawValue(){return t.field.name}})),Pn(y=>{var E=t.isPinned?n.getFieldKey(t.field):void 0,v=!!(t.field.isAtomicField()&&t.field.isNumber()),_=!!t.isPinned,A=`${f[0]+1} / span ${G7(f)}`,S=t.isPinned?void 0:`var(--malloy-render--table-header-height-${c.depth})`;return E!==y.e&&Ji(g,"data-pinned-header",y.e=E),v!==y.t&&g.classList.toggle("numeric",y.t=v),_!==y.a&&g.classList.toggle("pinned-header",y.a=_),A!==y.o&&((y.o=A)!=null?g.style.setProperty("grid-column",A):g.style.removeProperty("grid-column")),S!==y.i&&((y.i=S)!=null?g.style.setProperty("height",S):g.style.removeProperty("height")),y},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),g})()},oI=["chart"],qse=t=>{let e="",n="";({renderValue:e,renderAs:n}=Cc({field:t.field,dataColumn:t.row.cell(t.field),resultMetadata:rc(),tag:t.field.tagParse().tag,customProps:{table:{rowLimit:100,currentRow:[...t.rowPath]}}}));const i=Ox().layout.fieldLayout(t.field),s=i.relativeColumnRange,o=Ox(),u=()=>JSON.stringify(t.rowPath)===JSON.stringify(o==null?void 0:o.store.highlightedRow)&&JSON.stringify(o==null?void 0:o.currentExplore)===JSON.stringify(o==null?void 0:o.store.highlightedExplore),a={"grid-column":`${s[0]+1} / span ${G7(s)}`,height:"fit-content"};n==="table"?(a.display="grid",a.grid="auto / subgrid"):YKe&&t.field.isAtomicField()&&(a.position="sticky",a.top=`var(--malloy-render--table-header-cumulative-height-${i.depth})`);const l=i.depth>0&&nm(t.field),c=i.depth>0&&tm(t.field),f=()=>{o&&!oI.includes(n)&&o.setStore(y=>({...y,highlightedRow:t.rowPath}))},x=()=>{o.setStore(y=>({...y,highlightedRow:null}))},d=oo(),p=d.tableConfig().enableDrill,m=rc(),g=async y=>{y.stopPropagation(),p&&!oI.includes(n)&&xKe({metadata:m,field:t.field,dimensionContext:[...o.dimensionContext,...t.dimensionContext],onDrill:d.onDrill})};return(()=>{var y=UKe();return y.$$click=g,y.addEventListener("mouseleave",x),y.addEventListener("mouseenter",f),Xe(y,Ge(UB,{get children(){return[Ge(Wy,{when:n==="table",children:e}),Ge(Wy,{when:!0,get children(){return Ge(jse,{get field(){return t.field},value:e,get hideStartGutter(){return nm(t.field)},get hideEndGutter(){return tm(t.field)},tableGutterLeft:l,tableGutterRight:c,get rawValue(){return t.row.cell(t.field).value},isChart:n==="chart"})}})]}})),Pn(E=>{var v=!!(t.field.isAtomicField()&&t.field.isNumber()),_=!!(p&&!oI.includes(n)&&u()),A=a;return v!==E.e&&y.classList.toggle("numeric",E.e=v),_!==E.t&&y.classList.toggle("highlight",E.t=_),E.a=wc(y,A,E.a),E},{e:void 0,t:void 0,a:void 0}),y})()},XKe=t=>{var ce;const e=Zo({rowLimit:1/0},t),n=Ox(),r=rc();let i=!1;if(n.root){const ie=(ce=e.data.field.tagParse().tag.tag("table"))==null?void 0:ce.tag("size");ie&&ie.text()==="fill"?i=!0:typeof e.shouldFillWidth=="boolean"&&(i=e.shouldFillWidth)}const s=Fn(()=>Object.entries(n.layout.fieldHeaderRangeMap).sort((re,R)=>re[1].depth<R[1].depth?-1:re[1].depth>R[1].depth?1:re[1].abs[0]<R[1].abs[0]?-1:re[1].abs[0]>R[1].abs[0]?1:0).filter(([re,R])=>{var q;const O=r.fields[re].field,D=O.parentExplore?(q=r.field(O.parentExplore))==null?void 0:q.renderAs:null;return R.depth>=0&&D==="table"}).map(([re,R])=>({fieldKey:re,field:r.fields[re].field,...R}))),o=Fn(()=>Math.max(...s().map(ie=>ie.depth))),u=Fn(()=>Object.entries(n.layout.fieldHeaderRangeMap).filter(([re])=>!r.fields[re].field.isExplore())),a=()=>{const ie=n.layout.fieldLayout(e.data.field).relativeColumnRange,re={"--table-row-span":G7(ie)};if(n.root){let R=0;Object.entries(n.headerSizeStore[0]).sort(([D],[k])=>parseInt(D)-parseInt(k)).forEach(([D,k])=>{re[`--malloy-render--table-header-height-${D}`]=`${k}px`,R+=k,re[`--malloy-render--table-header-cumulative-height-${D}`]=`${R}px`}),re["--total-header-size"]=n.layout.totalHeaderSize;const O=u().map(([D])=>{const k=n.store.columnWidths[D];return i?k?k+"px":"auto":`minmax(${k?k+"px":"auto"}, max-content)`}).join(" ");re["grid-template-columns"]=O}return re},[l,c]=dr(!1),f=Fn(()=>{const ie=[];let re=0;for(const R of e.data){if(re>=e.rowLimit){c(!0);break}ie.push(R),re++}return ie}),x=()=>e.data.field.allFields.filter(ie=>!Lse(ie)),d=()=>s().reduce((re,R)=>((re[R.depth]||(re[R.depth]=[])).push(R),re),[]);let p,m;const[g,y]=dr(!1),[E,v]=dr(!1),_=()=>g()&&!E();tp(()=>{p&&m&&(new IntersectionObserver(([R])=>{y(R.intersectionRatio<1)},{threshold:[1]}).observe(p),new IntersectionObserver(([R])=>{v(R.intersectionRatio<1)},{threshold:[1]}).observe(m))});const A=[];tp(()=>{if(n.root){const[ie,re]=n.headerSizeStore,R=new ResizeObserver(O=>{const D=O.reduce((k,G)=>{const q=G.target.getAttribute("data-depth"),N=G.contentRect.height;return typeof q=="string"&&ie[q]!==N&&(k[q]=N),k},{});Object.entries(D).length>0&&re(k=>({...k,...D}))});A.forEach(O=>{R.observe(O)})}});let S;e.scrollEl&&(S=e.scrollEl);let b;const[C,w]=dr(1e3),I=()=>n.root&&!e.disableVirtualization;I()&&(b=Mse({count:f().length,getScrollElement:()=>S,estimateSize:()=>C()}));const F=b==null?void 0:b.getVirtualItems();let M,U=!1;const X=()=>{U=!0,setTimeout(()=>{U=!1},2e3)};function W(){const ie=M.querySelectorAll("[data-pinned-header]"),re=[];ie.forEach(R=>{const O=R.getAttribute("data-pinned-header"),D=R.clientWidth,k=n.store.columnWidths[O];(typeof k>"u"||D>k)&&re.push([O,D])}),re.length>0&&n.setStore("columnWidths",oC(R=>{re.forEach(([O,D])=>R[O]=D)}))}tp(()=>{M&&(new ResizeObserver(()=>{U&&W()}).observe(M),requestAnimationFrame(()=>W()))}),tp(()=>{if(n.root){let ie=null;new ResizeObserver(R=>{const[O]=R;!U&&ie!==null&&ie!==O.contentRect.width&&n.setStore(D=>({...D,columnWidths:{}})),ie=O.contentRect.width}).observe(S)}});const ae=()=>({"margin-bottom":`calc(-1 * (var(--malloy-render--table-header-cumulative-height-${o()}) - var(--malloy-render--table-header-height-0)))`}),ge=ie=>typeof ie=="number"?[...n.currentRow,ie]:n.currentRow,he=ie=>{ie.stopPropagation(),n.setStore(re=>({...re,highlightedExplore:e.data.field.fieldPath}))},ue=ie=>{const re=[];return ie.field.allFields.filter(O=>O.isAtomicField()&&O.sourceWasDimension()).forEach(O=>{re.push({fieldDef:O.expression,value:ie.cell(O).value})}),re};return(()=>{var ie=WKe();return ie.addEventListener("scroll",X),lo(re=>{e.scrollEl||(S=re)},ie),ie.classList.toggle("full-width",!!i),ie.addEventListener("mouseover",he),Xe(ie,Ge(Or,{get when(){return n.root},get children(){return[(()=>{var re=qKe(),R=p;return typeof R=="function"?lo(R,re):p=re,re})(),(()=>{var re=zKe(),R=m;return typeof R=="function"?lo(R,re):m=re,re})(),(()=>{var re=HKe(),R=M;return typeof R=="function"?lo(R,re):M=re,Xe(re,Ge(Yn,{get each(){return d()},children:(O,D)=>(()=>{var k=VKe();return lo(G=>A[D()]=G,k),Xe(k,Ge(Yn,{each:O,children:G=>Ge(Use,{get field(){return G.field},isPinned:!0})})),Pn(()=>Ji(k,"data-depth",D())),k})()})),Pn(O=>wc(re,ae(),O)),re})()]}}),null),Xe(ie,Ge(Or,{get when(){return I()},get children(){var re=QKe(),R=re.firstChild;return re.style.setProperty("width","100%"),re.style.setProperty("position","relative"),R.style.setProperty("height","fit-content"),R.style.setProperty("width","100%"),Xe(R,Ge(Yn,{each:F,children:O=>(()=>{var D=sI();return lo(k=>queueMicrotask(()=>{b.measureElement(k),O.index===0&&w(k.clientHeight)}),D),Xe(D,Ge(Or,{get when(){return O.index>=0},get children(){return Ge(Yn,{get each(){return x()},children:k=>Ge(qse,{field:k,get row(){return f()[O.index]},get rowPath(){return ge(O.index)},get dimensionContext(){return ue(f()[O.index])}})})}})),Pn(k=>{var G=O.index,q=JSON.stringify(ge(O.index));return G!==k.e&&Ji(D,"data-index",k.e=G),q!==k.t&&Ji(D,"data-row",k.t=q),k},{e:void 0,t:void 0}),D})()})),Pn(O=>{var G;var D=b.getTotalSize()+"px",k=`${((G=F[0])==null?void 0:G.start)??0}px`;return D!==O.e&&((O.e=D)!=null?re.style.setProperty("height",D):re.style.removeProperty("height")),k!==O.t&&((O.t=k)!=null?R.style.setProperty("padding-top",k):R.style.removeProperty("padding-top")),O},{e:void 0,t:void 0}),re}}),null),Xe(ie,Ge(Or,{get when(){return!I()},get children(){return[Ge(Or,{get when(){return!n.root},get children(){var re=sI();return Xe(re,Ge(Yn,{get each(){return x()},children:R=>Ge(Use,{field:R})})),Pn(()=>Ji(re,"data-row",JSON.stringify(ge()))),re}}),Ge(Yn,{get each(){return f()},children:(re,R)=>(()=>{var O=sI();return Xe(O,Ge(Yn,{get each(){return x()},children:D=>Ge(qse,{field:D,row:re,get rowPath(){return ge(R())},get dimensionContext(){return ue(re)}})})),Pn(()=>Ji(O,"data-row",JSON.stringify(ge(R())))),O})()}),Ge(Or,{get when(){return l()},get children(){var re=GKe(),R=re.firstChild,O=R.nextSibling;return O.nextSibling,Xe(re,()=>e.rowLimit,O),re}})]}}),null),Pn(re=>{var R=!!n.root,O=!!_(),D=n.root?"table-container":"",k=a();return R!==re.e&&ie.classList.toggle("root",re.e=R),O!==re.t&&ie.classList.toggle("pinned",re.t=O),D!==re.a&&Ji(ie,"part",re.a=D),re.o=wc(ie,k,re.o),re},{e:void 0,t:void 0,a:void 0,o:void 0}),ie})()},JKe=t=>{const e=rc(),n=!!Ox(),r=Fn(()=>{if(n){const a=Ox(),l=t.data.parentRecord,c=[];return l&&l.field.allFields.filter(x=>x.isAtomicField()&&x.sourceWasDimension()).forEach(x=>{c.push({fieldDef:x.expression,value:l.cell(x).value})}),{...a,root:!1,currentRow:t.currentRow??a.currentRow,currentExplore:t.data.field.fieldPath,dimensionContext:[...a.dimensionContext,...c]}}const[o,u]=CKe();return{root:!0,layout:bKe(e,t.data.field),store:o,setStore:u,headerSizeStore:iC({}),currentRow:[],currentExplore:t.data.field.fieldPath,dimensionContext:[]}});r().root&&oo().addCSSToShadowRoot(TKe);const i=oo().tableConfig,s=()=>Zo(t,{disableVirtualization:typeof t.disableVirtualization=="boolean"?t.disableVirtualization:i().disableVirtualization,rowLimit:typeof t.rowLimit=="number"?t.rowLimit:i().rowLimit,shouldFillWidth:typeof t.shouldFillWidth=="boolean"?t.shouldFillWidth:i().shouldFillWidth});return Ge(Bse.Provider,{get value(){return r()},get children(){return Ge(XKe,Zo(s))}})};HT(["click"]);var KKe=mt('<div class=malloy-list style="text-wrap:wrap;line-height:calc(var(--malloy-render--table-row-height) * 5 / 7 - 1px);">'),ZKe=mt("<span>");function eZe(t){if(t.dataColumn.isNull())return"∅";const e=t.tag.tag("list"),n=t.tag.tag("list_detail");if(!e&&!n)throw new Error("Missing tag for List renderer");if(!t.field.isExplore())throw new Error("List renderer: Field must be ExploreField");if(!t.dataColumn.isArray())throw new Error("List renderer: DataColumn must be DataArray");const r=t.field.allFields.filter(u=>{const{tag:a}=u.tagParse();return!a.has("hidden")})[0],i=!!n,s=t.field.allFields.filter(u=>{const{tag:a}=u.tagParse();return!a.has("hidden")})[1],o=[];for(const u of t.dataColumn)o.push(u);return(()=>{var u=KKe();return Xe(u,Ge(Yn,{each:o,children:(a,l)=>(()=>{var c=ZKe();return Xe(c,()=>Cc({field:r,dataColumn:a.cell(r),resultMetadata:t.resultMetadata,tag:r.tagParse().tag}).renderValue,null),Xe(c,()=>i&&s&&"("+Cc({field:s,dataColumn:a.cell(s),resultMetadata:t.resultMetadata,tag:s.tagParse().tag}).renderValue+")",null),Xe(c,()=>l()<o.length-1&&", ",null),c})()})),u})()}var tZe=mt("<img>");function nZe(t){const e=t.tag.tag("image");if(!e)throw new Error("Missing tag for Image renderer");if(!t.field.isAtomicField())throw new Error("Image renderer: Field must be AtomicField");if(!t.dataColumn.isString())throw new Error("Image renderer: DataColumn must be DataString");const n=e.text("width"),r=e.text("height"),i={};n&&(i.width=n),r&&(i.height=r);let s;const o=e.tag("alt");o&&(s=JW({tag:o,data:t.dataColumn})??o.text());let u;return t.dataColumn.isNull()||(u=t.dataColumn.value),(()=>{var a=tZe();return wc(a,i),Ji(a,"src",u),Ji(a,"alt",s),a})()}const rZe=`.malloy-dashboard {
1679
+ color: hsl(${Math.max(0,Math.min(120-120*m,120))}deg 100% 31%);`,n==null?void 0:n.key)}return(a=n==null?void 0:n.onChange)==null||a.call(n,i),i}}function iI(t,e){if(t===void 0)throw new Error("Unexpected undefined");return t}const OKe=(t,e)=>Math.abs(t-e)<1,RKe=(t,e,n)=>{let r;return function(...i){t.clearTimeout(r),r=t.setTimeout(()=>e.apply(this,i),n)}};var S2={};const DKe=t=>t,wKe=t=>{const e=Math.max(t.startIndex-t.overscan,0),n=Math.min(t.endIndex+t.overscan,t.count-1),r=[];for(let i=e;i<=n;i++)r.push(i);return r},NKe=(t,e)=>{const n=t.scrollElement;if(!n)return;const r=t.targetWindow;if(!r)return;const i=o=>{const{width:u,height:a}=o;e({width:Math.round(u),height:Math.round(a)})};if(i(n.getBoundingClientRect()),!r.ResizeObserver)return()=>{};const s=new r.ResizeObserver(o=>{const u=o[0];if(u!=null&&u.borderBoxSize){const a=u.borderBoxSize[0];if(a){i({width:a.inlineSize,height:a.blockSize});return}}i(n.getBoundingClientRect())});return s.observe(n,{box:"border-box"}),()=>{s.unobserve(n)}},kse={passive:!0},FKe=typeof window>"u"?!0:"onscrollend"in window,LKe=(t,e)=>{const n=t.scrollElement;if(!n)return;const r=t.targetWindow;if(!r)return;let i=0;const s=FKe?()=>{}:RKe(r,()=>{e(i,!1)},t.options.isScrollingResetDelay),o=l=>()=>{const{horizontal:c,isRtl:f}=t.options;i=c?n.scrollLeft*(f&&-1||1):n.scrollTop,s(),e(i,l)},u=o(!0),a=o(!1);return a(),n.addEventListener("scroll",u,kse),n.addEventListener("scrollend",a,kse),()=>{n.removeEventListener("scroll",u),n.removeEventListener("scrollend",a)}},IKe=(t,e,n)=>{if(e!=null&&e.borderBoxSize){const r=e.borderBoxSize[0];if(r)return Math.round(r[n.options.horizontal?"inlineSize":"blockSize"])}return Math.round(t.getBoundingClientRect()[n.options.horizontal?"width":"height"])},$Ke=(t,{adjustments:e=0,behavior:n},r)=>{var i,s;const o=t+e;(s=(i=r.scrollElement)==null?void 0:i.scrollTo)==null||s.call(i,{[r.options.horizontal?"left":"top"]:o,behavior:n})};class BKe{constructor(e){this.unsubs=[],this.scrollElement=null,this.targetWindow=null,this.isScrolling=!1,this.scrollToIndexTimeoutId=null,this.measurementsCache=[],this.itemSizeCache=new Map,this.pendingMeasuredCacheIndexes=[],this.scrollRect=null,this.scrollOffset=null,this.scrollDirection=null,this.scrollAdjustments=0,this.elementsCache=new Map,this.observer=(()=>{let n=null;const r=()=>n||(!this.targetWindow||!this.targetWindow.ResizeObserver?null:n=new this.targetWindow.ResizeObserver(i=>{i.forEach(s=>{this._measureElement(s.target,s)})}));return{disconnect:()=>{var i;return(i=r())==null?void 0:i.disconnect()},observe:i=>{var s;return(s=r())==null?void 0:s.observe(i,{box:"border-box"})},unobserve:i=>{var s;return(s=r())==null?void 0:s.unobserve(i)}}})(),this.range=null,this.setOptions=n=>{Object.entries(n).forEach(([r,i])=>{typeof i>"u"&&delete n[r]}),this.options={debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:DKe,rangeExtractor:wKe,onChange:()=>{},measureElement:IKe,initialRect:{width:0,height:0},scrollMargin:0,gap:0,indexAttribute:"data-index",initialMeasurementsCache:[],lanes:1,isScrollingResetDelay:150,enabled:!0,isRtl:!1,...n}},this.notify=n=>{var r,i;(i=(r=this.options).onChange)==null||i.call(r,this,n)},this.maybeNotify=A2(()=>(this.calculateRange(),[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]),n=>{this.notify(n)},{key:S2.NODE_ENV!=="production"&&"maybeNotify",debug:()=>this.options.debug,initialDeps:[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]}),this.cleanup=()=>{this.unsubs.filter(Boolean).forEach(n=>n()),this.unsubs=[],this.scrollElement=null,this.targetWindow=null,this.observer.disconnect(),this.elementsCache.clear()},this._didMount=()=>()=>{this.cleanup()},this._willUpdate=()=>{var n;const r=this.options.enabled?this.options.getScrollElement():null;if(this.scrollElement!==r){if(this.cleanup(),!r){this.maybeNotify();return}this.scrollElement=r,this.scrollElement&&"ownerDocument"in this.scrollElement?this.targetWindow=this.scrollElement.ownerDocument.defaultView:this.targetWindow=((n=this.scrollElement)==null?void 0:n.window)??null,this._scrollToOffset(this.getScrollOffset(),{adjustments:void 0,behavior:void 0}),this.unsubs.push(this.options.observeElementRect(this,i=>{this.scrollRect=i,this.maybeNotify()})),this.unsubs.push(this.options.observeElementOffset(this,(i,s)=>{this.scrollAdjustments=0,this.scrollDirection=s?this.getScrollOffset()<i?"forward":"backward":null,this.scrollOffset=i,this.isScrolling=s,this.maybeNotify()}))}},this.getSize=()=>this.options.enabled?(this.scrollRect=this.scrollRect??this.options.initialRect,this.scrollRect[this.options.horizontal?"width":"height"]):(this.scrollRect=null,0),this.getScrollOffset=()=>this.options.enabled?(this.scrollOffset=this.scrollOffset??(typeof this.options.initialOffset=="function"?this.options.initialOffset():this.options.initialOffset),this.scrollOffset):(this.scrollOffset=null,0),this.getFurthestMeasurement=(n,r)=>{const i=new Map,s=new Map;for(let o=r-1;o>=0;o--){const u=n[o];if(i.has(u.lane))continue;const a=s.get(u.lane);if(a==null||u.end>a.end?s.set(u.lane,u):u.end<a.end&&i.set(u.lane,!0),i.size===this.options.lanes)break}return s.size===this.options.lanes?Array.from(s.values()).sort((o,u)=>o.end===u.end?o.index-u.index:o.end-u.end)[0]:void 0},this.getMeasurementOptions=A2(()=>[this.options.count,this.options.paddingStart,this.options.scrollMargin,this.options.getItemKey,this.options.enabled],(n,r,i,s,o)=>(this.pendingMeasuredCacheIndexes=[],{count:n,paddingStart:r,scrollMargin:i,getItemKey:s,enabled:o}),{key:!1}),this.getMeasurements=A2(()=>[this.getMeasurementOptions(),this.itemSizeCache],({count:n,paddingStart:r,scrollMargin:i,getItemKey:s,enabled:o},u)=>{if(!o)return this.measurementsCache=[],this.itemSizeCache.clear(),[];this.measurementsCache.length===0&&(this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach(c=>{this.itemSizeCache.set(c.key,c.size)}));const a=this.pendingMeasuredCacheIndexes.length>0?Math.min(...this.pendingMeasuredCacheIndexes):0;this.pendingMeasuredCacheIndexes=[];const l=this.measurementsCache.slice(0,a);for(let c=a;c<n;c++){const f=s(c),x=this.options.lanes===1?l[c-1]:this.getFurthestMeasurement(l,c),d=x?x.end+this.options.gap:r+i,p=u.get(f),m=typeof p=="number"?p:this.options.estimateSize(c),g=d+m,y=x?x.lane:c%this.options.lanes;l[c]={index:c,start:d,size:m,end:g,key:f,lane:y}}return this.measurementsCache=l,l},{key:S2.NODE_ENV!=="production"&&"getMeasurements",debug:()=>this.options.debug}),this.calculateRange=A2(()=>[this.getMeasurements(),this.getSize(),this.getScrollOffset()],(n,r,i)=>this.range=n.length>0&&r>0?kKe({measurements:n,outerSize:r,scrollOffset:i}):null,{key:S2.NODE_ENV!=="production"&&"calculateRange",debug:()=>this.options.debug}),this.getIndexes=A2(()=>[this.options.rangeExtractor,this.calculateRange(),this.options.overscan,this.options.count],(n,r,i,s)=>r===null?[]:n({startIndex:r.startIndex,endIndex:r.endIndex,overscan:i,count:s}),{key:S2.NODE_ENV!=="production"&&"getIndexes",debug:()=>this.options.debug}),this.indexFromElement=n=>{const r=this.options.indexAttribute,i=n.getAttribute(r);return i?parseInt(i,10):(console.warn(`Missing attribute name '${r}={index}' on measured element.`),-1)},this._measureElement=(n,r)=>{const i=this.indexFromElement(n),s=this.measurementsCache[i];if(!s)return;const o=s.key,u=this.elementsCache.get(o);u!==n&&(u&&this.observer.unobserve(u),this.observer.observe(n),this.elementsCache.set(o,n)),n.isConnected&&this.resizeItem(i,this.options.measureElement(n,r,this))},this.resizeItem=(n,r)=>{const i=this.measurementsCache[n];if(!i)return;const s=this.itemSizeCache.get(i.key)??i.size,o=r-s;o!==0&&((this.shouldAdjustScrollPositionOnItemSizeChange!==void 0?this.shouldAdjustScrollPositionOnItemSizeChange(i,o,this):i.start<this.getScrollOffset()+this.scrollAdjustments)&&(S2.NODE_ENV!=="production"&&this.options.debug&&console.info("correction",o),this._scrollToOffset(this.getScrollOffset(),{adjustments:this.scrollAdjustments+=o,behavior:void 0})),this.pendingMeasuredCacheIndexes.push(i.index),this.itemSizeCache=new Map(this.itemSizeCache.set(i.key,r)),this.notify(!1))},this.measureElement=n=>{if(!n){this.elementsCache.forEach((r,i)=>{r.isConnected||(this.observer.unobserve(r),this.elementsCache.delete(i))});return}this._measureElement(n,void 0)},this.getVirtualItems=A2(()=>[this.getIndexes(),this.getMeasurements()],(n,r)=>{const i=[];for(let s=0,o=n.length;s<o;s++){const u=n[s],a=r[u];i.push(a)}return i},{key:S2.NODE_ENV!=="production"&&"getVirtualItems",debug:()=>this.options.debug}),this.getVirtualItemForOffset=n=>{const r=this.getMeasurements();if(r.length!==0)return iI(r[Pse(0,r.length-1,i=>iI(r[i]).start,n)])},this.getOffsetForAlignment=(n,r)=>{const i=this.getSize(),s=this.getScrollOffset();r==="auto"&&(n<=s?r="start":n>=s+i?r="end":r="start"),r==="start"?n=n:r==="end"?n=n-i:r==="center"&&(n=n-i/2);const o=this.options.horizontal?"scrollWidth":"scrollHeight",a=(this.scrollElement?"document"in this.scrollElement?this.scrollElement.document.documentElement[o]:this.scrollElement[o]:0)-i;return Math.max(Math.min(a,n),0)},this.getOffsetForIndex=(n,r="auto")=>{n=Math.max(0,Math.min(n,this.options.count-1));const i=this.measurementsCache[n];if(!i)return;const s=this.getSize(),o=this.getScrollOffset();if(r==="auto")if(i.end>=o+s-this.options.scrollPaddingEnd)r="end";else if(i.start<=o+this.options.scrollPaddingStart)r="start";else return[o,r];const u=r==="end"?i.end+this.options.scrollPaddingEnd:i.start-this.options.scrollPaddingStart;return[this.getOffsetForAlignment(u,r),r]},this.isDynamicMode=()=>this.elementsCache.size>0,this.cancelScrollToIndex=()=>{this.scrollToIndexTimeoutId!==null&&this.targetWindow&&(this.targetWindow.clearTimeout(this.scrollToIndexTimeoutId),this.scrollToIndexTimeoutId=null)},this.scrollToOffset=(n,{align:r="start",behavior:i}={})=>{this.cancelScrollToIndex(),i==="smooth"&&this.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size."),this._scrollToOffset(this.getOffsetForAlignment(n,r),{adjustments:void 0,behavior:i})},this.scrollToIndex=(n,{align:r="auto",behavior:i}={})=>{n=Math.max(0,Math.min(n,this.options.count-1)),this.cancelScrollToIndex(),i==="smooth"&&this.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size.");const s=this.getOffsetForIndex(n,r);if(!s)return;const[o,u]=s;this._scrollToOffset(o,{adjustments:void 0,behavior:i}),i!=="smooth"&&this.isDynamicMode()&&this.targetWindow&&(this.scrollToIndexTimeoutId=this.targetWindow.setTimeout(()=>{if(this.scrollToIndexTimeoutId=null,this.elementsCache.has(this.options.getItemKey(n))){const[l]=iI(this.getOffsetForIndex(n,u));OKe(l,this.getScrollOffset())||this.scrollToIndex(n,{align:u,behavior:i})}else this.scrollToIndex(n,{align:u,behavior:i})}))},this.scrollBy=(n,{behavior:r}={})=>{this.cancelScrollToIndex(),r==="smooth"&&this.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size."),this._scrollToOffset(this.getScrollOffset()+n,{adjustments:void 0,behavior:r})},this.getTotalSize=()=>{var n;const r=this.getMeasurements();let i;return r.length===0?i=this.options.paddingStart:i=this.options.lanes===1?((n=r[r.length-1])==null?void 0:n.end)??0:Math.max(...r.slice(-this.options.lanes).map(s=>s.end)),i-this.options.scrollMargin+this.options.paddingEnd},this._scrollToOffset=(n,{adjustments:r,behavior:i})=>{this.options.scrollToFn(n,{behavior:i,adjustments:r},this)},this.measure=()=>{this.itemSizeCache=new Map,this.notify(!1)},this.setOptions(e)}}const Pse=(t,e,n,r)=>{for(;t<=e;){const i=(t+e)/2|0,s=n(i);if(s<r)t=i+1;else if(s>r)e=i-1;else return i}return t>0?t-1:0};function kKe({measurements:t,outerSize:e,scrollOffset:n}){const r=t.length-1,s=Pse(0,r,u=>t[u].start,n);let o=s;for(;o<r&&t[o].end<n+e;)o++;return{startIndex:s,endIndex:o}}function PKe(t){const e=Zo(t),n=new BKe(e),[r,i]=iC(n.getVirtualItems()),[s,o]=dr(n.getTotalSize()),u={get(l,c){switch(c){case"getVirtualItems":return()=>r;case"getTotalSize":return()=>s();default:return Reflect.get(l,c)}}},a=new Proxy(n,u);return a.setOptions(e),tp(()=>{const l=a._didMount();a._willUpdate(),np(l)}),k0e(()=>{a.setOptions(Zo(e,t,{onChange:(l,c)=>{var f;l._willUpdate(),i(lKe(l.getVirtualItems(),{key:"index"})),o(l.getTotalSize()),(f=t.onChange)==null||f.call(t,l,c)}})),a.measure()}),a}function Mse(t){return PKe(Zo({observeElementRect:NKe,observeElementOffset:LKe,scrollToFn:$Ke},t))}var MKe=mt("<div class=cell-content>"),jKe=mt('<div class="column-cell th">'),UKe=mt('<div class="column-cell td">'),qKe=mt("<div style=position:sticky;left:0px;height:0px;visibility:hidden;>"),zKe=mt("<div style=position:sticky;top:0px;left:0px;height:0px;visibility:hidden;>"),HKe=mt("<div class=pinned-header-row>"),QKe=mt("<div class=table-row><div class=table-row>"),sI=mt("<div class=table-row>"),GKe=mt('<div class="table-row limit-row table-gutter-left table-gutter-right">Limiting nested table to <!> records'),WKe=mt("<div class=malloy-table>"),VKe=mt("<div class=pinned-header-subrow>");const YKe=navigator.userAgent.toLowerCase().indexOf("chrome")>=0,jse=t=>{const e=()=>{const i=Ox().layout,s=t.field.tagParse().tag.tag("column"),o=i.fieldLayout(t.field).width,u=i.fieldLayout(t.field).height,a={};return t.isHeader||(o&&(a.width=`${o}px`,a["min-width"]=`${o}px`,a["max-width"]=`${o}px;`),u&&(a.height=`${u}px`),(s==null?void 0:s.text("word_break"))==="break_all"&&(a["word-break"]="break-all")),a},n=oo(),r=i=>{n.onClick&&n.onClick({field:t.field,displayValue:t.isHeader?t.rawValue:typeof t.value!="function"?t.value:null,value:typeof t.rawValue!="function"?t.rawValue:null,fieldPath:t.field.fieldPath,isHeader:!!t.isHeader,event:i,type:"table-cell"})};return(()=>{var i=MKe();return zB(i,"click",n.onClick?r:void 0),Xe(i,()=>t.value),Pn(s=>{var o=!!t.isHeader,u=!!t.hideStartGutter,a=!!t.hideEndGutter,l=!!t.tableGutterLeft,c=!!t.tableGutterRight,f=!!t.isChart,x=e(),d=typeof t.value=="string"?t.value:"";return o!==s.e&&i.classList.toggle("header",s.e=o),u!==s.t&&i.classList.toggle("hide-start-gutter",s.t=u),a!==s.a&&i.classList.toggle("hide-end-gutter",s.a=a),l!==s.o&&i.classList.toggle("table-gutter-left",s.o=l),c!==s.i&&i.classList.toggle("table-gutter-right",s.i=c),f!==s.n&&i.classList.toggle("chart",s.n=f),s.s=wc(i,x,s.s),d!==s.h&&Ji(i,"title",s.h=d),s},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0}),i})()},Use=t=>{const{layout:e}=Ox(),n=rc(),r=nm(t.field),i=nm(t.field.parentExplore),s=!t.field.parentExplore.isExploreField(),o=r&&(i||s),u=tm(t.field),a=tm(t.field.parentExplore),l=u&&(a||s),c=e.fieldLayout(t.field),f=t.isPinned?c.absoluteColumnRange:c.relativeColumnRange,x=c.depth>0&&nm(t.field)||c.metadata.renderAs==="table",d=c.depth>0&&tm(t.field)||c.depth===0&&c.metadata.renderAs==="table",m=t.field.tagParse().tag.text("label")??t.field.name.replace(/_/g,"_​");return(()=>{var g=jKe();return Xe(g,Ge(jse,{get field(){return t.field},value:m,hideStartGutter:o,hideEndGutter:l,tableGutterLeft:x,tableGutterRight:d,isHeader:!0,get rawValue(){return t.field.name}})),Pn(y=>{var E=t.isPinned?n.getFieldKey(t.field):void 0,v=!!(t.field.isAtomicField()&&t.field.isNumber()),_=!!t.isPinned,A=`${f[0]+1} / span ${G7(f)}`,S=t.isPinned?void 0:`var(--malloy-render--table-header-height-${c.depth})`;return E!==y.e&&Ji(g,"data-pinned-header",y.e=E),v!==y.t&&g.classList.toggle("numeric",y.t=v),_!==y.a&&g.classList.toggle("pinned-header",y.a=_),A!==y.o&&((y.o=A)!=null?g.style.setProperty("grid-column",A):g.style.removeProperty("grid-column")),S!==y.i&&((y.i=S)!=null?g.style.setProperty("height",S):g.style.removeProperty("height")),y},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),g})()},oI=["chart","link"],qse=t=>{let e="",n="";({renderValue:e,renderAs:n}=Cc({field:t.field,dataColumn:t.row.cell(t.field),resultMetadata:rc(),tag:t.field.tagParse().tag,customProps:{table:{rowLimit:100,currentRow:[...t.rowPath]}}}));const i=Ox().layout.fieldLayout(t.field),s=i.relativeColumnRange,o=Ox(),u=()=>JSON.stringify(t.rowPath)===JSON.stringify(o==null?void 0:o.store.highlightedRow)&&JSON.stringify(o==null?void 0:o.currentExplore)===JSON.stringify(o==null?void 0:o.store.highlightedExplore),a={"grid-column":`${s[0]+1} / span ${G7(s)}`,height:"fit-content"};n==="table"?(a.display="grid",a.grid="auto / subgrid"):YKe&&t.field.isAtomicField()&&(a.position="sticky",a.top=`var(--malloy-render--table-header-cumulative-height-${i.depth})`);const l=i.depth>0&&nm(t.field),c=i.depth>0&&tm(t.field),f=()=>{o&&!oI.includes(n)&&o.setStore(y=>({...y,highlightedRow:t.rowPath}))},x=()=>{o.setStore(y=>({...y,highlightedRow:null}))},d=oo(),p=d.tableConfig().enableDrill,m=rc(),g=async y=>{y.stopPropagation(),p&&!oI.includes(n)&&xKe({metadata:m,field:t.field,dimensionContext:[...o.dimensionContext,...t.dimensionContext],onDrill:d.onDrill})};return(()=>{var y=UKe();return y.$$click=g,y.addEventListener("mouseleave",x),y.addEventListener("mouseenter",f),Xe(y,Ge(UB,{get children(){return[Ge(Wy,{when:n==="table",children:e}),Ge(Wy,{when:!0,get children(){return Ge(jse,{get field(){return t.field},value:e,get hideStartGutter(){return nm(t.field)},get hideEndGutter(){return tm(t.field)},tableGutterLeft:l,tableGutterRight:c,get rawValue(){return t.row.cell(t.field).value},isChart:n==="chart"})}})]}})),Pn(E=>{var v=!!(t.field.isAtomicField()&&t.field.isNumber()),_=!!(p&&!oI.includes(n)&&u()),A=a;return v!==E.e&&y.classList.toggle("numeric",E.e=v),_!==E.t&&y.classList.toggle("highlight",E.t=_),E.a=wc(y,A,E.a),E},{e:void 0,t:void 0,a:void 0}),y})()},XKe=t=>{var ce;const e=Zo({rowLimit:1/0},t),n=Ox(),r=rc();let i=!1;if(n.root){const ie=(ce=e.data.field.tagParse().tag.tag("table"))==null?void 0:ce.tag("size");ie&&ie.text()==="fill"?i=!0:typeof e.shouldFillWidth=="boolean"&&(i=e.shouldFillWidth)}const s=Fn(()=>Object.entries(n.layout.fieldHeaderRangeMap).sort((re,R)=>re[1].depth<R[1].depth?-1:re[1].depth>R[1].depth?1:re[1].abs[0]<R[1].abs[0]?-1:re[1].abs[0]>R[1].abs[0]?1:0).filter(([re,R])=>{var q;const O=r.fields[re].field,D=O.parentExplore?(q=r.field(O.parentExplore))==null?void 0:q.renderAs:null;return R.depth>=0&&D==="table"}).map(([re,R])=>({fieldKey:re,field:r.fields[re].field,...R}))),o=Fn(()=>Math.max(...s().map(ie=>ie.depth))),u=Fn(()=>Object.entries(n.layout.fieldHeaderRangeMap).filter(([re])=>!r.fields[re].field.isExplore())),a=()=>{const ie=n.layout.fieldLayout(e.data.field).relativeColumnRange,re={"--table-row-span":G7(ie)};if(n.root){let R=0;Object.entries(n.headerSizeStore[0]).sort(([D],[k])=>parseInt(D)-parseInt(k)).forEach(([D,k])=>{re[`--malloy-render--table-header-height-${D}`]=`${k}px`,R+=k,re[`--malloy-render--table-header-cumulative-height-${D}`]=`${R}px`}),re["--total-header-size"]=n.layout.totalHeaderSize;const O=u().map(([D])=>{const k=n.store.columnWidths[D];return i?k?k+"px":"auto":`minmax(${k?k+"px":"auto"}, max-content)`}).join(" ");re["grid-template-columns"]=O}return re},[l,c]=dr(!1),f=Fn(()=>{const ie=[];let re=0;for(const R of e.data){if(re>=e.rowLimit){c(!0);break}ie.push(R),re++}return ie}),x=()=>e.data.field.allFields.filter(ie=>!Lse(ie)),d=()=>s().reduce((re,R)=>((re[R.depth]||(re[R.depth]=[])).push(R),re),[]);let p,m;const[g,y]=dr(!1),[E,v]=dr(!1),_=()=>g()&&!E();tp(()=>{p&&m&&(new IntersectionObserver(([R])=>{y(R.intersectionRatio<1)},{threshold:[1]}).observe(p),new IntersectionObserver(([R])=>{v(R.intersectionRatio<1)},{threshold:[1]}).observe(m))});const A=[];tp(()=>{if(n.root){const[ie,re]=n.headerSizeStore,R=new ResizeObserver(O=>{const D=O.reduce((k,G)=>{const q=G.target.getAttribute("data-depth"),N=G.contentRect.height;return typeof q=="string"&&ie[q]!==N&&(k[q]=N),k},{});Object.entries(D).length>0&&re(k=>({...k,...D}))});A.forEach(O=>{R.observe(O)})}});let S;e.scrollEl&&(S=e.scrollEl);let b;const[C,w]=dr(1e3),I=()=>n.root&&!e.disableVirtualization;I()&&(b=Mse({count:f().length,getScrollElement:()=>S,estimateSize:()=>C()}));const F=b==null?void 0:b.getVirtualItems();let M,U=!1;const X=()=>{U=!0,setTimeout(()=>{U=!1},2e3)};function W(){const ie=M.querySelectorAll("[data-pinned-header]"),re=[];ie.forEach(R=>{const O=R.getAttribute("data-pinned-header"),D=R.clientWidth,k=n.store.columnWidths[O];(typeof k>"u"||D>k)&&re.push([O,D])}),re.length>0&&n.setStore("columnWidths",oC(R=>{re.forEach(([O,D])=>R[O]=D)}))}tp(()=>{M&&(new ResizeObserver(()=>{U&&W()}).observe(M),requestAnimationFrame(()=>W()))}),tp(()=>{if(n.root){let ie=null;new ResizeObserver(R=>{const[O]=R;!U&&ie!==null&&ie!==O.contentRect.width&&n.setStore(D=>({...D,columnWidths:{}})),ie=O.contentRect.width}).observe(S)}});const ae=()=>({"margin-bottom":`calc(-1 * (var(--malloy-render--table-header-cumulative-height-${o()}) - var(--malloy-render--table-header-height-0)))`}),ge=ie=>typeof ie=="number"?[...n.currentRow,ie]:n.currentRow,he=ie=>{ie.stopPropagation(),n.setStore(re=>({...re,highlightedExplore:e.data.field.fieldPath}))},ue=ie=>{const re=[];return ie.field.allFields.filter(O=>O.isAtomicField()&&O.sourceWasDimension()).forEach(O=>{re.push({fieldDef:O.expression,value:ie.cell(O).value})}),re};return(()=>{var ie=WKe();return ie.addEventListener("scroll",X),lo(re=>{e.scrollEl||(S=re)},ie),ie.classList.toggle("full-width",!!i),ie.addEventListener("mouseover",he),Xe(ie,Ge(Or,{get when(){return n.root},get children(){return[(()=>{var re=qKe(),R=p;return typeof R=="function"?lo(R,re):p=re,re})(),(()=>{var re=zKe(),R=m;return typeof R=="function"?lo(R,re):m=re,re})(),(()=>{var re=HKe(),R=M;return typeof R=="function"?lo(R,re):M=re,Xe(re,Ge(Yn,{get each(){return d()},children:(O,D)=>(()=>{var k=VKe();return lo(G=>A[D()]=G,k),Xe(k,Ge(Yn,{each:O,children:G=>Ge(Use,{get field(){return G.field},isPinned:!0})})),Pn(()=>Ji(k,"data-depth",D())),k})()})),Pn(O=>wc(re,ae(),O)),re})()]}}),null),Xe(ie,Ge(Or,{get when(){return I()},get children(){var re=QKe(),R=re.firstChild;return re.style.setProperty("width","100%"),re.style.setProperty("position","relative"),R.style.setProperty("height","fit-content"),R.style.setProperty("width","100%"),Xe(R,Ge(Yn,{each:F,children:O=>(()=>{var D=sI();return lo(k=>queueMicrotask(()=>{b.measureElement(k),O.index===0&&w(k.clientHeight)}),D),Xe(D,Ge(Or,{get when(){return O.index>=0},get children(){return Ge(Yn,{get each(){return x()},children:k=>Ge(qse,{field:k,get row(){return f()[O.index]},get rowPath(){return ge(O.index)},get dimensionContext(){return ue(f()[O.index])}})})}})),Pn(k=>{var G=O.index,q=JSON.stringify(ge(O.index));return G!==k.e&&Ji(D,"data-index",k.e=G),q!==k.t&&Ji(D,"data-row",k.t=q),k},{e:void 0,t:void 0}),D})()})),Pn(O=>{var G;var D=b.getTotalSize()+"px",k=`${((G=F[0])==null?void 0:G.start)??0}px`;return D!==O.e&&((O.e=D)!=null?re.style.setProperty("height",D):re.style.removeProperty("height")),k!==O.t&&((O.t=k)!=null?R.style.setProperty("padding-top",k):R.style.removeProperty("padding-top")),O},{e:void 0,t:void 0}),re}}),null),Xe(ie,Ge(Or,{get when(){return!I()},get children(){return[Ge(Or,{get when(){return!n.root},get children(){var re=sI();return Xe(re,Ge(Yn,{get each(){return x()},children:R=>Ge(Use,{field:R})})),Pn(()=>Ji(re,"data-row",JSON.stringify(ge()))),re}}),Ge(Yn,{get each(){return f()},children:(re,R)=>(()=>{var O=sI();return Xe(O,Ge(Yn,{get each(){return x()},children:D=>Ge(qse,{field:D,row:re,get rowPath(){return ge(R())},get dimensionContext(){return ue(re)}})})),Pn(()=>Ji(O,"data-row",JSON.stringify(ge(R())))),O})()}),Ge(Or,{get when(){return l()},get children(){var re=GKe(),R=re.firstChild,O=R.nextSibling;return O.nextSibling,Xe(re,()=>e.rowLimit,O),re}})]}}),null),Pn(re=>{var R=!!n.root,O=!!_(),D=n.root?"table-container":"",k=a();return R!==re.e&&ie.classList.toggle("root",re.e=R),O!==re.t&&ie.classList.toggle("pinned",re.t=O),D!==re.a&&Ji(ie,"part",re.a=D),re.o=wc(ie,k,re.o),re},{e:void 0,t:void 0,a:void 0,o:void 0}),ie})()},JKe=t=>{const e=rc(),n=!!Ox(),r=Fn(()=>{if(n){const a=Ox(),l=t.data.parentRecord,c=[];return l&&l.field.allFields.filter(x=>x.isAtomicField()&&x.sourceWasDimension()).forEach(x=>{c.push({fieldDef:x.expression,value:l.cell(x).value})}),{...a,root:!1,currentRow:t.currentRow??a.currentRow,currentExplore:t.data.field.fieldPath,dimensionContext:[...a.dimensionContext,...c]}}const[o,u]=CKe();return{root:!0,layout:bKe(e,t.data.field),store:o,setStore:u,headerSizeStore:iC({}),currentRow:[],currentExplore:t.data.field.fieldPath,dimensionContext:[]}});r().root&&oo().addCSSToShadowRoot(TKe);const i=oo().tableConfig,s=()=>Zo(t,{disableVirtualization:typeof t.disableVirtualization=="boolean"?t.disableVirtualization:i().disableVirtualization,rowLimit:typeof t.rowLimit=="number"?t.rowLimit:i().rowLimit,shouldFillWidth:typeof t.shouldFillWidth=="boolean"?t.shouldFillWidth:i().shouldFillWidth});return Ge(Bse.Provider,{get value(){return r()},get children(){return Ge(XKe,Zo(s))}})};HT(["click"]);var KKe=mt('<div class=malloy-list style="text-wrap:wrap;line-height:calc(var(--malloy-render--table-row-height) * 5 / 7 - 1px);">'),ZKe=mt("<span>");function eZe(t){if(t.dataColumn.isNull())return"∅";const e=t.tag.tag("list"),n=t.tag.tag("list_detail");if(!e&&!n)throw new Error("Missing tag for List renderer");if(!t.field.isExplore())throw new Error("List renderer: Field must be ExploreField");if(!t.dataColumn.isArray())throw new Error("List renderer: DataColumn must be DataArray");const r=t.field.allFields.filter(u=>{const{tag:a}=u.tagParse();return!a.has("hidden")})[0],i=!!n,s=t.field.allFields.filter(u=>{const{tag:a}=u.tagParse();return!a.has("hidden")})[1],o=[];for(const u of t.dataColumn)o.push(u);return(()=>{var u=KKe();return Xe(u,Ge(Yn,{each:o,children:(a,l)=>(()=>{var c=ZKe();return Xe(c,()=>Cc({field:r,dataColumn:a.cell(r),resultMetadata:t.resultMetadata,tag:r.tagParse().tag}).renderValue,null),Xe(c,()=>i&&s&&"("+Cc({field:s,dataColumn:a.cell(s),resultMetadata:t.resultMetadata,tag:s.tagParse().tag}).renderValue+")",null),Xe(c,()=>l()<o.length-1&&", ",null),c})()})),u})()}var tZe=mt("<img>");function nZe(t){const e=t.tag.tag("image");if(!e)throw new Error("Missing tag for Image renderer");if(!t.field.isAtomicField())throw new Error("Image renderer: Field must be AtomicField");if(!t.dataColumn.isString())throw new Error("Image renderer: DataColumn must be DataString");const n=e.text("width"),r=e.text("height"),i={};n&&(i.width=n),r&&(i.height=r);let s;const o=e.tag("alt");o&&(s=JW({tag:o,data:t.dataColumn})??o.text());let u;return t.dataColumn.isNull()||(u=t.dataColumn.value),(()=>{var a=tZe();return wc(a,i),Ji(a,"src",u),Ji(a,"alt",s),a})()}const rZe=`.malloy-dashboard {
1680
1680
  background: #f7f9fc;
1681
1681
  width: 100%;
1682
1682
  height: 100%;
@@ -83271,7 +83271,7 @@ const cZe = navigator.userAgent.toLowerCase().indexOf("chrome") >= 0, fZe = cZe,
83271
83271
  i: void 0
83272
83272
  }), g;
83273
83273
  })();
83274
- }, ER = ["chart"], jH = (t) => {
83274
+ }, ER = ["chart", "link"], jH = (t) => {
83275
83275
  let e = "", n = "";
83276
83276
  ({
83277
83277
  renderValue: e,
@@ -1676,7 +1676,7 @@ ${o}
1676
1676
  `;function A2(t,e,n){let r=n.initialDeps??[],i;return()=>{var s,o,u,a;let l;n.key&&((s=n.debug)!=null&&s.call(n))&&(l=Date.now());const c=t();if(!(c.length!==r.length||c.some((d,p)=>r[p]!==d)))return i;r=c;let x;if(n.key&&((o=n.debug)!=null&&o.call(n))&&(x=Date.now()),i=e(...c),n.key&&((u=n.debug)!=null&&u.call(n))){const d=Math.round((Date.now()-l)*100)/100,p=Math.round((Date.now()-x)*100)/100,m=p/16,g=(y,E)=>{for(y=String(y);y.length<E;)y=" "+y;return y};console.info(`%c⏱ ${g(p,5)} /${g(d,5)} ms`,`
1677
1677
  font-size: .6rem;
1678
1678
  font-weight: bold;
1679
- color: hsl(${Math.max(0,Math.min(120-120*m,120))}deg 100% 31%);`,n==null?void 0:n.key)}return(a=n==null?void 0:n.onChange)==null||a.call(n,i),i}}function rI(t,e){if(t===void 0)throw new Error("Unexpected undefined");return t}const OKe=(t,e)=>Math.abs(t-e)<1,RKe=(t,e,n)=>{let r;return function(...i){t.clearTimeout(r),r=t.setTimeout(()=>e.apply(this,i),n)}};var S2={};const DKe=t=>t,wKe=t=>{const e=Math.max(t.startIndex-t.overscan,0),n=Math.min(t.endIndex+t.overscan,t.count-1),r=[];for(let i=e;i<=n;i++)r.push(i);return r},NKe=(t,e)=>{const n=t.scrollElement;if(!n)return;const r=t.targetWindow;if(!r)return;const i=o=>{const{width:u,height:a}=o;e({width:Math.round(u),height:Math.round(a)})};if(i(n.getBoundingClientRect()),!r.ResizeObserver)return()=>{};const s=new r.ResizeObserver(o=>{const u=o[0];if(u!=null&&u.borderBoxSize){const a=u.borderBoxSize[0];if(a){i({width:a.inlineSize,height:a.blockSize});return}}i(n.getBoundingClientRect())});return s.observe(n,{box:"border-box"}),()=>{s.unobserve(n)}},Bse={passive:!0},FKe=typeof window>"u"?!0:"onscrollend"in window,LKe=(t,e)=>{const n=t.scrollElement;if(!n)return;const r=t.targetWindow;if(!r)return;let i=0;const s=FKe?()=>{}:RKe(r,()=>{e(i,!1)},t.options.isScrollingResetDelay),o=l=>()=>{const{horizontal:c,isRtl:f}=t.options;i=c?n.scrollLeft*(f&&-1||1):n.scrollTop,s(),e(i,l)},u=o(!0),a=o(!1);return a(),n.addEventListener("scroll",u,Bse),n.addEventListener("scrollend",a,Bse),()=>{n.removeEventListener("scroll",u),n.removeEventListener("scrollend",a)}},IKe=(t,e,n)=>{if(e!=null&&e.borderBoxSize){const r=e.borderBoxSize[0];if(r)return Math.round(r[n.options.horizontal?"inlineSize":"blockSize"])}return Math.round(t.getBoundingClientRect()[n.options.horizontal?"width":"height"])},$Ke=(t,{adjustments:e=0,behavior:n},r)=>{var i,s;const o=t+e;(s=(i=r.scrollElement)==null?void 0:i.scrollTo)==null||s.call(i,{[r.options.horizontal?"left":"top"]:o,behavior:n})};class BKe{constructor(e){this.unsubs=[],this.scrollElement=null,this.targetWindow=null,this.isScrolling=!1,this.scrollToIndexTimeoutId=null,this.measurementsCache=[],this.itemSizeCache=new Map,this.pendingMeasuredCacheIndexes=[],this.scrollRect=null,this.scrollOffset=null,this.scrollDirection=null,this.scrollAdjustments=0,this.elementsCache=new Map,this.observer=(()=>{let n=null;const r=()=>n||(!this.targetWindow||!this.targetWindow.ResizeObserver?null:n=new this.targetWindow.ResizeObserver(i=>{i.forEach(s=>{this._measureElement(s.target,s)})}));return{disconnect:()=>{var i;return(i=r())==null?void 0:i.disconnect()},observe:i=>{var s;return(s=r())==null?void 0:s.observe(i,{box:"border-box"})},unobserve:i=>{var s;return(s=r())==null?void 0:s.unobserve(i)}}})(),this.range=null,this.setOptions=n=>{Object.entries(n).forEach(([r,i])=>{typeof i>"u"&&delete n[r]}),this.options={debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:DKe,rangeExtractor:wKe,onChange:()=>{},measureElement:IKe,initialRect:{width:0,height:0},scrollMargin:0,gap:0,indexAttribute:"data-index",initialMeasurementsCache:[],lanes:1,isScrollingResetDelay:150,enabled:!0,isRtl:!1,...n}},this.notify=n=>{var r,i;(i=(r=this.options).onChange)==null||i.call(r,this,n)},this.maybeNotify=A2(()=>(this.calculateRange(),[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]),n=>{this.notify(n)},{key:S2.NODE_ENV!=="production"&&"maybeNotify",debug:()=>this.options.debug,initialDeps:[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]}),this.cleanup=()=>{this.unsubs.filter(Boolean).forEach(n=>n()),this.unsubs=[],this.scrollElement=null,this.targetWindow=null,this.observer.disconnect(),this.elementsCache.clear()},this._didMount=()=>()=>{this.cleanup()},this._willUpdate=()=>{var n;const r=this.options.enabled?this.options.getScrollElement():null;if(this.scrollElement!==r){if(this.cleanup(),!r){this.maybeNotify();return}this.scrollElement=r,this.scrollElement&&"ownerDocument"in this.scrollElement?this.targetWindow=this.scrollElement.ownerDocument.defaultView:this.targetWindow=((n=this.scrollElement)==null?void 0:n.window)??null,this._scrollToOffset(this.getScrollOffset(),{adjustments:void 0,behavior:void 0}),this.unsubs.push(this.options.observeElementRect(this,i=>{this.scrollRect=i,this.maybeNotify()})),this.unsubs.push(this.options.observeElementOffset(this,(i,s)=>{this.scrollAdjustments=0,this.scrollDirection=s?this.getScrollOffset()<i?"forward":"backward":null,this.scrollOffset=i,this.isScrolling=s,this.maybeNotify()}))}},this.getSize=()=>this.options.enabled?(this.scrollRect=this.scrollRect??this.options.initialRect,this.scrollRect[this.options.horizontal?"width":"height"]):(this.scrollRect=null,0),this.getScrollOffset=()=>this.options.enabled?(this.scrollOffset=this.scrollOffset??(typeof this.options.initialOffset=="function"?this.options.initialOffset():this.options.initialOffset),this.scrollOffset):(this.scrollOffset=null,0),this.getFurthestMeasurement=(n,r)=>{const i=new Map,s=new Map;for(let o=r-1;o>=0;o--){const u=n[o];if(i.has(u.lane))continue;const a=s.get(u.lane);if(a==null||u.end>a.end?s.set(u.lane,u):u.end<a.end&&i.set(u.lane,!0),i.size===this.options.lanes)break}return s.size===this.options.lanes?Array.from(s.values()).sort((o,u)=>o.end===u.end?o.index-u.index:o.end-u.end)[0]:void 0},this.getMeasurementOptions=A2(()=>[this.options.count,this.options.paddingStart,this.options.scrollMargin,this.options.getItemKey,this.options.enabled],(n,r,i,s,o)=>(this.pendingMeasuredCacheIndexes=[],{count:n,paddingStart:r,scrollMargin:i,getItemKey:s,enabled:o}),{key:!1}),this.getMeasurements=A2(()=>[this.getMeasurementOptions(),this.itemSizeCache],({count:n,paddingStart:r,scrollMargin:i,getItemKey:s,enabled:o},u)=>{if(!o)return this.measurementsCache=[],this.itemSizeCache.clear(),[];this.measurementsCache.length===0&&(this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach(c=>{this.itemSizeCache.set(c.key,c.size)}));const a=this.pendingMeasuredCacheIndexes.length>0?Math.min(...this.pendingMeasuredCacheIndexes):0;this.pendingMeasuredCacheIndexes=[];const l=this.measurementsCache.slice(0,a);for(let c=a;c<n;c++){const f=s(c),x=this.options.lanes===1?l[c-1]:this.getFurthestMeasurement(l,c),d=x?x.end+this.options.gap:r+i,p=u.get(f),m=typeof p=="number"?p:this.options.estimateSize(c),g=d+m,y=x?x.lane:c%this.options.lanes;l[c]={index:c,start:d,size:m,end:g,key:f,lane:y}}return this.measurementsCache=l,l},{key:S2.NODE_ENV!=="production"&&"getMeasurements",debug:()=>this.options.debug}),this.calculateRange=A2(()=>[this.getMeasurements(),this.getSize(),this.getScrollOffset()],(n,r,i)=>this.range=n.length>0&&r>0?kKe({measurements:n,outerSize:r,scrollOffset:i}):null,{key:S2.NODE_ENV!=="production"&&"calculateRange",debug:()=>this.options.debug}),this.getIndexes=A2(()=>[this.options.rangeExtractor,this.calculateRange(),this.options.overscan,this.options.count],(n,r,i,s)=>r===null?[]:n({startIndex:r.startIndex,endIndex:r.endIndex,overscan:i,count:s}),{key:S2.NODE_ENV!=="production"&&"getIndexes",debug:()=>this.options.debug}),this.indexFromElement=n=>{const r=this.options.indexAttribute,i=n.getAttribute(r);return i?parseInt(i,10):(console.warn(`Missing attribute name '${r}={index}' on measured element.`),-1)},this._measureElement=(n,r)=>{const i=this.indexFromElement(n),s=this.measurementsCache[i];if(!s)return;const o=s.key,u=this.elementsCache.get(o);u!==n&&(u&&this.observer.unobserve(u),this.observer.observe(n),this.elementsCache.set(o,n)),n.isConnected&&this.resizeItem(i,this.options.measureElement(n,r,this))},this.resizeItem=(n,r)=>{const i=this.measurementsCache[n];if(!i)return;const s=this.itemSizeCache.get(i.key)??i.size,o=r-s;o!==0&&((this.shouldAdjustScrollPositionOnItemSizeChange!==void 0?this.shouldAdjustScrollPositionOnItemSizeChange(i,o,this):i.start<this.getScrollOffset()+this.scrollAdjustments)&&(S2.NODE_ENV!=="production"&&this.options.debug&&console.info("correction",o),this._scrollToOffset(this.getScrollOffset(),{adjustments:this.scrollAdjustments+=o,behavior:void 0})),this.pendingMeasuredCacheIndexes.push(i.index),this.itemSizeCache=new Map(this.itemSizeCache.set(i.key,r)),this.notify(!1))},this.measureElement=n=>{if(!n){this.elementsCache.forEach((r,i)=>{r.isConnected||(this.observer.unobserve(r),this.elementsCache.delete(i))});return}this._measureElement(n,void 0)},this.getVirtualItems=A2(()=>[this.getIndexes(),this.getMeasurements()],(n,r)=>{const i=[];for(let s=0,o=n.length;s<o;s++){const u=n[s],a=r[u];i.push(a)}return i},{key:S2.NODE_ENV!=="production"&&"getVirtualItems",debug:()=>this.options.debug}),this.getVirtualItemForOffset=n=>{const r=this.getMeasurements();if(r.length!==0)return rI(r[kse(0,r.length-1,i=>rI(r[i]).start,n)])},this.getOffsetForAlignment=(n,r)=>{const i=this.getSize(),s=this.getScrollOffset();r==="auto"&&(n<=s?r="start":n>=s+i?r="end":r="start"),r==="start"?n=n:r==="end"?n=n-i:r==="center"&&(n=n-i/2);const o=this.options.horizontal?"scrollWidth":"scrollHeight",a=(this.scrollElement?"document"in this.scrollElement?this.scrollElement.document.documentElement[o]:this.scrollElement[o]:0)-i;return Math.max(Math.min(a,n),0)},this.getOffsetForIndex=(n,r="auto")=>{n=Math.max(0,Math.min(n,this.options.count-1));const i=this.measurementsCache[n];if(!i)return;const s=this.getSize(),o=this.getScrollOffset();if(r==="auto")if(i.end>=o+s-this.options.scrollPaddingEnd)r="end";else if(i.start<=o+this.options.scrollPaddingStart)r="start";else return[o,r];const u=r==="end"?i.end+this.options.scrollPaddingEnd:i.start-this.options.scrollPaddingStart;return[this.getOffsetForAlignment(u,r),r]},this.isDynamicMode=()=>this.elementsCache.size>0,this.cancelScrollToIndex=()=>{this.scrollToIndexTimeoutId!==null&&this.targetWindow&&(this.targetWindow.clearTimeout(this.scrollToIndexTimeoutId),this.scrollToIndexTimeoutId=null)},this.scrollToOffset=(n,{align:r="start",behavior:i}={})=>{this.cancelScrollToIndex(),i==="smooth"&&this.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size."),this._scrollToOffset(this.getOffsetForAlignment(n,r),{adjustments:void 0,behavior:i})},this.scrollToIndex=(n,{align:r="auto",behavior:i}={})=>{n=Math.max(0,Math.min(n,this.options.count-1)),this.cancelScrollToIndex(),i==="smooth"&&this.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size.");const s=this.getOffsetForIndex(n,r);if(!s)return;const[o,u]=s;this._scrollToOffset(o,{adjustments:void 0,behavior:i}),i!=="smooth"&&this.isDynamicMode()&&this.targetWindow&&(this.scrollToIndexTimeoutId=this.targetWindow.setTimeout(()=>{if(this.scrollToIndexTimeoutId=null,this.elementsCache.has(this.options.getItemKey(n))){const[l]=rI(this.getOffsetForIndex(n,u));OKe(l,this.getScrollOffset())||this.scrollToIndex(n,{align:u,behavior:i})}else this.scrollToIndex(n,{align:u,behavior:i})}))},this.scrollBy=(n,{behavior:r}={})=>{this.cancelScrollToIndex(),r==="smooth"&&this.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size."),this._scrollToOffset(this.getScrollOffset()+n,{adjustments:void 0,behavior:r})},this.getTotalSize=()=>{var n;const r=this.getMeasurements();let i;return r.length===0?i=this.options.paddingStart:i=this.options.lanes===1?((n=r[r.length-1])==null?void 0:n.end)??0:Math.max(...r.slice(-this.options.lanes).map(s=>s.end)),i-this.options.scrollMargin+this.options.paddingEnd},this._scrollToOffset=(n,{adjustments:r,behavior:i})=>{this.options.scrollToFn(n,{behavior:i,adjustments:r},this)},this.measure=()=>{this.itemSizeCache=new Map,this.notify(!1)},this.setOptions(e)}}const kse=(t,e,n,r)=>{for(;t<=e;){const i=(t+e)/2|0,s=n(i);if(s<r)t=i+1;else if(s>r)e=i-1;else return i}return t>0?t-1:0};function kKe({measurements:t,outerSize:e,scrollOffset:n}){const r=t.length-1,s=kse(0,r,u=>t[u].start,n);let o=s;for(;o<r&&t[o].end<n+e;)o++;return{startIndex:s,endIndex:o}}function PKe(t){const e=Zo(t),n=new BKe(e),[r,i]=rC(n.getVirtualItems()),[s,o]=dr(n.getTotalSize()),u={get(l,c){switch(c){case"getVirtualItems":return()=>r;case"getTotalSize":return()=>s();default:return Reflect.get(l,c)}}},a=new Proxy(n,u);return a.setOptions(e),Z2(()=>{const l=a._didMount();a._willUpdate(),ep(l)}),k0e(()=>{a.setOptions(Zo(e,t,{onChange:(l,c)=>{var f;l._willUpdate(),i(lKe(l.getVirtualItems(),{key:"index"})),o(l.getTotalSize()),(f=t.onChange)==null||f.call(t,l,c)}})),a.measure()}),a}function Pse(t){return PKe(Zo({observeElementRect:NKe,observeElementOffset:LKe,scrollToFn:$Ke},t))}var MKe=mt("<div class=cell-content>"),jKe=mt('<div class="column-cell th">'),UKe=mt('<div class="column-cell td">'),qKe=mt("<div style=position:sticky;left:0px;height:0px;visibility:hidden;>"),zKe=mt("<div style=position:sticky;top:0px;left:0px;height:0px;visibility:hidden;>"),HKe=mt("<div class=pinned-header-row>"),QKe=mt("<div class=table-row><div class=table-row>"),iI=mt("<div class=table-row>"),GKe=mt('<div class="table-row limit-row table-gutter-left table-gutter-right">Limiting nested table to <!> records'),WKe=mt("<div class=malloy-table>"),VKe=mt("<div class=pinned-header-subrow>");const YKe=navigator.userAgent.toLowerCase().indexOf("chrome")>=0,Mse=t=>{const e=()=>{const i=Ox().layout,s=t.field.tagParse().tag.tag("column"),o=i.fieldLayout(t.field).width,u=i.fieldLayout(t.field).height,a={};return t.isHeader||(o&&(a.width=`${o}px`,a["min-width"]=`${o}px`,a["max-width"]=`${o}px;`),u&&(a.height=`${u}px`),(s==null?void 0:s.text("word_break"))==="break_all"&&(a["word-break"]="break-all")),a},n=oo(),r=i=>{n.onClick&&n.onClick({field:t.field,displayValue:t.isHeader?t.rawValue:typeof t.value!="function"?t.value:null,value:typeof t.rawValue!="function"?t.rawValue:null,fieldPath:t.field.fieldPath,isHeader:!!t.isHeader,event:i,type:"table-cell"})};return(()=>{var i=MKe();return qB(i,"click",n.onClick?r:void 0),Xe(i,()=>t.value),Pn(s=>{var o=!!t.isHeader,u=!!t.hideStartGutter,a=!!t.hideEndGutter,l=!!t.tableGutterLeft,c=!!t.tableGutterRight,f=!!t.isChart,x=e(),d=typeof t.value=="string"?t.value:"";return o!==s.e&&i.classList.toggle("header",s.e=o),u!==s.t&&i.classList.toggle("hide-start-gutter",s.t=u),a!==s.a&&i.classList.toggle("hide-end-gutter",s.a=a),l!==s.o&&i.classList.toggle("table-gutter-left",s.o=l),c!==s.i&&i.classList.toggle("table-gutter-right",s.i=c),f!==s.n&&i.classList.toggle("chart",s.n=f),s.s=wc(i,x,s.s),d!==s.h&&Ji(i,"title",s.h=d),s},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0}),i})()},jse=t=>{const{layout:e}=Ox(),n=rc(),r=em(t.field),i=em(t.field.parentExplore),s=!t.field.parentExplore.isExploreField(),o=r&&(i||s),u=Zg(t.field),a=Zg(t.field.parentExplore),l=u&&(a||s),c=e.fieldLayout(t.field),f=t.isPinned?c.absoluteColumnRange:c.relativeColumnRange,x=c.depth>0&&em(t.field)||c.metadata.renderAs==="table",d=c.depth>0&&Zg(t.field)||c.depth===0&&c.metadata.renderAs==="table",m=t.field.tagParse().tag.text("label")??t.field.name.replace(/_/g,"_​");return(()=>{var g=jKe();return Xe(g,Ge(Mse,{get field(){return t.field},value:m,hideStartGutter:o,hideEndGutter:l,tableGutterLeft:x,tableGutterRight:d,isHeader:!0,get rawValue(){return t.field.name}})),Pn(y=>{var E=t.isPinned?n.getFieldKey(t.field):void 0,v=!!(t.field.isAtomicField()&&t.field.isNumber()),_=!!t.isPinned,A=`${f[0]+1} / span ${Q7(f)}`,S=t.isPinned?void 0:`var(--malloy-render--table-header-height-${c.depth})`;return E!==y.e&&Ji(g,"data-pinned-header",y.e=E),v!==y.t&&g.classList.toggle("numeric",y.t=v),_!==y.a&&g.classList.toggle("pinned-header",y.a=_),A!==y.o&&((y.o=A)!=null?g.style.setProperty("grid-column",A):g.style.removeProperty("grid-column")),S!==y.i&&((y.i=S)!=null?g.style.setProperty("height",S):g.style.removeProperty("height")),y},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),g})()},sI=["chart"],Use=t=>{let e="",n="";({renderValue:e,renderAs:n}=Cc({field:t.field,dataColumn:t.row.cell(t.field),resultMetadata:rc(),tag:t.field.tagParse().tag,customProps:{table:{rowLimit:100,currentRow:[...t.rowPath]}}}));const i=Ox().layout.fieldLayout(t.field),s=i.relativeColumnRange,o=Ox(),u=()=>JSON.stringify(t.rowPath)===JSON.stringify(o==null?void 0:o.store.highlightedRow)&&JSON.stringify(o==null?void 0:o.currentExplore)===JSON.stringify(o==null?void 0:o.store.highlightedExplore),a={"grid-column":`${s[0]+1} / span ${Q7(s)}`,height:"fit-content"};n==="table"?(a.display="grid",a.grid="auto / subgrid"):YKe&&t.field.isAtomicField()&&(a.position="sticky",a.top=`var(--malloy-render--table-header-cumulative-height-${i.depth})`);const l=i.depth>0&&em(t.field),c=i.depth>0&&Zg(t.field),f=()=>{o&&!sI.includes(n)&&o.setStore(y=>({...y,highlightedRow:t.rowPath}))},x=()=>{o.setStore(y=>({...y,highlightedRow:null}))},d=oo(),p=d.tableConfig().enableDrill,m=rc(),g=async y=>{y.stopPropagation(),p&&!sI.includes(n)&&xKe({metadata:m,field:t.field,dimensionContext:[...o.dimensionContext,...t.dimensionContext],onDrill:d.onDrill})};return(()=>{var y=UKe();return y.$$click=g,y.addEventListener("mouseleave",x),y.addEventListener("mouseenter",f),Xe(y,Ge(jB,{get children(){return[Ge(Gy,{when:n==="table",children:e}),Ge(Gy,{when:!0,get children(){return Ge(Mse,{get field(){return t.field},value:e,get hideStartGutter(){return em(t.field)},get hideEndGutter(){return Zg(t.field)},tableGutterLeft:l,tableGutterRight:c,get rawValue(){return t.row.cell(t.field).value},isChart:n==="chart"})}})]}})),Pn(E=>{var v=!!(t.field.isAtomicField()&&t.field.isNumber()),_=!!(p&&!sI.includes(n)&&u()),A=a;return v!==E.e&&y.classList.toggle("numeric",E.e=v),_!==E.t&&y.classList.toggle("highlight",E.t=_),E.a=wc(y,A,E.a),E},{e:void 0,t:void 0,a:void 0}),y})()},XKe=t=>{var ce;const e=Zo({rowLimit:1/0},t),n=Ox(),r=rc();let i=!1;if(n.root){const ie=(ce=e.data.field.tagParse().tag.tag("table"))==null?void 0:ce.tag("size");ie&&ie.text()==="fill"?i=!0:typeof e.shouldFillWidth=="boolean"&&(i=e.shouldFillWidth)}const s=Fn(()=>Object.entries(n.layout.fieldHeaderRangeMap).sort((re,R)=>re[1].depth<R[1].depth?-1:re[1].depth>R[1].depth?1:re[1].abs[0]<R[1].abs[0]?-1:re[1].abs[0]>R[1].abs[0]?1:0).filter(([re,R])=>{var q;const O=r.fields[re].field,D=O.parentExplore?(q=r.field(O.parentExplore))==null?void 0:q.renderAs:null;return R.depth>=0&&D==="table"}).map(([re,R])=>({fieldKey:re,field:r.fields[re].field,...R}))),o=Fn(()=>Math.max(...s().map(ie=>ie.depth))),u=Fn(()=>Object.entries(n.layout.fieldHeaderRangeMap).filter(([re])=>!r.fields[re].field.isExplore())),a=()=>{const ie=n.layout.fieldLayout(e.data.field).relativeColumnRange,re={"--table-row-span":Q7(ie)};if(n.root){let R=0;Object.entries(n.headerSizeStore[0]).sort(([D],[k])=>parseInt(D)-parseInt(k)).forEach(([D,k])=>{re[`--malloy-render--table-header-height-${D}`]=`${k}px`,R+=k,re[`--malloy-render--table-header-cumulative-height-${D}`]=`${R}px`}),re["--total-header-size"]=n.layout.totalHeaderSize;const O=u().map(([D])=>{const k=n.store.columnWidths[D];return i?k?k+"px":"auto":`minmax(${k?k+"px":"auto"}, max-content)`}).join(" ");re["grid-template-columns"]=O}return re},[l,c]=dr(!1),f=Fn(()=>{const ie=[];let re=0;for(const R of e.data){if(re>=e.rowLimit){c(!0);break}ie.push(R),re++}return ie}),x=()=>e.data.field.allFields.filter(ie=>!Fse(ie)),d=()=>s().reduce((re,R)=>((re[R.depth]||(re[R.depth]=[])).push(R),re),[]);let p,m;const[g,y]=dr(!1),[E,v]=dr(!1),_=()=>g()&&!E();Z2(()=>{p&&m&&(new IntersectionObserver(([R])=>{y(R.intersectionRatio<1)},{threshold:[1]}).observe(p),new IntersectionObserver(([R])=>{v(R.intersectionRatio<1)},{threshold:[1]}).observe(m))});const A=[];Z2(()=>{if(n.root){const[ie,re]=n.headerSizeStore,R=new ResizeObserver(O=>{const D=O.reduce((k,G)=>{const q=G.target.getAttribute("data-depth"),N=G.contentRect.height;return typeof q=="string"&&ie[q]!==N&&(k[q]=N),k},{});Object.entries(D).length>0&&re(k=>({...k,...D}))});A.forEach(O=>{R.observe(O)})}});let S;e.scrollEl&&(S=e.scrollEl);let b;const[C,w]=dr(1e3),I=()=>n.root&&!e.disableVirtualization;I()&&(b=Pse({count:f().length,getScrollElement:()=>S,estimateSize:()=>C()}));const F=b==null?void 0:b.getVirtualItems();let M,U=!1;const X=()=>{U=!0,setTimeout(()=>{U=!1},2e3)};function W(){const ie=M.querySelectorAll("[data-pinned-header]"),re=[];ie.forEach(R=>{const O=R.getAttribute("data-pinned-header"),D=R.clientWidth,k=n.store.columnWidths[O];(typeof k>"u"||D>k)&&re.push([O,D])}),re.length>0&&n.setStore("columnWidths",sC(R=>{re.forEach(([O,D])=>R[O]=D)}))}Z2(()=>{M&&(new ResizeObserver(()=>{U&&W()}).observe(M),requestAnimationFrame(()=>W()))}),Z2(()=>{if(n.root){let ie=null;new ResizeObserver(R=>{const[O]=R;!U&&ie!==null&&ie!==O.contentRect.width&&n.setStore(D=>({...D,columnWidths:{}})),ie=O.contentRect.width}).observe(S)}});const ae=()=>({"margin-bottom":`calc(-1 * (var(--malloy-render--table-header-cumulative-height-${o()}) - var(--malloy-render--table-header-height-0)))`}),ge=ie=>typeof ie=="number"?[...n.currentRow,ie]:n.currentRow,he=ie=>{ie.stopPropagation(),n.setStore(re=>({...re,highlightedExplore:e.data.field.fieldPath}))},ue=ie=>{const re=[];return ie.field.allFields.filter(O=>O.isAtomicField()&&O.sourceWasDimension()).forEach(O=>{re.push({fieldDef:O.expression,value:ie.cell(O).value})}),re};return(()=>{var ie=WKe();return ie.addEventListener("scroll",X),lo(re=>{e.scrollEl||(S=re)},ie),ie.classList.toggle("full-width",!!i),ie.addEventListener("mouseover",he),Xe(ie,Ge(Or,{get when(){return n.root},get children(){return[(()=>{var re=qKe(),R=p;return typeof R=="function"?lo(R,re):p=re,re})(),(()=>{var re=zKe(),R=m;return typeof R=="function"?lo(R,re):m=re,re})(),(()=>{var re=HKe(),R=M;return typeof R=="function"?lo(R,re):M=re,Xe(re,Ge(Yn,{get each(){return d()},children:(O,D)=>(()=>{var k=VKe();return lo(G=>A[D()]=G,k),Xe(k,Ge(Yn,{each:O,children:G=>Ge(jse,{get field(){return G.field},isPinned:!0})})),Pn(()=>Ji(k,"data-depth",D())),k})()})),Pn(O=>wc(re,ae(),O)),re})()]}}),null),Xe(ie,Ge(Or,{get when(){return I()},get children(){var re=QKe(),R=re.firstChild;return re.style.setProperty("width","100%"),re.style.setProperty("position","relative"),R.style.setProperty("height","fit-content"),R.style.setProperty("width","100%"),Xe(R,Ge(Yn,{each:F,children:O=>(()=>{var D=iI();return lo(k=>queueMicrotask(()=>{b.measureElement(k),O.index===0&&w(k.clientHeight)}),D),Xe(D,Ge(Or,{get when(){return O.index>=0},get children(){return Ge(Yn,{get each(){return x()},children:k=>Ge(Use,{field:k,get row(){return f()[O.index]},get rowPath(){return ge(O.index)},get dimensionContext(){return ue(f()[O.index])}})})}})),Pn(k=>{var G=O.index,q=JSON.stringify(ge(O.index));return G!==k.e&&Ji(D,"data-index",k.e=G),q!==k.t&&Ji(D,"data-row",k.t=q),k},{e:void 0,t:void 0}),D})()})),Pn(O=>{var G;var D=b.getTotalSize()+"px",k=`${((G=F[0])==null?void 0:G.start)??0}px`;return D!==O.e&&((O.e=D)!=null?re.style.setProperty("height",D):re.style.removeProperty("height")),k!==O.t&&((O.t=k)!=null?R.style.setProperty("padding-top",k):R.style.removeProperty("padding-top")),O},{e:void 0,t:void 0}),re}}),null),Xe(ie,Ge(Or,{get when(){return!I()},get children(){return[Ge(Or,{get when(){return!n.root},get children(){var re=iI();return Xe(re,Ge(Yn,{get each(){return x()},children:R=>Ge(jse,{field:R})})),Pn(()=>Ji(re,"data-row",JSON.stringify(ge()))),re}}),Ge(Yn,{get each(){return f()},children:(re,R)=>(()=>{var O=iI();return Xe(O,Ge(Yn,{get each(){return x()},children:D=>Ge(Use,{field:D,row:re,get rowPath(){return ge(R())},get dimensionContext(){return ue(re)}})})),Pn(()=>Ji(O,"data-row",JSON.stringify(ge(R())))),O})()}),Ge(Or,{get when(){return l()},get children(){var re=GKe(),R=re.firstChild,O=R.nextSibling;return O.nextSibling,Xe(re,()=>e.rowLimit,O),re}})]}}),null),Pn(re=>{var R=!!n.root,O=!!_(),D=n.root?"table-container":"",k=a();return R!==re.e&&ie.classList.toggle("root",re.e=R),O!==re.t&&ie.classList.toggle("pinned",re.t=O),D!==re.a&&Ji(ie,"part",re.a=D),re.o=wc(ie,k,re.o),re},{e:void 0,t:void 0,a:void 0,o:void 0}),ie})()},JKe=t=>{const e=rc(),n=!!Ox(),r=Fn(()=>{if(n){const a=Ox(),l=t.data.parentRecord,c=[];return l&&l.field.allFields.filter(x=>x.isAtomicField()&&x.sourceWasDimension()).forEach(x=>{c.push({fieldDef:x.expression,value:l.cell(x).value})}),{...a,root:!1,currentRow:t.currentRow??a.currentRow,currentExplore:t.data.field.fieldPath,dimensionContext:[...a.dimensionContext,...c]}}const[o,u]=CKe();return{root:!0,layout:bKe(e,t.data.field),store:o,setStore:u,headerSizeStore:rC({}),currentRow:[],currentExplore:t.data.field.fieldPath,dimensionContext:[]}});r().root&&oo().addCSSToShadowRoot(TKe);const i=oo().tableConfig,s=()=>Zo(t,{disableVirtualization:typeof t.disableVirtualization=="boolean"?t.disableVirtualization:i().disableVirtualization,rowLimit:typeof t.rowLimit=="number"?t.rowLimit:i().rowLimit,shouldFillWidth:typeof t.shouldFillWidth=="boolean"?t.shouldFillWidth:i().shouldFillWidth});return Ge($se.Provider,{get value(){return r()},get children(){return Ge(XKe,Zo(s))}})};zT(["click"]);var KKe=mt('<div class=malloy-list style="text-wrap:wrap;line-height:calc(var(--malloy-render--table-row-height) * 5 / 7 - 1px);">'),ZKe=mt("<span>");function eZe(t){if(t.dataColumn.isNull())return"∅";const e=t.tag.tag("list"),n=t.tag.tag("list_detail");if(!e&&!n)throw new Error("Missing tag for List renderer");if(!t.field.isExplore())throw new Error("List renderer: Field must be ExploreField");if(!t.dataColumn.isArray())throw new Error("List renderer: DataColumn must be DataArray");const r=t.field.allFields.filter(u=>{const{tag:a}=u.tagParse();return!a.has("hidden")})[0],i=!!n,s=t.field.allFields.filter(u=>{const{tag:a}=u.tagParse();return!a.has("hidden")})[1],o=[];for(const u of t.dataColumn)o.push(u);return(()=>{var u=KKe();return Xe(u,Ge(Yn,{each:o,children:(a,l)=>(()=>{var c=ZKe();return Xe(c,()=>Cc({field:r,dataColumn:a.cell(r),resultMetadata:t.resultMetadata,tag:r.tagParse().tag}).renderValue,null),Xe(c,()=>i&&s&&"("+Cc({field:s,dataColumn:a.cell(s),resultMetadata:t.resultMetadata,tag:s.tagParse().tag}).renderValue+")",null),Xe(c,()=>l()<o.length-1&&", ",null),c})()})),u})()}var tZe=mt("<img>");function nZe(t){const e=t.tag.tag("image");if(!e)throw new Error("Missing tag for Image renderer");if(!t.field.isAtomicField())throw new Error("Image renderer: Field must be AtomicField");if(!t.dataColumn.isString())throw new Error("Image renderer: DataColumn must be DataString");const n=e.text("width"),r=e.text("height"),i={};n&&(i.width=n),r&&(i.height=r);let s;const o=e.tag("alt");o&&(s=XW({tag:o,data:t.dataColumn})??o.text());let u;return t.dataColumn.isNull()||(u=t.dataColumn.value),(()=>{var a=tZe();return wc(a,i),Ji(a,"src",u),Ji(a,"alt",s),a})()}const rZe=`.malloy-dashboard {
1679
+ color: hsl(${Math.max(0,Math.min(120-120*m,120))}deg 100% 31%);`,n==null?void 0:n.key)}return(a=n==null?void 0:n.onChange)==null||a.call(n,i),i}}function rI(t,e){if(t===void 0)throw new Error("Unexpected undefined");return t}const OKe=(t,e)=>Math.abs(t-e)<1,RKe=(t,e,n)=>{let r;return function(...i){t.clearTimeout(r),r=t.setTimeout(()=>e.apply(this,i),n)}};var S2={};const DKe=t=>t,wKe=t=>{const e=Math.max(t.startIndex-t.overscan,0),n=Math.min(t.endIndex+t.overscan,t.count-1),r=[];for(let i=e;i<=n;i++)r.push(i);return r},NKe=(t,e)=>{const n=t.scrollElement;if(!n)return;const r=t.targetWindow;if(!r)return;const i=o=>{const{width:u,height:a}=o;e({width:Math.round(u),height:Math.round(a)})};if(i(n.getBoundingClientRect()),!r.ResizeObserver)return()=>{};const s=new r.ResizeObserver(o=>{const u=o[0];if(u!=null&&u.borderBoxSize){const a=u.borderBoxSize[0];if(a){i({width:a.inlineSize,height:a.blockSize});return}}i(n.getBoundingClientRect())});return s.observe(n,{box:"border-box"}),()=>{s.unobserve(n)}},Bse={passive:!0},FKe=typeof window>"u"?!0:"onscrollend"in window,LKe=(t,e)=>{const n=t.scrollElement;if(!n)return;const r=t.targetWindow;if(!r)return;let i=0;const s=FKe?()=>{}:RKe(r,()=>{e(i,!1)},t.options.isScrollingResetDelay),o=l=>()=>{const{horizontal:c,isRtl:f}=t.options;i=c?n.scrollLeft*(f&&-1||1):n.scrollTop,s(),e(i,l)},u=o(!0),a=o(!1);return a(),n.addEventListener("scroll",u,Bse),n.addEventListener("scrollend",a,Bse),()=>{n.removeEventListener("scroll",u),n.removeEventListener("scrollend",a)}},IKe=(t,e,n)=>{if(e!=null&&e.borderBoxSize){const r=e.borderBoxSize[0];if(r)return Math.round(r[n.options.horizontal?"inlineSize":"blockSize"])}return Math.round(t.getBoundingClientRect()[n.options.horizontal?"width":"height"])},$Ke=(t,{adjustments:e=0,behavior:n},r)=>{var i,s;const o=t+e;(s=(i=r.scrollElement)==null?void 0:i.scrollTo)==null||s.call(i,{[r.options.horizontal?"left":"top"]:o,behavior:n})};class BKe{constructor(e){this.unsubs=[],this.scrollElement=null,this.targetWindow=null,this.isScrolling=!1,this.scrollToIndexTimeoutId=null,this.measurementsCache=[],this.itemSizeCache=new Map,this.pendingMeasuredCacheIndexes=[],this.scrollRect=null,this.scrollOffset=null,this.scrollDirection=null,this.scrollAdjustments=0,this.elementsCache=new Map,this.observer=(()=>{let n=null;const r=()=>n||(!this.targetWindow||!this.targetWindow.ResizeObserver?null:n=new this.targetWindow.ResizeObserver(i=>{i.forEach(s=>{this._measureElement(s.target,s)})}));return{disconnect:()=>{var i;return(i=r())==null?void 0:i.disconnect()},observe:i=>{var s;return(s=r())==null?void 0:s.observe(i,{box:"border-box"})},unobserve:i=>{var s;return(s=r())==null?void 0:s.unobserve(i)}}})(),this.range=null,this.setOptions=n=>{Object.entries(n).forEach(([r,i])=>{typeof i>"u"&&delete n[r]}),this.options={debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:DKe,rangeExtractor:wKe,onChange:()=>{},measureElement:IKe,initialRect:{width:0,height:0},scrollMargin:0,gap:0,indexAttribute:"data-index",initialMeasurementsCache:[],lanes:1,isScrollingResetDelay:150,enabled:!0,isRtl:!1,...n}},this.notify=n=>{var r,i;(i=(r=this.options).onChange)==null||i.call(r,this,n)},this.maybeNotify=A2(()=>(this.calculateRange(),[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]),n=>{this.notify(n)},{key:S2.NODE_ENV!=="production"&&"maybeNotify",debug:()=>this.options.debug,initialDeps:[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]}),this.cleanup=()=>{this.unsubs.filter(Boolean).forEach(n=>n()),this.unsubs=[],this.scrollElement=null,this.targetWindow=null,this.observer.disconnect(),this.elementsCache.clear()},this._didMount=()=>()=>{this.cleanup()},this._willUpdate=()=>{var n;const r=this.options.enabled?this.options.getScrollElement():null;if(this.scrollElement!==r){if(this.cleanup(),!r){this.maybeNotify();return}this.scrollElement=r,this.scrollElement&&"ownerDocument"in this.scrollElement?this.targetWindow=this.scrollElement.ownerDocument.defaultView:this.targetWindow=((n=this.scrollElement)==null?void 0:n.window)??null,this._scrollToOffset(this.getScrollOffset(),{adjustments:void 0,behavior:void 0}),this.unsubs.push(this.options.observeElementRect(this,i=>{this.scrollRect=i,this.maybeNotify()})),this.unsubs.push(this.options.observeElementOffset(this,(i,s)=>{this.scrollAdjustments=0,this.scrollDirection=s?this.getScrollOffset()<i?"forward":"backward":null,this.scrollOffset=i,this.isScrolling=s,this.maybeNotify()}))}},this.getSize=()=>this.options.enabled?(this.scrollRect=this.scrollRect??this.options.initialRect,this.scrollRect[this.options.horizontal?"width":"height"]):(this.scrollRect=null,0),this.getScrollOffset=()=>this.options.enabled?(this.scrollOffset=this.scrollOffset??(typeof this.options.initialOffset=="function"?this.options.initialOffset():this.options.initialOffset),this.scrollOffset):(this.scrollOffset=null,0),this.getFurthestMeasurement=(n,r)=>{const i=new Map,s=new Map;for(let o=r-1;o>=0;o--){const u=n[o];if(i.has(u.lane))continue;const a=s.get(u.lane);if(a==null||u.end>a.end?s.set(u.lane,u):u.end<a.end&&i.set(u.lane,!0),i.size===this.options.lanes)break}return s.size===this.options.lanes?Array.from(s.values()).sort((o,u)=>o.end===u.end?o.index-u.index:o.end-u.end)[0]:void 0},this.getMeasurementOptions=A2(()=>[this.options.count,this.options.paddingStart,this.options.scrollMargin,this.options.getItemKey,this.options.enabled],(n,r,i,s,o)=>(this.pendingMeasuredCacheIndexes=[],{count:n,paddingStart:r,scrollMargin:i,getItemKey:s,enabled:o}),{key:!1}),this.getMeasurements=A2(()=>[this.getMeasurementOptions(),this.itemSizeCache],({count:n,paddingStart:r,scrollMargin:i,getItemKey:s,enabled:o},u)=>{if(!o)return this.measurementsCache=[],this.itemSizeCache.clear(),[];this.measurementsCache.length===0&&(this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach(c=>{this.itemSizeCache.set(c.key,c.size)}));const a=this.pendingMeasuredCacheIndexes.length>0?Math.min(...this.pendingMeasuredCacheIndexes):0;this.pendingMeasuredCacheIndexes=[];const l=this.measurementsCache.slice(0,a);for(let c=a;c<n;c++){const f=s(c),x=this.options.lanes===1?l[c-1]:this.getFurthestMeasurement(l,c),d=x?x.end+this.options.gap:r+i,p=u.get(f),m=typeof p=="number"?p:this.options.estimateSize(c),g=d+m,y=x?x.lane:c%this.options.lanes;l[c]={index:c,start:d,size:m,end:g,key:f,lane:y}}return this.measurementsCache=l,l},{key:S2.NODE_ENV!=="production"&&"getMeasurements",debug:()=>this.options.debug}),this.calculateRange=A2(()=>[this.getMeasurements(),this.getSize(),this.getScrollOffset()],(n,r,i)=>this.range=n.length>0&&r>0?kKe({measurements:n,outerSize:r,scrollOffset:i}):null,{key:S2.NODE_ENV!=="production"&&"calculateRange",debug:()=>this.options.debug}),this.getIndexes=A2(()=>[this.options.rangeExtractor,this.calculateRange(),this.options.overscan,this.options.count],(n,r,i,s)=>r===null?[]:n({startIndex:r.startIndex,endIndex:r.endIndex,overscan:i,count:s}),{key:S2.NODE_ENV!=="production"&&"getIndexes",debug:()=>this.options.debug}),this.indexFromElement=n=>{const r=this.options.indexAttribute,i=n.getAttribute(r);return i?parseInt(i,10):(console.warn(`Missing attribute name '${r}={index}' on measured element.`),-1)},this._measureElement=(n,r)=>{const i=this.indexFromElement(n),s=this.measurementsCache[i];if(!s)return;const o=s.key,u=this.elementsCache.get(o);u!==n&&(u&&this.observer.unobserve(u),this.observer.observe(n),this.elementsCache.set(o,n)),n.isConnected&&this.resizeItem(i,this.options.measureElement(n,r,this))},this.resizeItem=(n,r)=>{const i=this.measurementsCache[n];if(!i)return;const s=this.itemSizeCache.get(i.key)??i.size,o=r-s;o!==0&&((this.shouldAdjustScrollPositionOnItemSizeChange!==void 0?this.shouldAdjustScrollPositionOnItemSizeChange(i,o,this):i.start<this.getScrollOffset()+this.scrollAdjustments)&&(S2.NODE_ENV!=="production"&&this.options.debug&&console.info("correction",o),this._scrollToOffset(this.getScrollOffset(),{adjustments:this.scrollAdjustments+=o,behavior:void 0})),this.pendingMeasuredCacheIndexes.push(i.index),this.itemSizeCache=new Map(this.itemSizeCache.set(i.key,r)),this.notify(!1))},this.measureElement=n=>{if(!n){this.elementsCache.forEach((r,i)=>{r.isConnected||(this.observer.unobserve(r),this.elementsCache.delete(i))});return}this._measureElement(n,void 0)},this.getVirtualItems=A2(()=>[this.getIndexes(),this.getMeasurements()],(n,r)=>{const i=[];for(let s=0,o=n.length;s<o;s++){const u=n[s],a=r[u];i.push(a)}return i},{key:S2.NODE_ENV!=="production"&&"getVirtualItems",debug:()=>this.options.debug}),this.getVirtualItemForOffset=n=>{const r=this.getMeasurements();if(r.length!==0)return rI(r[kse(0,r.length-1,i=>rI(r[i]).start,n)])},this.getOffsetForAlignment=(n,r)=>{const i=this.getSize(),s=this.getScrollOffset();r==="auto"&&(n<=s?r="start":n>=s+i?r="end":r="start"),r==="start"?n=n:r==="end"?n=n-i:r==="center"&&(n=n-i/2);const o=this.options.horizontal?"scrollWidth":"scrollHeight",a=(this.scrollElement?"document"in this.scrollElement?this.scrollElement.document.documentElement[o]:this.scrollElement[o]:0)-i;return Math.max(Math.min(a,n),0)},this.getOffsetForIndex=(n,r="auto")=>{n=Math.max(0,Math.min(n,this.options.count-1));const i=this.measurementsCache[n];if(!i)return;const s=this.getSize(),o=this.getScrollOffset();if(r==="auto")if(i.end>=o+s-this.options.scrollPaddingEnd)r="end";else if(i.start<=o+this.options.scrollPaddingStart)r="start";else return[o,r];const u=r==="end"?i.end+this.options.scrollPaddingEnd:i.start-this.options.scrollPaddingStart;return[this.getOffsetForAlignment(u,r),r]},this.isDynamicMode=()=>this.elementsCache.size>0,this.cancelScrollToIndex=()=>{this.scrollToIndexTimeoutId!==null&&this.targetWindow&&(this.targetWindow.clearTimeout(this.scrollToIndexTimeoutId),this.scrollToIndexTimeoutId=null)},this.scrollToOffset=(n,{align:r="start",behavior:i}={})=>{this.cancelScrollToIndex(),i==="smooth"&&this.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size."),this._scrollToOffset(this.getOffsetForAlignment(n,r),{adjustments:void 0,behavior:i})},this.scrollToIndex=(n,{align:r="auto",behavior:i}={})=>{n=Math.max(0,Math.min(n,this.options.count-1)),this.cancelScrollToIndex(),i==="smooth"&&this.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size.");const s=this.getOffsetForIndex(n,r);if(!s)return;const[o,u]=s;this._scrollToOffset(o,{adjustments:void 0,behavior:i}),i!=="smooth"&&this.isDynamicMode()&&this.targetWindow&&(this.scrollToIndexTimeoutId=this.targetWindow.setTimeout(()=>{if(this.scrollToIndexTimeoutId=null,this.elementsCache.has(this.options.getItemKey(n))){const[l]=rI(this.getOffsetForIndex(n,u));OKe(l,this.getScrollOffset())||this.scrollToIndex(n,{align:u,behavior:i})}else this.scrollToIndex(n,{align:u,behavior:i})}))},this.scrollBy=(n,{behavior:r}={})=>{this.cancelScrollToIndex(),r==="smooth"&&this.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size."),this._scrollToOffset(this.getScrollOffset()+n,{adjustments:void 0,behavior:r})},this.getTotalSize=()=>{var n;const r=this.getMeasurements();let i;return r.length===0?i=this.options.paddingStart:i=this.options.lanes===1?((n=r[r.length-1])==null?void 0:n.end)??0:Math.max(...r.slice(-this.options.lanes).map(s=>s.end)),i-this.options.scrollMargin+this.options.paddingEnd},this._scrollToOffset=(n,{adjustments:r,behavior:i})=>{this.options.scrollToFn(n,{behavior:i,adjustments:r},this)},this.measure=()=>{this.itemSizeCache=new Map,this.notify(!1)},this.setOptions(e)}}const kse=(t,e,n,r)=>{for(;t<=e;){const i=(t+e)/2|0,s=n(i);if(s<r)t=i+1;else if(s>r)e=i-1;else return i}return t>0?t-1:0};function kKe({measurements:t,outerSize:e,scrollOffset:n}){const r=t.length-1,s=kse(0,r,u=>t[u].start,n);let o=s;for(;o<r&&t[o].end<n+e;)o++;return{startIndex:s,endIndex:o}}function PKe(t){const e=Zo(t),n=new BKe(e),[r,i]=rC(n.getVirtualItems()),[s,o]=dr(n.getTotalSize()),u={get(l,c){switch(c){case"getVirtualItems":return()=>r;case"getTotalSize":return()=>s();default:return Reflect.get(l,c)}}},a=new Proxy(n,u);return a.setOptions(e),Z2(()=>{const l=a._didMount();a._willUpdate(),ep(l)}),k0e(()=>{a.setOptions(Zo(e,t,{onChange:(l,c)=>{var f;l._willUpdate(),i(lKe(l.getVirtualItems(),{key:"index"})),o(l.getTotalSize()),(f=t.onChange)==null||f.call(t,l,c)}})),a.measure()}),a}function Pse(t){return PKe(Zo({observeElementRect:NKe,observeElementOffset:LKe,scrollToFn:$Ke},t))}var MKe=mt("<div class=cell-content>"),jKe=mt('<div class="column-cell th">'),UKe=mt('<div class="column-cell td">'),qKe=mt("<div style=position:sticky;left:0px;height:0px;visibility:hidden;>"),zKe=mt("<div style=position:sticky;top:0px;left:0px;height:0px;visibility:hidden;>"),HKe=mt("<div class=pinned-header-row>"),QKe=mt("<div class=table-row><div class=table-row>"),iI=mt("<div class=table-row>"),GKe=mt('<div class="table-row limit-row table-gutter-left table-gutter-right">Limiting nested table to <!> records'),WKe=mt("<div class=malloy-table>"),VKe=mt("<div class=pinned-header-subrow>");const YKe=navigator.userAgent.toLowerCase().indexOf("chrome")>=0,Mse=t=>{const e=()=>{const i=Ox().layout,s=t.field.tagParse().tag.tag("column"),o=i.fieldLayout(t.field).width,u=i.fieldLayout(t.field).height,a={};return t.isHeader||(o&&(a.width=`${o}px`,a["min-width"]=`${o}px`,a["max-width"]=`${o}px;`),u&&(a.height=`${u}px`),(s==null?void 0:s.text("word_break"))==="break_all"&&(a["word-break"]="break-all")),a},n=oo(),r=i=>{n.onClick&&n.onClick({field:t.field,displayValue:t.isHeader?t.rawValue:typeof t.value!="function"?t.value:null,value:typeof t.rawValue!="function"?t.rawValue:null,fieldPath:t.field.fieldPath,isHeader:!!t.isHeader,event:i,type:"table-cell"})};return(()=>{var i=MKe();return qB(i,"click",n.onClick?r:void 0),Xe(i,()=>t.value),Pn(s=>{var o=!!t.isHeader,u=!!t.hideStartGutter,a=!!t.hideEndGutter,l=!!t.tableGutterLeft,c=!!t.tableGutterRight,f=!!t.isChart,x=e(),d=typeof t.value=="string"?t.value:"";return o!==s.e&&i.classList.toggle("header",s.e=o),u!==s.t&&i.classList.toggle("hide-start-gutter",s.t=u),a!==s.a&&i.classList.toggle("hide-end-gutter",s.a=a),l!==s.o&&i.classList.toggle("table-gutter-left",s.o=l),c!==s.i&&i.classList.toggle("table-gutter-right",s.i=c),f!==s.n&&i.classList.toggle("chart",s.n=f),s.s=wc(i,x,s.s),d!==s.h&&Ji(i,"title",s.h=d),s},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0}),i})()},jse=t=>{const{layout:e}=Ox(),n=rc(),r=em(t.field),i=em(t.field.parentExplore),s=!t.field.parentExplore.isExploreField(),o=r&&(i||s),u=Zg(t.field),a=Zg(t.field.parentExplore),l=u&&(a||s),c=e.fieldLayout(t.field),f=t.isPinned?c.absoluteColumnRange:c.relativeColumnRange,x=c.depth>0&&em(t.field)||c.metadata.renderAs==="table",d=c.depth>0&&Zg(t.field)||c.depth===0&&c.metadata.renderAs==="table",m=t.field.tagParse().tag.text("label")??t.field.name.replace(/_/g,"_​");return(()=>{var g=jKe();return Xe(g,Ge(Mse,{get field(){return t.field},value:m,hideStartGutter:o,hideEndGutter:l,tableGutterLeft:x,tableGutterRight:d,isHeader:!0,get rawValue(){return t.field.name}})),Pn(y=>{var E=t.isPinned?n.getFieldKey(t.field):void 0,v=!!(t.field.isAtomicField()&&t.field.isNumber()),_=!!t.isPinned,A=`${f[0]+1} / span ${Q7(f)}`,S=t.isPinned?void 0:`var(--malloy-render--table-header-height-${c.depth})`;return E!==y.e&&Ji(g,"data-pinned-header",y.e=E),v!==y.t&&g.classList.toggle("numeric",y.t=v),_!==y.a&&g.classList.toggle("pinned-header",y.a=_),A!==y.o&&((y.o=A)!=null?g.style.setProperty("grid-column",A):g.style.removeProperty("grid-column")),S!==y.i&&((y.i=S)!=null?g.style.setProperty("height",S):g.style.removeProperty("height")),y},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),g})()},sI=["chart","link"],Use=t=>{let e="",n="";({renderValue:e,renderAs:n}=Cc({field:t.field,dataColumn:t.row.cell(t.field),resultMetadata:rc(),tag:t.field.tagParse().tag,customProps:{table:{rowLimit:100,currentRow:[...t.rowPath]}}}));const i=Ox().layout.fieldLayout(t.field),s=i.relativeColumnRange,o=Ox(),u=()=>JSON.stringify(t.rowPath)===JSON.stringify(o==null?void 0:o.store.highlightedRow)&&JSON.stringify(o==null?void 0:o.currentExplore)===JSON.stringify(o==null?void 0:o.store.highlightedExplore),a={"grid-column":`${s[0]+1} / span ${Q7(s)}`,height:"fit-content"};n==="table"?(a.display="grid",a.grid="auto / subgrid"):YKe&&t.field.isAtomicField()&&(a.position="sticky",a.top=`var(--malloy-render--table-header-cumulative-height-${i.depth})`);const l=i.depth>0&&em(t.field),c=i.depth>0&&Zg(t.field),f=()=>{o&&!sI.includes(n)&&o.setStore(y=>({...y,highlightedRow:t.rowPath}))},x=()=>{o.setStore(y=>({...y,highlightedRow:null}))},d=oo(),p=d.tableConfig().enableDrill,m=rc(),g=async y=>{y.stopPropagation(),p&&!sI.includes(n)&&xKe({metadata:m,field:t.field,dimensionContext:[...o.dimensionContext,...t.dimensionContext],onDrill:d.onDrill})};return(()=>{var y=UKe();return y.$$click=g,y.addEventListener("mouseleave",x),y.addEventListener("mouseenter",f),Xe(y,Ge(jB,{get children(){return[Ge(Gy,{when:n==="table",children:e}),Ge(Gy,{when:!0,get children(){return Ge(Mse,{get field(){return t.field},value:e,get hideStartGutter(){return em(t.field)},get hideEndGutter(){return Zg(t.field)},tableGutterLeft:l,tableGutterRight:c,get rawValue(){return t.row.cell(t.field).value},isChart:n==="chart"})}})]}})),Pn(E=>{var v=!!(t.field.isAtomicField()&&t.field.isNumber()),_=!!(p&&!sI.includes(n)&&u()),A=a;return v!==E.e&&y.classList.toggle("numeric",E.e=v),_!==E.t&&y.classList.toggle("highlight",E.t=_),E.a=wc(y,A,E.a),E},{e:void 0,t:void 0,a:void 0}),y})()},XKe=t=>{var ce;const e=Zo({rowLimit:1/0},t),n=Ox(),r=rc();let i=!1;if(n.root){const ie=(ce=e.data.field.tagParse().tag.tag("table"))==null?void 0:ce.tag("size");ie&&ie.text()==="fill"?i=!0:typeof e.shouldFillWidth=="boolean"&&(i=e.shouldFillWidth)}const s=Fn(()=>Object.entries(n.layout.fieldHeaderRangeMap).sort((re,R)=>re[1].depth<R[1].depth?-1:re[1].depth>R[1].depth?1:re[1].abs[0]<R[1].abs[0]?-1:re[1].abs[0]>R[1].abs[0]?1:0).filter(([re,R])=>{var q;const O=r.fields[re].field,D=O.parentExplore?(q=r.field(O.parentExplore))==null?void 0:q.renderAs:null;return R.depth>=0&&D==="table"}).map(([re,R])=>({fieldKey:re,field:r.fields[re].field,...R}))),o=Fn(()=>Math.max(...s().map(ie=>ie.depth))),u=Fn(()=>Object.entries(n.layout.fieldHeaderRangeMap).filter(([re])=>!r.fields[re].field.isExplore())),a=()=>{const ie=n.layout.fieldLayout(e.data.field).relativeColumnRange,re={"--table-row-span":Q7(ie)};if(n.root){let R=0;Object.entries(n.headerSizeStore[0]).sort(([D],[k])=>parseInt(D)-parseInt(k)).forEach(([D,k])=>{re[`--malloy-render--table-header-height-${D}`]=`${k}px`,R+=k,re[`--malloy-render--table-header-cumulative-height-${D}`]=`${R}px`}),re["--total-header-size"]=n.layout.totalHeaderSize;const O=u().map(([D])=>{const k=n.store.columnWidths[D];return i?k?k+"px":"auto":`minmax(${k?k+"px":"auto"}, max-content)`}).join(" ");re["grid-template-columns"]=O}return re},[l,c]=dr(!1),f=Fn(()=>{const ie=[];let re=0;for(const R of e.data){if(re>=e.rowLimit){c(!0);break}ie.push(R),re++}return ie}),x=()=>e.data.field.allFields.filter(ie=>!Fse(ie)),d=()=>s().reduce((re,R)=>((re[R.depth]||(re[R.depth]=[])).push(R),re),[]);let p,m;const[g,y]=dr(!1),[E,v]=dr(!1),_=()=>g()&&!E();Z2(()=>{p&&m&&(new IntersectionObserver(([R])=>{y(R.intersectionRatio<1)},{threshold:[1]}).observe(p),new IntersectionObserver(([R])=>{v(R.intersectionRatio<1)},{threshold:[1]}).observe(m))});const A=[];Z2(()=>{if(n.root){const[ie,re]=n.headerSizeStore,R=new ResizeObserver(O=>{const D=O.reduce((k,G)=>{const q=G.target.getAttribute("data-depth"),N=G.contentRect.height;return typeof q=="string"&&ie[q]!==N&&(k[q]=N),k},{});Object.entries(D).length>0&&re(k=>({...k,...D}))});A.forEach(O=>{R.observe(O)})}});let S;e.scrollEl&&(S=e.scrollEl);let b;const[C,w]=dr(1e3),I=()=>n.root&&!e.disableVirtualization;I()&&(b=Pse({count:f().length,getScrollElement:()=>S,estimateSize:()=>C()}));const F=b==null?void 0:b.getVirtualItems();let M,U=!1;const X=()=>{U=!0,setTimeout(()=>{U=!1},2e3)};function W(){const ie=M.querySelectorAll("[data-pinned-header]"),re=[];ie.forEach(R=>{const O=R.getAttribute("data-pinned-header"),D=R.clientWidth,k=n.store.columnWidths[O];(typeof k>"u"||D>k)&&re.push([O,D])}),re.length>0&&n.setStore("columnWidths",sC(R=>{re.forEach(([O,D])=>R[O]=D)}))}Z2(()=>{M&&(new ResizeObserver(()=>{U&&W()}).observe(M),requestAnimationFrame(()=>W()))}),Z2(()=>{if(n.root){let ie=null;new ResizeObserver(R=>{const[O]=R;!U&&ie!==null&&ie!==O.contentRect.width&&n.setStore(D=>({...D,columnWidths:{}})),ie=O.contentRect.width}).observe(S)}});const ae=()=>({"margin-bottom":`calc(-1 * (var(--malloy-render--table-header-cumulative-height-${o()}) - var(--malloy-render--table-header-height-0)))`}),ge=ie=>typeof ie=="number"?[...n.currentRow,ie]:n.currentRow,he=ie=>{ie.stopPropagation(),n.setStore(re=>({...re,highlightedExplore:e.data.field.fieldPath}))},ue=ie=>{const re=[];return ie.field.allFields.filter(O=>O.isAtomicField()&&O.sourceWasDimension()).forEach(O=>{re.push({fieldDef:O.expression,value:ie.cell(O).value})}),re};return(()=>{var ie=WKe();return ie.addEventListener("scroll",X),lo(re=>{e.scrollEl||(S=re)},ie),ie.classList.toggle("full-width",!!i),ie.addEventListener("mouseover",he),Xe(ie,Ge(Or,{get when(){return n.root},get children(){return[(()=>{var re=qKe(),R=p;return typeof R=="function"?lo(R,re):p=re,re})(),(()=>{var re=zKe(),R=m;return typeof R=="function"?lo(R,re):m=re,re})(),(()=>{var re=HKe(),R=M;return typeof R=="function"?lo(R,re):M=re,Xe(re,Ge(Yn,{get each(){return d()},children:(O,D)=>(()=>{var k=VKe();return lo(G=>A[D()]=G,k),Xe(k,Ge(Yn,{each:O,children:G=>Ge(jse,{get field(){return G.field},isPinned:!0})})),Pn(()=>Ji(k,"data-depth",D())),k})()})),Pn(O=>wc(re,ae(),O)),re})()]}}),null),Xe(ie,Ge(Or,{get when(){return I()},get children(){var re=QKe(),R=re.firstChild;return re.style.setProperty("width","100%"),re.style.setProperty("position","relative"),R.style.setProperty("height","fit-content"),R.style.setProperty("width","100%"),Xe(R,Ge(Yn,{each:F,children:O=>(()=>{var D=iI();return lo(k=>queueMicrotask(()=>{b.measureElement(k),O.index===0&&w(k.clientHeight)}),D),Xe(D,Ge(Or,{get when(){return O.index>=0},get children(){return Ge(Yn,{get each(){return x()},children:k=>Ge(Use,{field:k,get row(){return f()[O.index]},get rowPath(){return ge(O.index)},get dimensionContext(){return ue(f()[O.index])}})})}})),Pn(k=>{var G=O.index,q=JSON.stringify(ge(O.index));return G!==k.e&&Ji(D,"data-index",k.e=G),q!==k.t&&Ji(D,"data-row",k.t=q),k},{e:void 0,t:void 0}),D})()})),Pn(O=>{var G;var D=b.getTotalSize()+"px",k=`${((G=F[0])==null?void 0:G.start)??0}px`;return D!==O.e&&((O.e=D)!=null?re.style.setProperty("height",D):re.style.removeProperty("height")),k!==O.t&&((O.t=k)!=null?R.style.setProperty("padding-top",k):R.style.removeProperty("padding-top")),O},{e:void 0,t:void 0}),re}}),null),Xe(ie,Ge(Or,{get when(){return!I()},get children(){return[Ge(Or,{get when(){return!n.root},get children(){var re=iI();return Xe(re,Ge(Yn,{get each(){return x()},children:R=>Ge(jse,{field:R})})),Pn(()=>Ji(re,"data-row",JSON.stringify(ge()))),re}}),Ge(Yn,{get each(){return f()},children:(re,R)=>(()=>{var O=iI();return Xe(O,Ge(Yn,{get each(){return x()},children:D=>Ge(Use,{field:D,row:re,get rowPath(){return ge(R())},get dimensionContext(){return ue(re)}})})),Pn(()=>Ji(O,"data-row",JSON.stringify(ge(R())))),O})()}),Ge(Or,{get when(){return l()},get children(){var re=GKe(),R=re.firstChild,O=R.nextSibling;return O.nextSibling,Xe(re,()=>e.rowLimit,O),re}})]}}),null),Pn(re=>{var R=!!n.root,O=!!_(),D=n.root?"table-container":"",k=a();return R!==re.e&&ie.classList.toggle("root",re.e=R),O!==re.t&&ie.classList.toggle("pinned",re.t=O),D!==re.a&&Ji(ie,"part",re.a=D),re.o=wc(ie,k,re.o),re},{e:void 0,t:void 0,a:void 0,o:void 0}),ie})()},JKe=t=>{const e=rc(),n=!!Ox(),r=Fn(()=>{if(n){const a=Ox(),l=t.data.parentRecord,c=[];return l&&l.field.allFields.filter(x=>x.isAtomicField()&&x.sourceWasDimension()).forEach(x=>{c.push({fieldDef:x.expression,value:l.cell(x).value})}),{...a,root:!1,currentRow:t.currentRow??a.currentRow,currentExplore:t.data.field.fieldPath,dimensionContext:[...a.dimensionContext,...c]}}const[o,u]=CKe();return{root:!0,layout:bKe(e,t.data.field),store:o,setStore:u,headerSizeStore:rC({}),currentRow:[],currentExplore:t.data.field.fieldPath,dimensionContext:[]}});r().root&&oo().addCSSToShadowRoot(TKe);const i=oo().tableConfig,s=()=>Zo(t,{disableVirtualization:typeof t.disableVirtualization=="boolean"?t.disableVirtualization:i().disableVirtualization,rowLimit:typeof t.rowLimit=="number"?t.rowLimit:i().rowLimit,shouldFillWidth:typeof t.shouldFillWidth=="boolean"?t.shouldFillWidth:i().shouldFillWidth});return Ge($se.Provider,{get value(){return r()},get children(){return Ge(XKe,Zo(s))}})};zT(["click"]);var KKe=mt('<div class=malloy-list style="text-wrap:wrap;line-height:calc(var(--malloy-render--table-row-height) * 5 / 7 - 1px);">'),ZKe=mt("<span>");function eZe(t){if(t.dataColumn.isNull())return"∅";const e=t.tag.tag("list"),n=t.tag.tag("list_detail");if(!e&&!n)throw new Error("Missing tag for List renderer");if(!t.field.isExplore())throw new Error("List renderer: Field must be ExploreField");if(!t.dataColumn.isArray())throw new Error("List renderer: DataColumn must be DataArray");const r=t.field.allFields.filter(u=>{const{tag:a}=u.tagParse();return!a.has("hidden")})[0],i=!!n,s=t.field.allFields.filter(u=>{const{tag:a}=u.tagParse();return!a.has("hidden")})[1],o=[];for(const u of t.dataColumn)o.push(u);return(()=>{var u=KKe();return Xe(u,Ge(Yn,{each:o,children:(a,l)=>(()=>{var c=ZKe();return Xe(c,()=>Cc({field:r,dataColumn:a.cell(r),resultMetadata:t.resultMetadata,tag:r.tagParse().tag}).renderValue,null),Xe(c,()=>i&&s&&"("+Cc({field:s,dataColumn:a.cell(s),resultMetadata:t.resultMetadata,tag:s.tagParse().tag}).renderValue+")",null),Xe(c,()=>l()<o.length-1&&", ",null),c})()})),u})()}var tZe=mt("<img>");function nZe(t){const e=t.tag.tag("image");if(!e)throw new Error("Missing tag for Image renderer");if(!t.field.isAtomicField())throw new Error("Image renderer: Field must be AtomicField");if(!t.dataColumn.isString())throw new Error("Image renderer: DataColumn must be DataString");const n=e.text("width"),r=e.text("height"),i={};n&&(i.width=n),r&&(i.height=r);let s;const o=e.tag("alt");o&&(s=XW({tag:o,data:t.dataColumn})??o.text());let u;return t.dataColumn.isNull()||(u=t.dataColumn.value),(()=>{var a=tZe();return wc(a,i),Ji(a,"src",u),Ji(a,"alt",s),a})()}const rZe=`.malloy-dashboard {
1680
1680
  background: #f7f9fc;
1681
1681
  width: 100%;
1682
1682
  height: 100%;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@malloydata/render",
3
- "version": "0.0.222-dev241211235345",
3
+ "version": "0.0.222-dev241212001744",
4
4
  "license": "MIT",
5
5
  "main": "dist/module/index.umd.js",
6
6
  "types": "dist/index.d.ts",
@@ -30,7 +30,7 @@
30
30
  "build-types": "tsc --build --declaration --emitDeclarationOnly"
31
31
  },
32
32
  "dependencies": {
33
- "@malloydata/malloy": "^0.0.222-dev241211235345",
33
+ "@malloydata/malloy": "^0.0.222-dev241212001744",
34
34
  "@tanstack/solid-virtual": "^3.10.4",
35
35
  "component-register": "^0.8.6",
36
36
  "lodash": "^4.17.20",