@vuu-ui/vuu-table 0.7.2 → 0.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/index.js +1 -1
- package/cjs/index.js.map +3 -3
- package/esm/index.js +1 -1
- package/esm/index.js.map +3 -3
- package/package.json +5 -5
- package/types/useTableModel.d.ts +8 -8
package/esm/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{isNumericColumn as Rn}from"@vuu-ui/vuu-utils";var Ge=e=>(t,n)=>{let o=[];if(e===void 0)return o;if(t==="header")o.push(...Tn(n,e)),o.push(...Hn(n,e)),o.push(...Dn(n,e)),o.push(...xn(n));else if(t==="filter"){let{column:r,filter:i}=n,s=(i==null?void 0:i.column)===(r==null?void 0:r.name);o.push({label:"Edit filter",action:"filter-edit",options:n}),o.push({label:"Remove filter",action:"filter-remove-column",options:n}),r&&!s&&o.push({label:"Remove all filters",action:"remove-filters",options:n})}return o};function Tn(e,{sort:{sortDefs:t}}){let{column:n}=e,o=[];if(n===void 0)return o;let r=t.length>0;return n.sorted==="A"?o.push({label:"Reverse Sort (DSC)",action:"sort-dsc",options:e}):n.sorted==="D"?o.push({label:"Reverse Sort (ASC)",action:"sort-asc",options:e}):typeof n.sorted=="number"?(n.sorted>0?o.push({label:"Reverse Sort (DSC)",action:"sort-add-dsc",options:e}):o.push({label:"Reverse Sort (ASC)",action:"sort-add-asc",options:e}),r&&Math.abs(n.sorted)<t.length&&o.push({label:"Remove from sort",action:"sort-remove",options:e}),o.push({label:"New Sort",children:[{label:"Ascending",action:"sort-asc",options:e},{label:"Descending",action:"sort-dsc",options:e}]})):r?(o.push({label:"Add to sort",children:[{label:"Ascending",action:"sort-add-asc",options:e},{label:"Descending",action:"sort-add-dsc",options:e}]}),o.push({label:"New Sort",children:[{label:"Ascending",action:"sort-asc",options:e},{label:"Descending",action:"sort-dsc",options:e}]})):o.push({label:"Sort",children:[{label:"Ascending",action:"sort-asc",options:e},{label:"Descending",action:"sort-dsc",options:e}]}),o}function Dn(e,t){let{column:n}=e;if(n===void 0||t.groupBy.length===0)return[];let{name:o,label:r=o}=n;return[{label:`Aggregate ${r}`,children:[{label:"Count",action:"agg-count",options:e}].concat(Rn(n)?[{label:"Sum",action:"agg-sum",options:e},{label:"Avg",action:"agg-avg",options:e},{label:"High",action:"agg-high",options:e},{label:"Low",action:"agg-low",options:e}]:[])}]}var be=(e,t)=>({label:`Pin ${t}`,action:`column-pin-${t}`,options:e}),fe=e=>be(e,"left"),ge=e=>be(e,"floating"),Ce=e=>be(e,"right");function xn(e){let{column:t}=e;if(t===void 0)return[];let{pin:n}=t,o=[{label:"Hide column",action:"column-hide",options:e},{label:"Remove column",action:"column-remove",options:e}];return n===void 0?o.push({label:"Pin column",children:[fe(e),ge(e),Ce(e)]}):n==="left"?o.push({label:"Unpin column",action:"column-unpin",options:e},{label:"Pin column",children:[ge(e),Ce(e)]}):n==="right"?o.push({label:"Unpin column",action:"column-unpin",options:e},{label:"Pin column",children:[fe(e),ge(e)]}):n==="floating"&&o.push({label:"Unpin column",action:"column-unpin",options:e},{label:"Pin column",children:[fe(e),Ce(e)]}),o}function Hn(e,{groupBy:t}){let{column:n}=e,o=[];if(n===void 0)return o;let{name:r,label:i=r}=n;return t.length===0?o.push({label:`Group by ${i}`,action:"group",options:e}):o.push({label:`Add ${i} to group by`,action:"group-add",options:e}),o}import{removeColumnFromFilter as Pn}from"@vuu-ui/vuu-filters";import{addGroupColumn as Be,addSortColumn as Ue,AggregationType as En,setAggregations as Z,setSortColumn as _e}from"@vuu-ui/vuu-utils";var Sn=(e,t)=>{if(e.filterStruct&&t){let[n,o]=Pn(t,e.filterStruct);return{filter:o,filterStruct:n}}else return e},{Average:An,Count:Ln,High:kn,Low:Kn,Sum:zn}=En,Je=({dataSource:e,onPersistentColumnOperation:t})=>(o,r)=>{let i=r;if(i.column&&e){let{column:s}=i;switch(o){case"sort-asc":return e.sort=_e(e.sort,s,"A"),!0;case"sort-dsc":return e.sort=_e(e.sort,s,"D"),!0;case"sort-add-asc":return e.sort=Ue(e.sort,s,"A"),!0;case"sort-add-dsc":return e.sort=Ue(e.sort,s,"D"),!0;case"group":return e.groupBy=Be(e.groupBy,s),!0;case"group-add":return e.groupBy=Be(e.groupBy,s),!0;case"column-hide":return t({type:"hideColumns",columns:[s]}),!0;case"column-remove":return e.columns=e.columns.filter(l=>l!==s.name),!0;case"filter-remove-column":return e.filter=Sn(e.filter,s),!0;case"remove-filters":return e.filter={filter:""},!0;case"agg-avg":return e.aggregations=Z(e.aggregations,s,An),!0;case"agg-high":return e.aggregations=Z(e.aggregations,s,kn),!0;case"agg-low":return e.aggregations=Z(e.aggregations,s,Kn),!0;case"agg-count":return e.aggregations=Z(e.aggregations,s,Ln),!0;case"agg-sum":return e.aggregations=Z(e.aggregations,s,zn),!0;case"column-pin-floating":return t({type:"pinColumn",column:s,pin:"floating"}),!0;case"column-pin-left":return t({type:"pinColumn",column:s,pin:"left"}),!0;case"column-pin-right":return t({type:"pinColumn",column:s,pin:"right"}),!0;case"column-unpin":return t({type:"pinColumn",column:s,pin:void 0}),!0;default:}}return!1};import{ContextMenuProvider as cs}from"@vuu-ui/vuu-popups";import{Button as as,useIdMemo as us}from"@salt-ds/core";import{buildColumnMap as yo,getColumnStyle as wo,isGroupColumn as Mo,metadataKeys as Ro,notHidden as To,visibleColumnAtIndex as Do}from"@vuu-ui/vuu-utils";import{useCallback as ft,useMemo as gt}from"react";import{isGroupColumn as je,isJsonColumn as Qn,isJsonGroup as Zn,metadataKeys as jn,notHidden as qn}from"@vuu-ui/vuu-utils";import eo from"classnames";import{memo as to,useCallback as qe}from"react";import{getColumnStyle as Nn,metadataKeys as In}from"@vuu-ui/vuu-utils";import{EditableLabel as Fn}from"@heswell/salt-lab";import Vn from"classnames";import{memo as Wn,useCallback as $n,useRef as On,useState as Xe}from"react";import{jsx as ie}from"react/jsx-runtime";var{KEY:Ye}=In,he=Wn(({className:e,column:t,columnMap:n,onClick:o,row:r})=>{let i=On(null),{align:s,CellRenderer:l,key:a,pin:u,editable:c,resizing:p,valueFormatter:d}=t,[g,h]=Xe(!1),f=d(r[a]),[R,y]=Xe(f),m=()=>{var P;(P=i.current)==null||P.focus()},b=P=>{P.key==="Enter"&&h(!0)},T=$n(P=>{o==null||o(P,t)},[t,o]),w=()=>{h(!0)},v=(P="",C="",M=!0,E=!1)=>{var x;h(!1),E?y(P):C!==P&&y(C),M===!1&&((x=i.current)==null||x.focus())},D=Vn(e,{vuuAlignRight:s==="right",vuuPinFloating:u==="floating",vuuPinLeft:u==="left",vuuPinRight:u==="right","vuuTableCell-resizing":p})||void 0,S=Nn(t);return c?ie("div",{className:D,"data-editable":!0,role:"cell",style:S,onKeyDown:b,children:ie(Fn,{editing:g,value:R,onChange:y,onMouseDownCapture:m,onEnterEditMode:w,onExitEditMode:v,onKeyDown:b,ref:i,tabIndex:0},"title")}):ie("div",{className:D,role:"cell",style:S,onClick:T,children:l?ie(l,{column:t,columnMap:n,row:r}):f})},Gn);he.displayName="TableCell";function Gn(e,t){return e.column===t.column&&e.onClick===t.onClick&&e.row[Ye]===t.row[Ye]&&e.row[e.column.key]===t.row[t.column.key]}import{getColumnStyle as Bn,metadataKeys as Un}from"@vuu-ui/vuu-utils";import{useCallback as _n}from"react";import{jsx as ve,jsxs as Yn}from"react/jsx-runtime";var{DEPTH:Jn,IS_LEAF:Qe}=Un,Xn=(e,t)=>{let{[Jn]:n,[Qe]:o}=t;if(o||n>e.length)return[null,n===null?0:n-1];if(n===0)return["$root",0];{let{key:r,valueFormatter:i}=e[n-1];return[i(t[r]),n-1]}},Ze=({column:e,onClick:t,row:n})=>{let{columns:o}=e,[r,i]=Xn(o,n),s=_n(c=>{t==null||t(c,e)},[e,t]),l=Bn(e),a=n[Qe],u=Array(i).fill(0).map((c,p)=>ve("span",{className:"vuuTableGroupCell-spacer"},p));return Yn("div",{className:"vuuTableGroupCell vuuPinLeft",onClick:a?void 0:s,role:"cell",style:l,children:[u,a?null:ve("span",{className:"vuuTableGroupCell-toggle","data-icon":"triangle-right"}),ve("span",{children:r})]})};import{jsx as et,jsxs as so}from"react/jsx-runtime";var{IDX:no,IS_EXPANDED:oo,SELECTED:ro}=jn,le="vuuTableRow",tt=to(function({columnMap:t,columns:n,offset:o,onClick:r,onToggleGroup:i,virtualColSpan:s=0,row:l}){let{[no]:a,[oo]:u,[ro]:c}=l,p=eo(le,{[`${le}-even`]:a%2===0,[`${le}-expanded`]:u,[`${le}-preSelected`]:c===2}),d=qe(h=>{let f=h.shiftKey,R=h.ctrlKey||h.metaKey;r==null||r(l,f,R)},[r,l]),g=qe((h,f)=>{(je(f)||Zn(f,l))&&(h.stopPropagation(),i==null||i(l,f))},[i,l]);return so("div",{"aria-selected":c===1?!0:void 0,"aria-rowindex":a,className:p,onClick:d,role:"row",style:{transform:`translate3d(0px, ${o}px, 0px)`},children:[s>0?et("div",{role:"cell",style:{width:s}}):null,n.filter(qn).map(h=>{let f=je(h),R=Qn(h);return et(f?Ze:he,{column:h,columnMap:t,onClick:f||R?g:void 0,row:l},h.name)})]})});import st from"classnames";import{useRef as ao}from"react";import{useCallback as ye,useRef as io}from"react";import{jsx as co}from"react/jsx-runtime";var nt=()=>{},lo="vuuColumnResizer",ce=({onDrag:e,onDragEnd:t=nt,onDragStart:n=nt})=>{let o=io(0),r=ye(l=>{l.stopPropagation&&l.stopPropagation(),l.preventDefault&&l.preventDefault();let a=Math.round(l.clientX),u=a-o.current;o.current=a,u!==0&&e(l,u)},[e]),i=ye(l=>{window.removeEventListener("mouseup",i),window.removeEventListener("mousemove",r),t(l)},[t,r]),s=ye(l=>{n(l),o.current=Math.round(l.clientX),window.addEventListener("mouseup",i),window.addEventListener("mousemove",r),l.stopPropagation&&l.stopPropagation(),l.preventDefault&&l.preventDefault()},[n,r,i]);return co("div",{className:lo,"data-align":"end",onMouseDown:s})};import{useCallback as we,useRef as ot}from"react";var ae=({column:e,onResize:t,rootRef:n})=>{let o=ot(0),r=ot(!1),{name:i}=e,s=we(()=>{if(t&&n.current){let{width:u}=n.current.getBoundingClientRect();o.current=Math.round(u),r.current=!0,t==null||t("begin",i)}},[i,t,n]),l=we((u,c)=>{if(n.current&&t){let{width:p}=n.current.getBoundingClientRect(),d=Math.round(p)+c;d!==o.current&&d>0&&(t("resize",i,d),o.current=d)}},[i,t,n]),a=we(()=>{t&&(t("end",i,o.current),setTimeout(()=>{r.current=!1},100))},[i,t]);return{isResizing:r.current,onDrag:l,onDragStart:s,onDragEnd:a}};import{jsx as G,jsxs as lt}from"react/jsx-runtime";var V="vuuTable-groupHeaderCell",rt=({column:e,onClick:t,...n})=>G("span",{...n,className:`${V}-close`,"data-icon":"close-circle",onClick:()=>t==null?void 0:t(e)}),uo=e=>{let{children:t,column:n,className:o}=e;return lt("div",{className:st(`${V}-col`,o),role:"columnheader",children:[G("span",{className:`${V}-label`,children:n.name}),t]})},it=({column:e,className:t,onRemoveColumn:n,onResize:o,...r})=>{let i=ao(null),{isResizing:s,...l}=ae({column:e,onResize:o,rootRef:i}),a=st(V,t,{vuuPinLeft:e.pin==="left",[`${V}-right`]:e.align==="right",[`${V}-resizing`]:e.resizing,[`${V}-pending`]:e.groupConfirmed===!1}),{columns:u}=e;return G("div",{className:a,ref:i,...r,children:lt("div",{className:`${V}-inner`,children:[u.map(c=>G(uo,{column:c,children:u.length>1?G(rt,{column:c,onClick:n}):null},c.key)),G(rt,{"data-align":"end",onClick:n}),e.resizeable!==!1?G(ce,{...l}):null]})})};import bo from"classnames";import{useCallback as Me,useRef as dt}from"react";import ct from"classnames";import{jsx as ue,jsxs as mo}from"react/jsx-runtime";var at="vuuSortIndicator",ut=({sorted:e})=>{if(!e)return null;let t=typeof e=="number"?e<0?"dsc":"asc":e==="A"?"asc":"dsc";return typeof e=="number"?mo("div",{className:ct(at,"multi-col",t),children:[ue("span",{"data-icon":`sorted-${t}`}),ue("span",{className:"vuuSortPosition",children:Math.abs(e)})]}):ue("div",{className:ct(at,"single-col"),children:ue("span",{"data-icon":`sorted-${t}`})})};import{useContextMenu as ho}from"@vuu-ui/vuu-popups";import{useContextMenu as po}from"@vuu-ui/vuu-popups";import fo from"classnames";import{useCallback as go}from"react";import{jsx as Co}from"react/jsx-runtime";var mt=({column:e,filter:t})=>{let n=po(),o=go(r=>{r.stopPropagation(),n(r,"filter",{column:e,filter:t})},[e,t,n]);return e.filter?Co("div",{className:fo("vuuFilterIndicator"),"data-icon":"filter",onClick:o}):null};import{jsx as q,jsxs as vo}from"react/jsx-runtime";var j="vuuTable-headerCell",pt=({column:e,className:t,onClick:n,onDragStart:o,onResize:r,...i})=>{let s=dt(null),{isResizing:l,...a}=ae({column:e,onResize:r,rootRef:s}),u=ho(),c=dt(null),p=R=>{u(R,"header",{column:e})},d=Me(R=>!l&&(n==null?void 0:n(R)),[l,n]),g=Me(R=>{c.current=window.setTimeout(()=>{o==null||o(R),c.current=null},500)},[o]),h=Me(()=>{c.current!==null&&(window.clearTimeout(c.current),c.current=null)},[]),f=bo(j,t,{vuuPinFloating:e.pin==="floating",vuuPinLeft:e.pin==="left",vuuPinRight:e.pin==="right",vuuEndPin:e.endPin,[`${j}-resizing`]:e.resizing,[`${j}-right`]:e.align==="right"});return q("div",{className:f,...i,onClick:d,onContextMenu:p,onMouseDown:g,onMouseUp:h,ref:s,children:vo("div",{className:`${j}-inner`,children:[q(mt,{column:e}),q("div",{className:`${j}-label`,children:e.label}),q(ut,{sorted:e.sorted}),e.resizeable!==!1?q(ce,{...a}):null]})})};import{jsx as B,jsxs as Ct}from"react/jsx-runtime";var Re="vuuTable",{RENDER_IDX:xo}=Ro,bt=({columns:e,columnsWithinViewport:t,data:n,getRowOffset:o,headings:r,onColumnResize:i,onHeaderCellDragStart:s,onContextMenu:l,onRemoveColumnFromGroupBy:a,onRowClick:u,onSort:c,onToggleGroup:p,tableId:d,virtualColSpan:g=0,rowCount:h})=>{let f=ft(b=>{s==null||s(b)},[s]),R=gt(()=>e.filter(To),[e]),y=gt(()=>yo(e),[e]),m=ft(b=>{var P;let w=b.target.closest(".vuuTable-headerCell"),v=parseInt((P=w==null?void 0:w.dataset.idx)!=null?P:"-1"),D=Do(e,v),S=b.shiftKey;D&&c(D,S)},[e,c]);return Ct("div",{"aria-rowcount":h,className:`${Re}-table`,role:"table",children:[Ct("div",{className:`${Re}-headers`,role:"rowGroup",children:[r.map((b,T)=>B("div",{className:"vuuTable-heading",children:b.map(({label:w,width:v},D)=>B("div",{className:"vuuTable-headingCell",style:{width:v},children:w},D))},T)),B("div",{role:"row",children:R.map((b,T)=>{let w=wo(b);return Mo(b)?B(it,{column:b,"data-idx":T,onRemoveColumn:a,onResize:i,role:"columnHeader",style:w},T):B(pt,{column:b,"data-idx":T,id:`${d}-${T}`,onClick:m,onDragStart:f,onResize:i,role:"columnHeader",style:w},T)})})]}),B("div",{className:`${Re}-body`,onContextMenu:l,role:"rowGroup",children:n==null?void 0:n.map(b=>B(tt,{columnMap:y,columns:t,offset:o(b),onClick:u,virtualColSpan:g,onToggleGroup:p,row:b},b[xo]))})]})};import{useContextMenu as jr}from"@vuu-ui/vuu-popups";import{applySort as qr,buildColumnMap as es,isJsonGroup as ts,metadataKeys as ns,moveItem as os}from"@vuu-ui/vuu-utils";import{useCallback as z,useEffect as Yt,useMemo as rs,useRef as Ie,useState as ss}from"react";import{isVuuFeatureAction as Ho,isVuuFeatureInvocation as Po}from"@vuu-ui/vuu-data";import{getFullRange as Te,metadataKeys as Eo,WindowRange as So}from"@vuu-ui/vuu-utils";import{useCallback as Y,useEffect as me,useMemo as Ao,useRef as ee,useState as Lo}from"react";var{SELECTED:te}=Eo;function ht({dataSource:e,onConfigChange:t,onFeatureEnabled:n,onFeatureInvocation:o,onSizeChange:r,onSubscribed:i,range:s={from:0,to:0},renderBufferSize:l=0,viewportRowCount:a}){let[,u]=Lo(null),c=ee(!0),p=ee(!1),d=ee({from:0,to:0}),g=ee(null),h=ee([]),f=Ao(()=>new De(Te(s)),[]),R=Y(v=>{for(let D of v)f.add(D);h.current=f.data,p.current=!0},[f]),y=Y(v=>{v.type==="subscribed"?i==null||i(v):v.type==="viewport-update"?(typeof v.size=="number"&&(r==null||r(v.size),f.setRowCount(v.size)),v.rows?R(v.rows):typeof v.size=="number"&&(h.current=f.data,p.current=!0)):Ho(v)?n==null||n(v):Po(v)?o==null||o(v):console.log(`useDataSource unexpected message ${v.type}`)},[f,n,o,r,i,R]);me(()=>()=>{g.current&&(cancelAnimationFrame(g.current),g.current=null),c.current=!1},[]);let m=Y(()=>{c.current&&(p.current&&(u({}),p.current=!1),g.current=requestAnimationFrame(m))},[u]);me(()=>{g.current=requestAnimationFrame(m)},[m]);let b=Y(v=>{let{from:D}=e.range,S={from:D,to:D+v},P=Te(S,l);f.setRange(P),e.range=d.current=P,e.emit("range",S)},[e,f,l]),T=Y(v=>{let D=Te(v,l);f.setRange(D),e.range=d.current=D,e.emit("range",v)},[e,f,l]),w=Y(()=>f.getSelectedRows(),[f]);return me(()=>{e==null||e.subscribe({range:d.current},y)},[e,y,t]),me(()=>{b(a)},[b,a]),{data:h.current,getSelectedRows:w,range:d.current,setRange:T,dataSource:e}}var De=class{constructor({from:t,to:n}){this.rowCount=0;this.setRowCount=t=>{t<this.data.length&&(this.data.length=t),this.rowCount=t};this.range=new So(t,n),this.data=new Array(n-t),this.rowCount=0}add(t){var o;let[n]=t;if(this.isWithinRange(n)){let r=n-this.range.from;this.data[r]=t;let i=t[te],s=(o=this.data[r-1])==null?void 0:o[te];s===0&&i?this.data[r-1][te]=2:s===2&&!i&&(this.data[r-1][te]=0)}}getAtIndex(t){return this.range.isWithin(t)&&this.data[t-this.range.from]!=null?this.data[t-this.range.from]:void 0}isWithinRange(t){return this.range.isWithin(t)}setRange({from:t,to:n}){if(t!==this.range.from||n!==this.range.to){let[o,r]=this.range.overlap(t,n),i=new Array(Math.max(0,n-t));for(let s=o;s<r;s++){let l=this.getAtIndex(s);if(l){let a=s-t;i[a]=l}}this.data=i,this.range.from=t,this.range.to=n}}getSelectedRows(){return this.data.filter(t=>t[te]===1)}};import{useDragDrop as ko}from"@heswell/salt-lab";import{useCallback as vt,useRef as yt}from"react";var wt=({onDrop:e})=>{let t=yt(),n=yt(null),o=vt(()=>{console.log("handleDropSettle"),t.current=void 0,n.current=null},[]),{draggable:r,draggedItemIndex:i,onMouseDown:s}=ko({allowDragDrop:!0,draggableClassName:"vuuTable-headerCell",orientation:"horizontal",containerRef:n,itemQuery:".vuuTable-headerCell",onDrop:e,onDropSettle:o}),l=vt(a=>{let{clientX:u,clientY:c}=a;console.log("useDraggableColumn handleHeaderCellDragStart means mouseDown fired on a column in RowBasedTable");let d=a.target.closest(".vuuTable-headerCell");n.current=d==null?void 0:d.closest("[role='row']");let{dataset:{idx:g="-1"}}=d;t.current={clientX:u,clientY:c,idx:g},s==null||s(a)},[s]);return{draggable:r,draggedItemIndex:i,onHeaderCellDragStart:l}};import{withinRange as Wo}from"@vuu-ui/vuu-utils";import{useCallback as F,useEffect as $o,useLayoutEffect as Oo,useMemo as Go,useRef as Ke}from"react";function Ko(e,...t){let n=new Set(e);for(let o of t)for(let r of o)n.add(r);return n}var xe="ArrowUp",He="ArrowDown",Pe="ArrowLeft",Ee="ArrowRight";var Se="Home",Ae="End",Le="PageUp",ke="PageDown";var zo=new Set(["Enter","Delete"," "]),No=new Set(["Tab"]),Io=new Set(["ArrowRight","ArrowLeft"]),Mt=new Set([Se,Ae,Le,ke,He,Pe,Ee,xe]),Fo=new Set(["F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12"]),Pl=Ko(zo,Mt,Io,Fo,No);var Vo=["Home","End","PageUp","PageDown"],Rt=e=>Vo.includes(e),Tt=e=>Mt.has(e);var Dt=e=>`.vuuTable-headers .vuuTable-headerCell:nth-child(${e+1})`,Bo=(e,t)=>`.vuuTable-body > [aria-rowindex='${e}'] > [role='cell']:nth-child(${t+1})`,Uo=[-1,-1];function _o(e,[t,n],o,r){return e===xe?t>-1?[t-1,n]:[t,n]:e===He?t===-1?[0,n]:t===r-1?[t,n]:[t+1,n]:e===Ee?n<o-1?[t,n+1]:[t,n]:e===Pe?n>0?[t,n-1]:[t,n]:[t,n]}var xt=({columnCount:e=0,containerRef:t,disableHighlightOnFocus:n,data:o,requestScroll:r,rowCount:i=0,viewportRange:s})=>{var P;let{from:l,to:a}=s,u=Ke([-1,-1]),c=Ke(),p=Ke([-1,0]),d=F(([C,M])=>{var x;let E=C===-1?Dt(M):Bo(C,M);return(x=t.current)==null?void 0:x.querySelector(E)},[t]),g=C=>C==null?void 0:C.closest("[role='columnHeader'],[role='cell']"),h=C=>{var M,E;if(C.role==="columnHeader")return[-1,parseInt((M=C.dataset.idx)!=null?M:"-1",10)];{let x=C.closest("[role='row']");if(x){let K=parseInt((E=x.ariaRowIndex)!=null?E:"-1",10),J=Array.from(x.childNodes).indexOf(C);return[K,J]}}return Uo},f=F(C=>{var M;if(t.current){let E=d(C);E?(E!==c.current&&((M=c.current)==null||M.setAttribute("tabindex",""),c.current=E,E.setAttribute("tabindex","0")),E.focus()):Wo(C[0],s)||(c.current=void 0,r==null||r({type:"scroll-page",direction:"up"}))}},[t,d,r,s]),R=F((C,M,E=!1)=>{let x=[C,M];p.current=x,f(x),E&&(u.current=x)},[f]),y=F(()=>{var C;(C=c.current)==null||C.setAttribute("tabindex",""),c.current=void 0},[]),m=F(async(C,M)=>{switch(C){case ke:r==null||r({type:"scroll-page",direction:"down"});break;case Le:r==null||r({type:"scroll-page",direction:"up"});break;case Se:r==null||r({type:"scroll-end",direction:"home"});break;case Ae:r==null||r({type:"scroll-end",direction:"end"});break}return M},[r]),b=F(()=>{var C;if(n!==!0&&(C=t.current)!=null&&C.contains(document.activeElement)){let M=g(document.activeElement);M&&(u.current=h(M))}},[n,t]),T=F(async C=>{let[M,E]=Rt(C)?await m(C,p.current):_o(C,p.current,e,i),[x,K]=p.current;(M!==x||E!==K)&&R(M,E,!0)},[e,m,i,R]),w=F(C=>{o.length>0&&Tt(C.key)&&(C.preventDefault(),C.stopPropagation(),T(C.key))},[o,T]),v=F(C=>{let M=C.target,E=g(M);if(E){let[x,K]=h(E);R(x,K)}},[R]),D=Go(()=>({onClick:v,onFocus:b,onKeyDown:w}),[v,b,w]);Oo(()=>{let{current:C}=p,M=C[0]>=l&&C[0]<=a;c.current&&!M?y():!c.current&&M&&f(C)},[f,l,a,y]);let S=((P=t.current)==null?void 0:P.firstChild)!=null;return $o(()=>{var C;if(S&&c.current===void 0){let M=(C=t.current)==null?void 0:C.querySelector(Dt(0));M&&(M.setAttribute("tabindex","0"),c.current=M)}},[t,S]),D};import{isValidNumber as W}from"@vuu-ui/vuu-utils";import{useCallback as Yo,useMemo as Qo,useRef as Zo,useState as jo}from"react";import{useCallback as Jo,useEffect as Ht,useRef as Xo}from"react";var U=new Map,Et=(e,t,n)=>{switch(n){case"height":return t.height;case"clientHeight":return e.clientHeight;case"clientWidth":return e.clientWidth;case"contentHeight":return t.contentHeight;case"contentWidth":return t.contentWidth;case"scrollHeight":return Math.ceil(e.scrollHeight);case"scrollWidth":return Math.ceil(e.scrollWidth);case"width":return t.width;default:return 0}},Pt=new ResizeObserver(e=>{for(let t of e){let{target:n,borderBoxSize:o,contentBoxSize:r}=t,i=U.get(n);if(i){let[{blockSize:s,inlineSize:l}]=o,[{blockSize:a,inlineSize:u}]=r,{onResize:c,measurements:p}=i,d=!1;for(let[g,h]of Object.entries(p)){let f=Et(n,{height:s,width:l,contentHeight:a,contentWidth:u},g);f!==h&&(d=!0,p[g]=f)}d&&c&&c(p)}}});function St(e,t,n,o=!1){let r=Xo(t),i=Jo(s=>{let{width:l,height:a}=s.getBoundingClientRect(),{clientWidth:u,clientHeight:c}=s;return r.current.reduce((p,d)=>(p[d]=Et(s,{width:l,height:a,contentHeight:c,contentWidth:u},d),p),{})},[]);Ht(()=>{let s=e.current;async function l(){U.set(s,{measurements:{}}),await document.fonts.ready;let a=U.get(s);if(a){let u=i(s);a.measurements=u,Pt.observe(s),o&&n(u)}else console.log("%cuseResizeObserver an target expected to be under observation wa snot found. This warrants investigation","font-weight:bold; color:red;")}if(s){if(U.has(s))throw Error("useResizeObserver attemping to observe same element twice");l()}return()=>{s&&U.has(s)&&(Pt.unobserve(s),U.delete(s))}},[i,e]),Ht(()=>{let s=e.current,l=U.get(s);if(l){if(r.current!==t){r.current=t;let a=i(s);l.measurements=a}l.onResize=n}},[t,i,e,n])}var qo=["clientHeight","clientWidth"],At=e=>Number.isFinite(e),er={height:"100%",width:"100%"},tr=(e,t)=>W(e)&&W(t)?{height:`${e}px`,width:`${t}px`}:er,nr=(e,t)=>{if(W(e)&&W(t))return{height:e,width:t}},Lt=({defaultHeight:e=0,defaultWidth:t=0,height:n,width:o})=>{let r=Zo(null),[i,s]=jo({css:tr(n,o),inner:nr(n,o),outer:{height:n!=null?n:"100%",width:o!=null?o:"100%"}});Qo(()=>{s(a=>{let{inner:u,outer:c}=a;if(W(n)&&W(o)&&u&&c){let{height:p,width:d}=u,{height:g,width:h}=c;if(g!==n||h!==o){let f=W(g)?g-p:0,R=W(h)?h-d:0;return{...a,outer:{height:n,width:o},inner:{height:n-f,width:o-R}}}}return a})},[n,o]);let l=Yo(({clientWidth:a,clientHeight:u})=>{s(c=>{let{css:p,inner:d,outer:g}=c;return At(u)&&At(a)&&(a!==(d==null?void 0:d.width)||u!==(d==null?void 0:d.height))?{css:p,outer:g,inner:{width:Math.floor(a)||t,height:Math.floor(u)||e}}:c})},[e,t]);return St(r,qo,l,!0),{containerRef:r,cssSize:i.css,outerSize:i.outer,innerSize:i.inner}};import{deselectItem as or,metadataKeys as rr,selectItem as sr}from"@vuu-ui/vuu-utils";import{useCallback as ir,useRef as kt}from"react";var{IDX:lr,SELECTED:cr}=rr,ar=[],Kt=({selectionModel:e,onSelectionChange:t})=>{let n=kt(-1),o=kt(ar);return ir((i,s,l)=>{let{[lr]:a,[cr]:u}=i,{current:c}=n,{current:p}=o,g=(u?or:sr)(e,p,a,s,l,c);o.current=g,n.current=a,t&&t(g)},[t,e])};import{moveItem as ur}from"@heswell/salt-lab";import{applyFilterToColumns as mr,applyGroupByToColumns as dr,applySortToColumns as pr,findColumn as fr,getCellRenderer as gr,getColumnName as Cr,getTableHeadings as br,getValueFormatter as hr,isFilteredColumn as vr,isGroupColumn as yr,isPinned as wr,isTypeDescriptor as Mr,logger as Rr,metadataKeys as Tr,sortPinnedColumns as zt,stripFilterFromColumns as Dr}from"@vuu-ui/vuu-utils";import{useReducer as xr}from"react";var{info:ze}=Rr("useTableModel"),Hr=100,Nt=Tr.count,Pr=({serverDataType:e})=>e===void 0,Er=e=>{var t;if(Mr(e.type))return gr((t=e.type)==null?void 0:t.renderer)},Sr=(e,t,n)=>{var r;let o=t.indexOf(e.name);return o!==-1&&n[o]?n[o]:(r=e.serverDataType)!=null?r:"string"},Ar=["int","long","double"],It=e=>e===void 0?void 0:Ar.includes(e)?"right":"left",Lr=(e,t)=>{switch(ze==null||ze(`GridModelReducer ${t.type}`),t.type){case"init":return Vt(t);case"moveColumn":return Kr(e,t);case"resizeColumn":return Ir(e,t);case"setTypes":return Fr(e,t);case"hideColumns":return zr(e,t);case"showColumns":return Nr(e,t);case"pinColumn":return Vr(e,t);case"updateColumnProp":return ne(e,t);case"tableConfig":return $t(e,t);default:return console.log(`unhandled action ${t.type}`),e}},Ft=(e,t)=>{let[n,o]=xr(Lr,{tableConfig:e,dataSourceConfig:t},Vt);return{columns:n.columns,dispatchColumnAction:o,headings:n.headings}};function Vt({dataSourceConfig:e,tableConfig:t}){let n=t.columns.map(Wt(t)),o=n.some(wr)?zt(n):n,r={columns:o,headings:br(o)};if(e){let{columns:i,...s}=e;return $t(r,{type:"tableConfig",...s})}else return r}var kr=(e,t)=>t==="uppercase"?e.toUpperCase():t==="capitalize"?e[0].toUpperCase()+e.slice(1).toLowerCase():e,Wt=e=>(t,n)=>{let{columnDefaultWidth:o=Hr,columnFormatHeader:r}=e,{align:i=It(t.serverDataType),key:s,name:l,label:a=l,width:u=o,...c}=t,p={...c,align:i,CellRenderer:Er(t),label:kr(a,r),key:s!=null?s:n+Nt,name:l,originalIdx:n,valueFormatter:hr(t),width:u};return yr(p)&&(p.columns=p.columns.map(d=>Wt(e)(d,d.key))),p};function Kr(e,{column:t,moveBy:n,moveTo:o}){let{columns:r}=e;if(typeof n=="number"){let i=r.indexOf(t),s=r.slice(),[l]=s.splice(i,1);return s.splice(i+n,0,l),{...e,columns:s}}else if(typeof o=="number"){let i=r.indexOf(t);return{...e,columns:ur(r,i,o)}}return e}function zr(e,{columns:t}){return t.some(n=>n.hidden!==!0)?t.reduce((n,o)=>o.hidden!==!0?ne(n,{type:"updateColumnProp",column:o,hidden:!0}):n,e):e}function Nr(e,{columns:t}){return t.some(n=>n.hidden)?t.reduce((n,o)=>o.hidden?ne(n,{type:"updateColumnProp",column:o,hidden:!1}):n,e):e}function Ir(e,{column:t,phase:n,width:o}){let r="updateColumnProp",i=n!=="end";switch(n){case"begin":case"end":return ne(e,{type:r,column:t,resizing:i});case"resize":return ne(e,{type:r,column:t,width:o});default:throw Error(`useTableModel.resizeColumn, invalid resizePhase ${n}`)}}function Fr(e,{columnNames:t,serverDataTypes:n}){let{columns:o}=e;if(o.some(Pr)){let r=o.map(i=>{var l;let s=Sr(i,t,n);return{...i,align:(l=i.align)!=null?l:It(s),serverDataType:s}});return{...e,columns:r}}else return e}function Vr(e,t){let{columns:n}=e,{column:o,pin:r}=t,i=n.find(s=>s.name===o.name);return i?(n=Q(n,{...i,pin:r}),n=zt(n),{...e,columns:n}):e}function ne(e,t){let{columns:n}=e,{align:o,column:r,hidden:i,label:s,resizing:l,width:a}=t,u=n.find(c=>c.name===r.name);return u&&((o==="left"||o==="right")&&(n=Q(n,{...u,align:o})),typeof s=="string"&&(n=Q(n,{...u,label:s})),typeof l=="boolean"&&(n=Q(n,{...u,resizing:l})),typeof i=="boolean"&&(n=Q(n,{...u,hidden:i})),typeof a=="number"&&(n=Q(n,{...u,width:a}))),{...e,columns:n}}function $t(e,{columns:t,confirmed:n,filter:o,groupBy:r,sort:i}){let s=t&&t.length>0,l=r!==void 0,a=typeof(o==null?void 0:o.filter)=="string",u=i&&i.sortDefs.length>0,c=e;return s&&(c={...e,columns:t.map((p,d)=>{let g=Cr(p),h=d+Nt,f=fr(c.columns,g);if(f)return f.key===h?f:{...f,key:h};throw Error(`useTableModel column ${p} not found`)})}),l&&(c={...e,columns:dr(c.columns,r,n)}),u&&(c={...e,columns:pr(c.columns,i)}),a?c={...e,columns:mr(c.columns,o)}:c.columns.some(vr)&&(c={...e,columns:Dr(c.columns)}),c}function Q(e,t){return e.map(n=>n.name===t.name?t:n)}import{useCallback as $,useRef as oe}from"react";var Ot=e=>{let{scrollLeft:t,scrollTop:n}=e,{clientHeight:o,clientWidth:r,scrollHeight:i,scrollWidth:s}=e,l=t/(s-r),a=n/(i-o);return[l,a]},Wr=e=>{let{clientHeight:t,clientWidth:n,scrollHeight:o,scrollWidth:r}=e;return[r-n,o-t]},Gt=({onAttach:e,onDetach:t})=>{let n=oe(null);return $(r=>{if(r)n.current=r,e==null||e(r);else if(n.current){let{current:i}=n;n.current=r,t==null||t(i)}},[e,t])},Bt=({onHorizontalScroll:e,onVerticalScroll:t,viewport:n})=>{let o=oe(!1),r=oe({scrollTop:0,scrollLeft:0}),i=oe(null),s=oe(null),{maxScrollContainerScrollHorizontal:l,maxScrollContainerScrollVertical:a}=n,u=$(()=>{let{current:m}=s,{current:b}=i,{current:T}=o;if(T)o.current=!1;else if(m&&b){let[w,v]=Ot(b),[D,S]=Wr(m),P=Math.round(w*D),C=Math.round(v*S);m.scrollTo({left:P,top:C,behavior:"auto"})}},[]),c=$(()=>{let{current:m}=s,{current:b}=i,{current:T}=r;if(m&&b){let{scrollLeft:w,scrollTop:v}=m,[D,S]=Ot(m);o.current=!0,b.scrollLeft=Math.round(D*l),b.scrollTop=Math.round(S*a),T.scrollTop!==v&&(T.scrollTop=v,t==null||t(v,S)),T.scrollLeft!==w&&(T.scrollLeft=w,e==null||e(w))}},[l,a,e,t]),p=$(m=>{i.current=m,m.addEventListener("scroll",u,{passive:!0})},[u]),d=$(m=>{i.current=null,m.removeEventListener("scroll",u)},[u]),g=$(m=>{s.current=m,m.addEventListener("scroll",c,{passive:!0})},[c]),h=$(m=>{s.current=null,m.removeEventListener("scroll",c)},[c]),f=Gt({onAttach:g,onDetach:h}),R=Gt({onAttach:p,onDetach:d}),y=$(m=>{let{current:b}=s;if(b){if(o.current=!1,m.type==="scroll-page"){let{clientHeight:T,scrollLeft:w,scrollTop:v}=b,{direction:D}=m,S=D==="down"?T:-T,P=Math.min(Math.max(0,v+S),a);b.scrollTo({top:P,left:w,behavior:"auto"})}else if(m.type==="scroll-end"){let{direction:T}=m,w=T==="end"?a:0;b.scrollTo({top:w,left:b.scrollLeft,behavior:"auto"})}}},[a]);return{scrollbarContainerRef:R,contentContainerRef:f,requestScroll:y}};import{useCallback as $r,useMemo as de,useRef as Or}from"react";import{actualRowPositioning as Gr,virtualRowPositioning as Br}from"@vuu-ui/vuu-utils";var Ur=15e5,_r={contentHeight:0,contentWidth:0,getRowAtPosition:()=>-1,getRowOffset:()=>-1,horizontalScrollbarHeight:0,maxScrollContainerScrollHorizontal:0,maxScrollContainerScrollVertical:0,pinnedWidthLeft:0,pinnedWidthRight:0,rowCount:0,setPctScrollTop:()=>{},totalHeaderHeight:0,verticalScrollbarWidth:0,viewportBodyHeight:0},Jr=e=>{let t=0,n=0,o=0;for(let r of e){let{hidden:i,pin:s,width:l}=r,a=i?0:l;s==="left"?t+=a:s==="right"?n+=a:o+=a}return{pinnedWidthLeft:t,pinnedWidthRight:n,unpinnedWidth:o}},Ut=({columns:e,headerHeight:t,headings:n,rowCount:o,rowHeight:r,size:i})=>{let s=Or(0),a=Math.min(o,Ur)*r,c=o*r-a,{pinnedWidthLeft:p,pinnedWidthRight:d,unpinnedWidth:g}=de(()=>Jr(e),[e]),[h,f]=de(()=>Gr(r),[r]),[R,y]=de(()=>c?Br(r,c,s):[h,f],[f,h,c,r]),m=$r(b=>{s.current=b},[]);return de(()=>{var b;if(i){let T=n.length,w=15,v=p+g+d,D=v>i.width?w:0,S=t*(1+T),P=a-(((b=i==null?void 0:i.height)!=null?b:0)-D)+S,C=v-i.width+p,M=(i.height-t)/r,E=Number.isInteger(M)?M+1:Math.ceil(M),x=i.height-S,K=a>x?w:0;return{contentHeight:a,getRowAtPosition:y,getRowOffset:R,horizontalScrollbarHeight:D,maxScrollContainerScrollHorizontal:C,maxScrollContainerScrollVertical:P,pinnedWidthLeft:p,pinnedWidthRight:d,rowCount:E,contentWidth:v,setPctScrollTop:m,totalHeaderHeight:S,verticalScrollbarWidth:K,viewportBodyHeight:x}}else return _r},[i,n.length,p,g,d,a,t,r,y,R,m])};import{getColumnsInViewport as _t,itemsChanged as Xr}from"@vuu-ui/vuu-utils";import{useCallback as Jt,useEffect as Yr,useMemo as Qr,useRef as Ne,useState as Zr}from"react";var Xt=({columns:e,getRowAtPosition:t,setRange:n,viewportMeasurements:o})=>{let r=Ne(-1),{rowCount:i,contentWidth:s,maxScrollContainerScrollHorizontal:l}=o,a=s-l,u=Ne(0),[c,p]=Qr(()=>_t(e,u.current,u.current+a),[a,e]),d=Ne(p);Yr(()=>{h(c)},[c]);let[g,h]=Zr(c),f=Jt(y=>{u.current=y;let[m,b]=_t(e,y,y+a);Xr(g,m)&&(d.current=b,h(m))},[a,e,g]),R=Jt(y=>{let m=t(y);m!==r.current&&(r.current=m,n({from:m,to:m+i}))},[t,n,i]);return{columnsWithinViewport:g,onHorizontalScroll:f,onVerticalScroll:R,virtualColSpan:d.current}};var is=[],{KEY:ls,IS_EXPANDED:Qt,IS_LEAF:Zt}=ns,jt=({config:e,dataSource:t,headerHeight:n,onConfigChange:o,onFeatureEnabled:r,onFeatureInvocation:i,onSelectionChange:s,renderBufferSize:l=0,rowHeight:a,selectionModel:u,...c})=>{var $e,Oe;let[p,d]=ss(t.size),g=Ie(!1),h=Ie();if(h.current=t,t===void 0)throw Error("no data source provided to Vuu Table");let f=Lt(c),R=z(H=>{d(H)},[]),{columns:y,dispatchColumnAction:m,headings:b}=Ft(e,t.config),{getRowAtPosition:T,getRowOffset:w,setPctScrollTop:v,...D}=Ut({columns:y,headerHeight:n,headings:b,rowCount:p,rowHeight:a,size:f.innerSize}),S=z(H=>{if(H.tableMeta){let{columns:A,dataTypes:k}=H.tableMeta;g.current=!0,m({type:"setTypes",columnNames:A,serverDataTypes:k})}},[m]),P=z(H=>{t.select(H),s==null||s(H)},[t,s]),C=Kt({onSelectionChange:P,selectionModel:u}),{data:M,getSelectedRows:E,range:x,setRange:K}=ht({dataSource:t,onFeatureEnabled:r,onFeatureInvocation:i,onSubscribed:S,onSizeChange:R,renderBufferSize:l,viewportRowCount:D.rowCount}),J=Ie();J.current=M;let pe=z(H=>{g.current=!0,m(H)},[m]),en=Je({dataSource:t,onPersistentColumnOperation:pe}),tn=z((H,A=!1,k)=>{t&&(t.sort=qr(t.sort,H,A,k))},[t]),nn=z((H,A,k)=>{let L=y.find(N=>N.name===A);if(L)H==="end"&&(g.current=!0),m({type:"resizeColumn",phase:H,column:L,width:k});else throw Error(`useDataTable.handleColumnResize, column ${A} not found`)},[y,m]),on=z((H,A)=>{let k=ts(A,H),L=H[ls];if(H[Qt]){if(t.closeTreeNode(L,!0),k){let N=y.indexOf(A);t.getRowsAtDepth(N+1).some(I=>I[Qt]||I[Zt])||m({type:"hideColumns",columns:y.slice(N+2)})}}else if(t.openTreeNode(L),k){let N=t.getChildRows(L),O=y.indexOf(A)+1,I=[y[O]];N.some(X=>X[Zt])&&I.push(y[O+1]),I.some(X=>X.hidden)&&m({type:"showColumns",columns:I})}},[y,t,m]),{onVerticalScroll:Ve,onHorizontalScroll:rn,columnsWithinViewport:sn,virtualColSpan:ln}=Xt({columns:y,getRowAtPosition:T,setRange:K,viewportMeasurements:D}),cn=z((H,A)=>{v(A),Ve(H)},[Ve,v]),{requestScroll:an,...un}=Bt({onHorizontalScroll:rn,onVerticalScroll:cn,viewport:D,viewportHeight:((Oe=($e=f.innerSize)==null?void 0:$e.height)!=null?Oe:0)-n}),mn=xt({columnCount:y.length,containerRef:f.containerRef,data:M,requestScroll:an,rowCount:t==null?void 0:t.size,viewportRange:x}),dn=z(H=>{H?t&&t.groupBy.includes(H.name)&&(t.groupBy=t.groupBy.filter(A=>A!==H.name)):t.groupBy=[]},[t]),pn=z((H,A)=>{let k=t.columns[H],L=os(t.columns,k,A);L!==t.columns&&(t.columns=L,m({type:"tableConfig",columns:L}))},[t,m]),fn=wt({onDrop:pn});Yt(()=>{h.current&&(g.current=!0,m({type:"init",tableConfig:e,dataSourceConfig:h.current.config}))},[e,m]),Yt(()=>{t.on("config",(H,A)=>{g.current=!0,m({type:"tableConfig",...H,confirmed:A})})},[t,m]),rs(()=>{g.current&&(o==null||o({...e,columns:y}),g.current=!1)},[y,e,o]);let We=jr(),gn=z(H=>{var I;let{current:A}=J,{current:k}=h,L=H.target,N=L==null?void 0:L.closest("div[role='cell']"),O=L==null?void 0:L.closest(".vuuTableRow");if(N&&O&&A&&k){let{columns:X,selectedRowsCount:Cn}=k,bn=es(X),hn=parseInt((I=O.ariaRowIndex)!=null?I:"-1"),vn=Array.from(O.childNodes).indexOf(N),yn=A.find(([Mn])=>Mn===hn),wn=X[vn];We(H,"grid",{columnMap:bn,columnName:wn,row:yn,selectedRows:Cn===0?is:E(),viewport:t==null?void 0:t.viewport})}},[t==null?void 0:t.viewport,E,We]);return{columns:y,columnsWithinViewport:sn,containerMeasurements:f,containerProps:mn,data:M,dispatchColumnAction:m,getRowOffset:w,handleContextMenuAction:en,headings:b,onColumnResize:nn,onContextMenu:gn,onRemoveColumnFromGroupBy:dn,onRowClick:C,onSort:tn,onToggleGroup:on,virtualColSpan:ln,scrollProps:un,rowCount:p,viewportMeasurements:D,...fn}};import ms from"classnames";import{isDataLoading as ds}from"@vuu-ui/vuu-utils";import{jsx as re,jsxs as qt}from"react/jsx-runtime";var _="vuuTable",Bc=({allowConfigEditing:e=!1,className:t,config:n,dataSource:o,headerHeight:r=25,height:i,id:s,onConfigChange:l,onFeatureEnabled:a,onFeatureInvocation:u,onSelectionChange:c,onShowConfigEditor:p,renderBufferSize:d=0,rowHeight:g=20,selectionModel:h="extended",style:f,width:R,zebraStripes:y=!1,...m})=>{let b=us(s),{containerMeasurements:{containerRef:T,innerSize:w,outerSize:v},containerProps:D,dispatchColumnAction:S,draggable:P,draggedItemIndex:C,handleContextMenuAction:M,scrollProps:E,viewportMeasurements:x,...K}=jt({config:n,dataSource:o,renderBufferSize:d,headerHeight:r,height:i,onConfigChange:l,onFeatureEnabled:a,onFeatureInvocation:u,onSelectionChange:c,rowHeight:g,selectionModel:h,width:R}),J={...v,"--content-height":`${x.contentHeight}px`,"--horizontal-scrollbar-height":`${x.horizontalScrollbarHeight}px`,"--content-width":`${x.contentWidth}px`,"--pinned-width-left":`${x.pinnedWidthLeft}px`,"--pinned-width-right":`${x.pinnedWidthRight}px`,"--header-height":`${r}px`,"--row-height":`${g}px`,"--table-height":`${w==null?void 0:w.height}px`,"--table-width":`${w==null?void 0:w.width}px`,"--total-header-height":`${x.totalHeaderHeight}px`,"--vertical-scrollbar-width":`${x.verticalScrollbarWidth}px`,"--viewport-body-height":`${x.viewportBodyHeight}px`},pe=ms(_,t,{[`${_}-zebra`]:y,[`${_}-loading`]:ds(K.columns)});return re(cs,{menuActionHandler:M,menuBuilder:Ge(o),children:qt("div",{...m,...D,className:pe,id:b,ref:T,style:J,tabIndex:-1,children:[w?re("div",{className:`${_}-scrollbarContainer`,ref:E.scrollbarContainerRef,children:re("div",{className:`${_}-scrollbarContent`})}):null,w?qt("div",{className:`${_}-contentContainer`,ref:E.contentContainerRef,children:[re(bt,{...K,headerHeight:r,tableId:b}),P]}):null,e&&w?re(as,{className:`${_}-settings`,"data-icon":"settings",onClick:p,variant:"secondary"}):null]})})};import ps from"classnames";import{isJsonAttribute as fs,metadataKeys as gs,registerComponent as Cs}from"@vuu-ui/vuu-utils";import{jsx as Fe,jsxs as ws}from"react/jsx-runtime";var se="vuuJsonCell",{IS_EXPANDED:bs,KEY:hs}=gs,vs=e=>{let t=e.lastIndexOf("|");return t===-1?"":e.slice(t+1)},ys=({column:e,row:t})=>{let{key:n}=e,o=t[n],r=!1;fs(o)&&(o=o.slice(0,-1),r=!0);let i=vs(t[hs]),s=ps({[`${se}-name`]:i===o,[`${se}-value`]:i!==o,[`${se}-group`]:r});if(r){let l=t[bs]?"minus-box":"plus-box";return ws("span",{className:s,children:[Fe("span",{className:`${se}-value`,children:o}),Fe("span",{className:`${se}-toggle`,"data-icon":l})]})}else return o?Fe("span",{className:s,children:o}):null};Cs("json",ys,"cell-renderer",{});export{Bc as Table,Ge as buildContextMenuDescriptors,Lt as useMeasuredContainer,Je as useTableContextMenu,Ft as useTableModel,Ut as useTableViewport};
|
|
1
|
+
import{isNumericColumn as Rn}from"@vuu-ui/vuu-utils";var Be=e=>(t,n)=>{let o=[];if(e===void 0)return o;if(t==="header")o.push(...Dn(n,e)),o.push(...Pn(n,e)),o.push(...xn(n,e)),o.push(...Hn(n));else if(t==="filter"){let{column:r,filter:i}=n,s=(i==null?void 0:i.column)===(r==null?void 0:r.name);o.push({label:"Edit filter",action:"filter-edit",options:n}),o.push({label:"Remove filter",action:"filter-remove-column",options:n}),r&&!s&&o.push({label:"Remove all filters",action:"remove-filters",options:n})}return o};function Dn(e,{sort:{sortDefs:t}}){let{column:n}=e,o=[];if(n===void 0)return o;let r=t.length>0;return n.sorted==="A"?o.push({label:"Reverse Sort (DSC)",action:"sort-dsc",options:e}):n.sorted==="D"?o.push({label:"Reverse Sort (ASC)",action:"sort-asc",options:e}):typeof n.sorted=="number"?(n.sorted>0?o.push({label:"Reverse Sort (DSC)",action:"sort-add-dsc",options:e}):o.push({label:"Reverse Sort (ASC)",action:"sort-add-asc",options:e}),r&&Math.abs(n.sorted)<t.length&&o.push({label:"Remove from sort",action:"sort-remove",options:e}),o.push({label:"New Sort",children:[{label:"Ascending",action:"sort-asc",options:e},{label:"Descending",action:"sort-dsc",options:e}]})):r?(o.push({label:"Add to sort",children:[{label:"Ascending",action:"sort-add-asc",options:e},{label:"Descending",action:"sort-add-dsc",options:e}]}),o.push({label:"New Sort",children:[{label:"Ascending",action:"sort-asc",options:e},{label:"Descending",action:"sort-dsc",options:e}]})):o.push({label:"Sort",children:[{label:"Ascending",action:"sort-asc",options:e},{label:"Descending",action:"sort-dsc",options:e}]}),o}function xn(e,t){let{column:n}=e;if(n===void 0||t.groupBy.length===0)return[];let{name:o,label:r=o}=n;return[{label:`Aggregate ${r}`,children:[{label:"Count",action:"agg-count",options:e},{label:"Distinct",action:"agg-distinct",options:e}].concat(Rn(n)?[{label:"Sum",action:"agg-sum",options:e},{label:"Avg",action:"agg-avg",options:e},{label:"High",action:"agg-high",options:e},{label:"Low",action:"agg-low",options:e}]:[])}]}var Ce=(e,t)=>({label:`Pin ${t}`,action:`column-pin-${t}`,options:e}),fe=e=>Ce(e,"left"),ge=e=>Ce(e,"floating"),be=e=>Ce(e,"right");function Hn(e){let{column:t}=e;if(t===void 0)return[];let{pin:n}=t,o=[{label:"Hide column",action:"column-hide",options:e},{label:"Remove column",action:"column-remove",options:e}];return n===void 0?o.push({label:"Pin column",children:[fe(e),ge(e),be(e)]}):n==="left"?o.push({label:"Unpin column",action:"column-unpin",options:e},{label:"Pin column",children:[ge(e),be(e)]}):n==="right"?o.push({label:"Unpin column",action:"column-unpin",options:e},{label:"Pin column",children:[fe(e),ge(e)]}):n==="floating"&&o.push({label:"Unpin column",action:"column-unpin",options:e},{label:"Pin column",children:[fe(e),be(e)]}),o}function Pn(e,{groupBy:t}){let{column:n}=e,o=[];if(n===void 0)return o;let{name:r,label:i=r}=n;return t.length===0?o.push({label:`Group by ${i}`,action:"group",options:e}):o.push({label:`Add ${i} to group by`,action:"group-add",options:e}),o}import{removeColumnFromFilter as En}from"@vuu-ui/vuu-filters";import{addGroupColumn as Ue,addSortColumn as _e,AggregationType as Sn,setAggregations as Y,setSortColumn as Je}from"@vuu-ui/vuu-utils";var An=(e,t)=>{if(e.filterStruct&&t){let[n,o]=En(t,e.filterStruct);return{filter:o,filterStruct:n}}else return e},{Average:Ln,Count:kn,Distinct:Kn,High:zn,Low:Nn,Sum:Fn}=Sn,Xe=({dataSource:e,onPersistentColumnOperation:t})=>(o,r)=>{let i=r;if(i.column&&e){let{column:s}=i;switch(o){case"sort-asc":return e.sort=Je(e.sort,s,"A"),!0;case"sort-dsc":return e.sort=Je(e.sort,s,"D"),!0;case"sort-add-asc":return e.sort=_e(e.sort,s,"A"),!0;case"sort-add-dsc":return e.sort=_e(e.sort,s,"D"),!0;case"group":return e.groupBy=Ue(e.groupBy,s),!0;case"group-add":return e.groupBy=Ue(e.groupBy,s),!0;case"column-hide":return t({type:"hideColumns",columns:[s]}),!0;case"column-remove":return e.columns=e.columns.filter(l=>l!==s.name),!0;case"filter-remove-column":return e.filter=An(e.filter,s),!0;case"remove-filters":return e.filter={filter:""},!0;case"agg-avg":return e.aggregations=Y(e.aggregations,s,Ln),!0;case"agg-high":return e.aggregations=Y(e.aggregations,s,zn),!0;case"agg-low":return e.aggregations=Y(e.aggregations,s,Nn),!0;case"agg-count":return e.aggregations=Y(e.aggregations,s,kn),!0;case"agg-distinct":return e.aggregations=Y(e.aggregations,s,Kn),!0;case"agg-sum":return e.aggregations=Y(e.aggregations,s,Fn),!0;case"column-pin-floating":return t({type:"pinColumn",column:s,pin:"floating"}),!0;case"column-pin-left":return t({type:"pinColumn",column:s,pin:"left"}),!0;case"column-pin-right":return t({type:"pinColumn",column:s,pin:"right"}),!0;case"column-unpin":return t({type:"pinColumn",column:s,pin:void 0}),!0;default:}}return!1};import{ContextMenuProvider as cs}from"@vuu-ui/vuu-popups";import{Button as us,useIdMemo as ms}from"@salt-ds/core";import{buildColumnMap as Mo,getColumnStyle as To,isGroupColumn as Ro,metadataKeys as Do,notHidden as xo,visibleColumnAtIndex as Ho}from"@vuu-ui/vuu-utils";import{useCallback as gt,useMemo as bt}from"react";import{isGroupColumn as qe,isJsonColumn as jn,isJsonGroup as qn,metadataKeys as eo,notHidden as to}from"@vuu-ui/vuu-utils";import no from"classnames";import{memo as oo,useCallback as et}from"react";import{getColumnStyle as In,metadataKeys as Vn}from"@vuu-ui/vuu-utils";import{EditableLabel as Wn}from"@heswell/salt-lab";import $n from"classnames";import{memo as On,useCallback as Gn,useRef as Bn,useState as Ye}from"react";import{jsx as ie}from"react/jsx-runtime";var{KEY:Qe}=Vn,he=On(({className:e,column:t,columnMap:n,onClick:o,row:r})=>{let i=Bn(null),{align:s,CellRenderer:l,key:a,pin:u,editable:c,resizing:p,valueFormatter:d}=t,[g,h]=Ye(!1),f=d(r[a]),[T,y]=Ye(f),m=()=>{var P;(P=i.current)==null||P.focus()},C=P=>{P.key==="Enter"&&h(!0)},R=Gn(P=>{o==null||o(P,t)},[t,o]),w=()=>{h(!0)},v=(P="",b="",M=!0,E=!1)=>{var x;h(!1),E?y(P):b!==P&&y(b),M===!1&&((x=i.current)==null||x.focus())},D=$n(e,{vuuAlignRight:s==="right",vuuPinFloating:u==="floating",vuuPinLeft:u==="left",vuuPinRight:u==="right","vuuTableCell-resizing":p})||void 0,S=In(t);return c?ie("div",{className:D,"data-editable":!0,role:"cell",style:S,onKeyDown:C,children:ie(Wn,{editing:g,value:T,onChange:y,onMouseDownCapture:m,onEnterEditMode:w,onExitEditMode:v,onKeyDown:C,ref:i,tabIndex:0},"title")}):ie("div",{className:D,role:"cell",style:S,onClick:R,children:l?ie(l,{column:t,columnMap:n,row:r}):f})},Un);he.displayName="TableCell";function Un(e,t){return e.column===t.column&&e.onClick===t.onClick&&e.row[Qe]===t.row[Qe]&&e.row[e.column.key]===t.row[t.column.key]}import{getColumnStyle as _n,metadataKeys as Jn}from"@vuu-ui/vuu-utils";import{useCallback as Xn}from"react";import{jsx as ve,jsxs as Zn}from"react/jsx-runtime";var{DEPTH:Yn,IS_LEAF:Ze}=Jn,Qn=(e,t)=>{let{[Yn]:n,[Ze]:o}=t;if(o||n>e.length)return[null,n===null?0:Math.max(0,n-1)];if(n===0)return["$root",0];{let{key:r,valueFormatter:i}=e[n-1];return[i(t[r]),n-1]}},je=({column:e,onClick:t,row:n})=>{let{columns:o}=e,[r,i]=Qn(o,n),s=Xn(c=>{t==null||t(c,e)},[e,t]),l=_n(e),a=n[Ze],u=Array(i).fill(0).map((c,p)=>ve("span",{className:"vuuTableGroupCell-spacer"},p));return Zn("div",{className:"vuuTableGroupCell vuuPinLeft",onClick:a?void 0:s,role:"cell",style:l,children:[u,a?null:ve("span",{className:"vuuTableGroupCell-toggle","data-icon":"triangle-right"}),ve("span",{children:r})]})};import{jsx as tt,jsxs as lo}from"react/jsx-runtime";var{IDX:ro,IS_EXPANDED:so,SELECTED:io}=eo,le="vuuTableRow",nt=oo(function({columnMap:t,columns:n,offset:o,onClick:r,onToggleGroup:i,virtualColSpan:s=0,row:l}){let{[ro]:a,[so]:u,[io]:c}=l,p=no(le,{[`${le}-even`]:a%2===0,[`${le}-expanded`]:u,[`${le}-preSelected`]:c===2}),d=et(h=>{let f=h.shiftKey,T=h.ctrlKey||h.metaKey;r==null||r(l,f,T)},[r,l]),g=et((h,f)=>{(qe(f)||qn(f,l))&&(h.stopPropagation(),i==null||i(l,f))},[i,l]);return lo("div",{"aria-selected":c===1?!0:void 0,"aria-rowindex":a,className:p,onClick:d,role:"row",style:{transform:`translate3d(0px, ${o}px, 0px)`},children:[s>0?tt("div",{role:"cell",style:{width:s}}):null,n.filter(to).map(h=>{let f=qe(h),T=jn(h);return tt(f?je:he,{column:h,columnMap:t,onClick:f||T?g:void 0,row:l},h.name)})]})});import it from"classnames";import{useRef as mo}from"react";import{useCallback as ye,useRef as ao}from"react";import{jsx as uo}from"react/jsx-runtime";var ot=()=>{},co="vuuColumnResizer",ae=({onDrag:e,onDragEnd:t=ot,onDragStart:n=ot})=>{let o=ao(0),r=ye(l=>{l.stopPropagation&&l.stopPropagation(),l.preventDefault&&l.preventDefault();let a=Math.round(l.clientX),u=a-o.current;o.current=a,u!==0&&e(l,u)},[e]),i=ye(l=>{window.removeEventListener("mouseup",i),window.removeEventListener("mousemove",r),t(l)},[t,r]),s=ye(l=>{n(l),o.current=Math.round(l.clientX),window.addEventListener("mouseup",i),window.addEventListener("mousemove",r),l.stopPropagation&&l.stopPropagation(),l.preventDefault&&l.preventDefault()},[n,r,i]);return uo("div",{className:co,"data-align":"end",onMouseDown:s})};import{useCallback as we,useRef as rt}from"react";var ce=({column:e,onResize:t,rootRef:n})=>{let o=rt(0),r=rt(!1),{name:i}=e,s=we(()=>{if(t&&n.current){let{width:u}=n.current.getBoundingClientRect();o.current=Math.round(u),r.current=!0,t==null||t("begin",i)}},[i,t,n]),l=we((u,c)=>{if(n.current&&t){let{width:p}=n.current.getBoundingClientRect(),d=Math.round(p)+c;d!==o.current&&d>0&&(t("resize",i,d),o.current=d)}},[i,t,n]),a=we(()=>{t&&(t("end",i,o.current),setTimeout(()=>{r.current=!1},100))},[i,t]);return{isResizing:r.current,onDrag:l,onDragStart:s,onDragEnd:a}};import{jsx as G,jsxs as at}from"react/jsx-runtime";var V="vuuTable-groupHeaderCell",st=({column:e,onClick:t,...n})=>G("span",{...n,className:`${V}-close`,"data-icon":"close-circle",onClick:()=>t==null?void 0:t(e)}),po=e=>{let{children:t,column:n,className:o}=e;return at("div",{className:it(`${V}-col`,o),role:"columnheader",children:[G("span",{className:`${V}-label`,children:n.name}),t]})},lt=({column:e,className:t,onRemoveColumn:n,onResize:o,...r})=>{let i=mo(null),{isResizing:s,...l}=ce({column:e,onResize:o,rootRef:i}),a=it(V,t,{vuuPinLeft:e.pin==="left",[`${V}-right`]:e.align==="right",[`${V}-resizing`]:e.resizing,[`${V}-pending`]:e.groupConfirmed===!1}),{columns:u}=e;return G("div",{className:a,ref:i,...r,children:at("div",{className:`${V}-inner`,children:[u.map(c=>G(po,{column:c,children:u.length>1?G(st,{column:c,onClick:n}):null},c.key)),G(st,{"data-align":"end",onClick:n}),e.resizeable!==!1?G(ae,{...l}):null]})})};import vo from"classnames";import{useCallback as Me,useRef as pt}from"react";import ct from"classnames";import{jsx as ue,jsxs as fo}from"react/jsx-runtime";var ut="vuuSortIndicator",mt=({sorted:e})=>{if(!e)return null;let t=typeof e=="number"?e<0?"dsc":"asc":e==="A"?"asc":"dsc";return typeof e=="number"?fo("div",{className:ct(ut,"multi-col",t),children:[ue("span",{"data-icon":`sorted-${t}`}),ue("span",{className:"vuuSortPosition",children:Math.abs(e)})]}):ue("div",{className:ct(ut,"single-col"),children:ue("span",{"data-icon":`sorted-${t}`})})};import{useContextMenu as yo}from"@vuu-ui/vuu-popups";import{useContextMenu as go}from"@vuu-ui/vuu-popups";import bo from"classnames";import{useCallback as Co}from"react";import{jsx as ho}from"react/jsx-runtime";var dt=({column:e,filter:t})=>{let n=go(),o=Co(r=>{r.stopPropagation(),n(r,"filter",{column:e,filter:t})},[e,t,n]);return e.filter?ho("div",{className:bo("vuuFilterIndicator"),"data-icon":"filter",onClick:o}):null};import{jsx as q,jsxs as wo}from"react/jsx-runtime";var j="vuuTable-headerCell",ft=({column:e,className:t,onClick:n,onDragStart:o,onResize:r,...i})=>{let s=pt(null),{isResizing:l,...a}=ce({column:e,onResize:r,rootRef:s}),u=yo(),c=pt(null),p=T=>{u(T,"header",{column:e})},d=Me(T=>!l&&(n==null?void 0:n(T)),[l,n]),g=Me(T=>{c.current=window.setTimeout(()=>{o==null||o(T),c.current=null},500)},[o]),h=Me(()=>{c.current!==null&&(window.clearTimeout(c.current),c.current=null)},[]),f=vo(j,t,{vuuPinFloating:e.pin==="floating",vuuPinLeft:e.pin==="left",vuuPinRight:e.pin==="right",vuuEndPin:e.endPin,[`${j}-resizing`]:e.resizing,[`${j}-right`]:e.align==="right"});return q("div",{className:f,...i,onClick:d,onContextMenu:p,onMouseDown:g,onMouseUp:h,ref:s,children:wo("div",{className:`${j}-inner`,children:[q(dt,{column:e}),q("div",{className:`${j}-label`,children:e.label}),q(mt,{sorted:e.sorted}),e.resizeable!==!1?q(ae,{...a}):null]})})};import{jsx as B,jsxs as Ct}from"react/jsx-runtime";var Te="vuuTable",{RENDER_IDX:Po}=Do,ht=({columns:e,columnsWithinViewport:t,data:n,getRowOffset:o,headings:r,onColumnResize:i,onHeaderCellDragStart:s,onContextMenu:l,onRemoveColumnFromGroupBy:a,onRowClick:u,onSort:c,onToggleGroup:p,tableId:d,virtualColSpan:g=0,rowCount:h})=>{let f=gt(C=>{s==null||s(C)},[s]),T=bt(()=>e.filter(xo),[e]),y=bt(()=>Mo(e),[e]),m=gt(C=>{var P;let w=C.target.closest(".vuuTable-headerCell"),v=parseInt((P=w==null?void 0:w.dataset.idx)!=null?P:"-1"),D=Ho(e,v),S=C.shiftKey;D&&c(D,S)},[e,c]);return Ct("div",{"aria-rowcount":h,className:`${Te}-table`,role:"table",children:[Ct("div",{className:`${Te}-headers`,role:"rowGroup",children:[r.map((C,R)=>B("div",{className:"vuuTable-heading",children:C.map(({label:w,width:v},D)=>B("div",{className:"vuuTable-headingCell",style:{width:v},children:w},D))},R)),B("div",{role:"row",children:T.map((C,R)=>{let w=To(C);return Ro(C)?B(lt,{column:C,"data-idx":R,onRemoveColumn:a,onResize:i,role:"columnHeader",style:w},R):B(ft,{column:C,"data-idx":R,id:`${d}-${R}`,onClick:m,onDragStart:f,onResize:i,role:"columnHeader",style:w},R)})})]}),B("div",{className:`${Te}-body`,onContextMenu:l,role:"rowGroup",children:n==null?void 0:n.map(C=>B(nt,{columnMap:y,columns:t,offset:o(C),onClick:u,virtualColSpan:g,onToggleGroup:p,row:C},C[Po]))})]})};import{useContextMenu as qr}from"@vuu-ui/vuu-popups";import{applySort as es,buildColumnMap as ts,isJsonGroup as ns,metadataKeys as os,moveItem as rs}from"@vuu-ui/vuu-utils";import{useCallback as z,useEffect as Qt,useMemo as ss,useRef as Ie,useState as is}from"react";import{isVuuFeatureAction as Eo,isVuuFeatureInvocation as So}from"@vuu-ui/vuu-data";import{getFullRange as Re,metadataKeys as Ao,WindowRange as Lo}from"@vuu-ui/vuu-utils";import{useCallback as Q,useEffect as me,useMemo as ko,useRef as ee,useState as Ko}from"react";var{SELECTED:te}=Ao;function vt({dataSource:e,onConfigChange:t,onFeatureEnabled:n,onFeatureInvocation:o,onSizeChange:r,onSubscribed:i,range:s={from:0,to:0},renderBufferSize:l=0,viewportRowCount:a}){let[,u]=Ko(null),c=ee(!0),p=ee(!1),d=ee({from:0,to:0}),g=ee(null),h=ee([]),f=ko(()=>new De(Re(s)),[]),T=Q(v=>{for(let D of v)f.add(D);h.current=f.data,p.current=!0},[f]),y=Q(v=>{v.type==="subscribed"?i==null||i(v):v.type==="viewport-update"?(typeof v.size=="number"&&(r==null||r(v.size),f.setRowCount(v.size)),v.rows?T(v.rows):typeof v.size=="number"&&(h.current=f.data,p.current=!0)):Eo(v)?n==null||n(v):So(v)?o==null||o(v):console.log(`useDataSource unexpected message ${v.type}`)},[f,n,o,r,i,T]);me(()=>()=>{g.current&&(cancelAnimationFrame(g.current),g.current=null),c.current=!1},[]);let m=Q(()=>{c.current&&(p.current&&(u({}),p.current=!1),g.current=requestAnimationFrame(m))},[u]);me(()=>{g.current=requestAnimationFrame(m)},[m]);let C=Q(v=>{let{from:D}=e.range,S={from:D,to:D+v},P=Re(S,l);f.setRange(P),e.range=d.current=P,e.emit("range",S)},[e,f,l]),R=Q(v=>{let D=Re(v,l);f.setRange(D),e.range=d.current=D,e.emit("range",v)},[e,f,l]),w=Q(()=>f.getSelectedRows(),[f]);return me(()=>{e==null||e.subscribe({range:d.current},y)},[e,y,t]),me(()=>{C(a)},[C,a]),{data:h.current,getSelectedRows:w,range:d.current,setRange:R,dataSource:e}}var De=class{constructor({from:t,to:n}){this.rowCount=0;this.setRowCount=t=>{t<this.data.length&&(this.data.length=t),this.rowCount=t};this.range=new Lo(t,n),this.data=new Array(n-t),this.rowCount=0}add(t){var o;let[n]=t;if(this.isWithinRange(n)){let r=n-this.range.from;this.data[r]=t;let i=t[te],s=(o=this.data[r-1])==null?void 0:o[te];s===0&&i?this.data[r-1][te]=2:s===2&&!i&&(this.data[r-1][te]=0)}}getAtIndex(t){return this.range.isWithin(t)&&this.data[t-this.range.from]!=null?this.data[t-this.range.from]:void 0}isWithinRange(t){return this.range.isWithin(t)}setRange({from:t,to:n}){if(t!==this.range.from||n!==this.range.to){let[o,r]=this.range.overlap(t,n),i=new Array(Math.max(0,n-t));for(let s=o;s<r;s++){let l=this.getAtIndex(s);if(l){let a=s-t;i[a]=l}}this.data=i,this.range.from=t,this.range.to=n}}getSelectedRows(){return this.data.filter(t=>t[te]===1)}};import{useDragDrop as zo}from"@heswell/salt-lab";import{useCallback as yt,useRef as wt}from"react";var Mt=({onDrop:e})=>{let t=wt(),n=wt(null),o=yt(()=>{console.log("handleDropSettle"),t.current=void 0,n.current=null},[]),{draggable:r,draggedItemIndex:i,onMouseDown:s}=zo({allowDragDrop:!0,draggableClassName:"vuuTable-headerCell",orientation:"horizontal",containerRef:n,itemQuery:".vuuTable-headerCell",onDrop:e,onDropSettle:o}),l=yt(a=>{let{clientX:u,clientY:c}=a;console.log("useDraggableColumn handleHeaderCellDragStart means mouseDown fired on a column in RowBasedTable");let d=a.target.closest(".vuuTable-headerCell");n.current=d==null?void 0:d.closest("[role='row']");let{dataset:{idx:g="-1"}}=d;t.current={clientX:u,clientY:c,idx:g},s==null||s(a)},[s]);return{draggable:r,draggedItemIndex:i,onHeaderCellDragStart:l}};import{withinRange as Oo}from"@vuu-ui/vuu-utils";import{useCallback as I,useEffect as Go,useLayoutEffect as Bo,useMemo as Uo,useRef as Ke}from"react";function No(e,...t){let n=new Set(e);for(let o of t)for(let r of o)n.add(r);return n}var xe="ArrowUp",He="ArrowDown",Pe="ArrowLeft",Ee="ArrowRight";var Se="Home",Ae="End",Le="PageUp",ke="PageDown";var Fo=new Set(["Enter","Delete"," "]),Io=new Set(["Tab"]),Vo=new Set(["ArrowRight","ArrowLeft"]),Tt=new Set([Se,Ae,Le,ke,He,Pe,Ee,xe]),Wo=new Set(["F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12"]),El=No(Fo,Tt,Vo,Wo,Io);var $o=["Home","End","PageUp","PageDown"],Rt=e=>$o.includes(e),Dt=e=>Tt.has(e);var xt=e=>`.vuuTable-headers .vuuTable-headerCell:nth-child(${e+1})`,_o=(e,t)=>`.vuuTable-body > [aria-rowindex='${e}'] > [role='cell']:nth-child(${t+1})`,Jo=[-1,-1];function Xo(e,[t,n],o,r){return e===xe?t>-1?[t-1,n]:[t,n]:e===He?t===-1?[0,n]:t===r-1?[t,n]:[t+1,n]:e===Ee?n<o-1?[t,n+1]:[t,n]:e===Pe?n>0?[t,n-1]:[t,n]:[t,n]}var Ht=({columnCount:e=0,containerRef:t,disableHighlightOnFocus:n,data:o,requestScroll:r,rowCount:i=0,viewportRange:s})=>{var P;let{from:l,to:a}=s,u=Ke([-1,-1]),c=Ke(),p=Ke([-1,0]),d=I(([b,M])=>{var x;let E=b===-1?xt(M):_o(b,M);return(x=t.current)==null?void 0:x.querySelector(E)},[t]),g=b=>b==null?void 0:b.closest("[role='columnHeader'],[role='cell']"),h=b=>{var M,E;if(b.role==="columnHeader")return[-1,parseInt((M=b.dataset.idx)!=null?M:"-1",10)];{let x=b.closest("[role='row']");if(x){let k=parseInt((E=x.ariaRowIndex)!=null?E:"-1",10),J=Array.from(x.childNodes).indexOf(b);return[k,J]}}return Jo},f=I(b=>{var M;if(t.current){let E=d(b);E?(E!==c.current&&((M=c.current)==null||M.setAttribute("tabindex",""),c.current=E,E.setAttribute("tabindex","0")),E.focus()):Oo(b[0],s)||(c.current=void 0,r==null||r({type:"scroll-page",direction:"up"}))}},[t,d,r,s]),T=I((b,M,E=!1)=>{let x=[b,M];p.current=x,f(x),E&&(u.current=x)},[f]),y=I(()=>{var b;(b=c.current)==null||b.setAttribute("tabindex",""),c.current=void 0},[]),m=I(async(b,M)=>{switch(b){case ke:r==null||r({type:"scroll-page",direction:"down"});break;case Le:r==null||r({type:"scroll-page",direction:"up"});break;case Se:r==null||r({type:"scroll-end",direction:"home"});break;case Ae:r==null||r({type:"scroll-end",direction:"end"});break}return M},[r]),C=I(()=>{var b;if(n!==!0&&(b=t.current)!=null&&b.contains(document.activeElement)){let M=g(document.activeElement);M&&(u.current=h(M))}},[n,t]),R=I(async b=>{let[M,E]=Rt(b)?await m(b,p.current):Xo(b,p.current,e,i),[x,k]=p.current;(M!==x||E!==k)&&T(M,E,!0)},[e,m,i,T]),w=I(b=>{o.length>0&&Dt(b.key)&&(b.preventDefault(),b.stopPropagation(),R(b.key))},[o,R]),v=I(b=>{let M=b.target,E=g(M);if(E){let[x,k]=h(E);T(x,k)}},[T]),D=Uo(()=>({onClick:v,onFocus:C,onKeyDown:w}),[v,C,w]);Bo(()=>{let{current:b}=p,M=b[0]>=l&&b[0]<=a;c.current&&!M?y():!c.current&&M&&f(b)},[f,l,a,y]);let S=((P=t.current)==null?void 0:P.firstChild)!=null;return Go(()=>{var b;if(S&&c.current===void 0){let M=(b=t.current)==null?void 0:b.querySelector(xt(0));M&&(M.setAttribute("tabindex","0"),c.current=M)}},[t,S]),D};import{isValidNumber as W}from"@vuu-ui/vuu-utils";import{useCallback as Zo,useMemo as jo,useRef as qo,useState as er}from"react";import{useCallback as Yo,useEffect as Pt,useRef as Qo}from"react";var U=new Map,St=(e,t,n)=>{switch(n){case"height":return t.height;case"clientHeight":return e.clientHeight;case"clientWidth":return e.clientWidth;case"contentHeight":return t.contentHeight;case"contentWidth":return t.contentWidth;case"scrollHeight":return Math.ceil(e.scrollHeight);case"scrollWidth":return Math.ceil(e.scrollWidth);case"width":return t.width;default:return 0}},Et=new ResizeObserver(e=>{for(let t of e){let{target:n,borderBoxSize:o,contentBoxSize:r}=t,i=U.get(n);if(i){let[{blockSize:s,inlineSize:l}]=o,[{blockSize:a,inlineSize:u}]=r,{onResize:c,measurements:p}=i,d=!1;for(let[g,h]of Object.entries(p)){let f=St(n,{height:s,width:l,contentHeight:a,contentWidth:u},g);f!==h&&(d=!0,p[g]=f)}d&&c&&c(p)}}});function At(e,t,n,o=!1){let r=Qo(t),i=Yo(s=>{let{width:l,height:a}=s.getBoundingClientRect(),{clientWidth:u,clientHeight:c}=s;return r.current.reduce((p,d)=>(p[d]=St(s,{width:l,height:a,contentHeight:c,contentWidth:u},d),p),{})},[]);Pt(()=>{let s=e.current;async function l(){U.set(s,{measurements:{}}),await document.fonts.ready;let a=U.get(s);if(a){let u=i(s);a.measurements=u,Et.observe(s),o&&n(u)}else console.log("%cuseResizeObserver an target expected to be under observation wa snot found. This warrants investigation","font-weight:bold; color:red;")}if(s){if(U.has(s))throw Error("useResizeObserver attemping to observe same element twice");l()}return()=>{s&&U.has(s)&&(Et.unobserve(s),U.delete(s))}},[i,e]),Pt(()=>{let s=e.current,l=U.get(s);if(l){if(r.current!==t){r.current=t;let a=i(s);l.measurements=a}l.onResize=n}},[t,i,e,n])}var tr=["clientHeight","clientWidth"],Lt=e=>Number.isFinite(e),nr={height:"100%",width:"100%"},or=(e,t)=>W(e)&&W(t)?{height:`${e}px`,width:`${t}px`}:nr,rr=(e,t)=>{if(W(e)&&W(t))return{height:e,width:t}},kt=({defaultHeight:e=0,defaultWidth:t=0,height:n,width:o})=>{let r=qo(null),[i,s]=er({css:or(n,o),inner:rr(n,o),outer:{height:n!=null?n:"100%",width:o!=null?o:"100%"}});jo(()=>{s(a=>{let{inner:u,outer:c}=a;if(W(n)&&W(o)&&u&&c){let{height:p,width:d}=u,{height:g,width:h}=c;if(g!==n||h!==o){let f=W(g)?g-p:0,T=W(h)?h-d:0;return{...a,outer:{height:n,width:o},inner:{height:n-f,width:o-T}}}}return a})},[n,o]);let l=Zo(({clientWidth:a,clientHeight:u})=>{s(c=>{let{css:p,inner:d,outer:g}=c;return Lt(u)&&Lt(a)&&(a!==(d==null?void 0:d.width)||u!==(d==null?void 0:d.height))?{css:p,outer:g,inner:{width:Math.floor(a)||t,height:Math.floor(u)||e}}:c})},[e,t]);return At(r,tr,l,!0),{containerRef:r,cssSize:i.css,outerSize:i.outer,innerSize:i.inner}};import{deselectItem as sr,metadataKeys as ir,selectItem as lr}from"@vuu-ui/vuu-utils";import{useCallback as ar,useRef as Kt}from"react";var{IDX:cr,SELECTED:ur}=ir,mr=[],zt=({selectionModel:e,onSelectionChange:t})=>{let n=Kt(-1),o=Kt(mr);return ar((i,s,l)=>{let{[cr]:a,[ur]:u}=i,{current:c}=n,{current:p}=o,g=(u?sr:lr)(e,p,a,s,l,c);o.current=g,n.current=a,t&&t(g)},[t,e])};import{moveItem as dr}from"@heswell/salt-lab";import{applyFilterToColumns as pr,applyGroupByToColumns as fr,applySortToColumns as gr,findColumn as br,getCellRenderer as Cr,getColumnName as hr,getTableHeadings as vr,getValueFormatter as yr,isFilteredColumn as wr,isGroupColumn as Mr,isPinned as Tr,isTypeDescriptor as Rr,logger as Dr,metadataKeys as xr,sortPinnedColumns as Nt,stripFilterFromColumns as Hr}from"@vuu-ui/vuu-utils";import{useReducer as Pr}from"react";var{info:ze}=Dr("useTableModel"),Er=100,Ft=xr.count,Sr=({serverDataType:e})=>e===void 0,Ar=e=>{var t;if(Rr(e.type))return Cr((t=e.type)==null?void 0:t.renderer)},It=(e,t)=>{if(e.serverDataType)return e.serverDataType;if(t){let n=t.columns.find(o=>o.name===e.name);if(n)return n.serverDataType}return"string"},Lr=["int","long","double"],Vt=e=>e===void 0?void 0:Lr.includes(e)?"right":"left",kr=(e,t)=>{switch(ze==null||ze(`GridModelReducer ${t.type}`),t.type){case"init":return $t(t);case"moveColumn":return zr(e,t);case"resizeColumn":return Ir(e,t);case"setTableSchema":return Vr(e,t);case"hideColumns":return Nr(e,t);case"showColumns":return Fr(e,t);case"pinColumn":return Wr(e,t);case"updateColumnProp":return ne(e,t);case"tableConfig":return Ot(e,t);default:return console.log(`unhandled action ${t.type}`),e}},Wt=(e,t)=>{let[n,o]=Pr(kr,{tableConfig:e,dataSourceConfig:t},$t);return{columns:n.columns,dispatchColumnAction:o,headings:n.headings}};function $t({dataSourceConfig:e,tableConfig:t}){let n=t.columns.map(Ne(t)),o=n.some(Tr)?Nt(n):n,r={columns:o,headings:vr(o)};if(e){let{columns:i,...s}=e;return Ot(r,{type:"tableConfig",...s})}else return r}var Kr=(e,t)=>t==="uppercase"?e.toUpperCase():t==="capitalize"?e[0].toUpperCase()+e.slice(1).toLowerCase():e,Ne=e=>(t,n)=>{let o=It(t,e.tableSchema),{columnDefaultWidth:r=Er,columnFormatHeader:i}=e,{align:s=Vt(o),key:l,name:a,label:u=a,width:c=r,...p}=t,d={...p,align:s,CellRenderer:Ar(t),label:Kr(u,i),key:l!=null?l:n+Ft,name:a,originalIdx:n,serverDataType:o,valueFormatter:yr(t),width:c};return Mr(d)&&(d.columns=d.columns.map(g=>Ne(e)(g,g.key))),d};function zr(e,{column:t,moveBy:n,moveTo:o}){let{columns:r}=e;if(typeof n=="number"){let i=r.indexOf(t),s=r.slice(),[l]=s.splice(i,1);return s.splice(i+n,0,l),{...e,columns:s}}else if(typeof o=="number"){let i=r.indexOf(t);return{...e,columns:dr(r,i,o)}}return e}function Nr(e,{columns:t}){return t.some(n=>n.hidden!==!0)?t.reduce((n,o)=>o.hidden!==!0?ne(n,{type:"updateColumnProp",column:o,hidden:!0}):n,e):e}function Fr(e,{columns:t}){return t.some(n=>n.hidden)?t.reduce((n,o)=>o.hidden?ne(n,{type:"updateColumnProp",column:o,hidden:!1}):n,e):e}function Ir(e,{column:t,phase:n,width:o}){let r="updateColumnProp",i=n!=="end";switch(n){case"begin":case"end":return ne(e,{type:r,column:t,resizing:i});case"resize":return ne(e,{type:r,column:t,width:o});default:throw Error(`useTableModel.resizeColumn, invalid resizePhase ${n}`)}}function Vr(e,{tableSchema:t}){let{columns:n}=e;if(n.some(Sr)){let o=n.map(r=>{var s;let i=It(r,t);return{...r,align:(s=r.align)!=null?s:Vt(i),serverDataType:i}});return{...e,columns:o,tableSchema:t}}else return{...e,tableSchema:t}}function Wr(e,t){let{columns:n}=e,{column:o,pin:r}=t,i=n.find(s=>s.name===o.name);return i?(n=Z(n,{...i,pin:r}),n=Nt(n),{...e,columns:n}):e}function ne(e,t){let{columns:n}=e,{align:o,column:r,hidden:i,label:s,resizing:l,width:a}=t,u=n.find(c=>c.name===r.name);return u&&((o==="left"||o==="right")&&(n=Z(n,{...u,align:o})),typeof s=="string"&&(n=Z(n,{...u,label:s})),typeof l=="boolean"&&(n=Z(n,{...u,resizing:l})),typeof i=="boolean"&&(n=Z(n,{...u,hidden:i})),typeof a=="number"&&(n=Z(n,{...u,width:a}))),{...e,columns:n}}function Ot(e,{columns:t,confirmed:n,filter:o,groupBy:r,sort:i}){let s=t&&t.length>0,l=r!==void 0,a=typeof(o==null?void 0:o.filter)=="string",u=i&&i.sortDefs.length>0,c=e;return s&&(c={...e,columns:t.map((p,d)=>{let g=hr(p),h=d+Ft,f=br(c.columns,g);return f?f.key===h?f:{...f,key:h}:Ne(e)({name:p},d)})}),l&&(c={...e,columns:fr(c.columns,r,n)}),u&&(c={...e,columns:gr(c.columns,i)}),a?c={...e,columns:pr(c.columns,o)}:c.columns.some(wr)&&(c={...e,columns:Hr(c.columns)}),c}function Z(e,t){return e.map(n=>n.name===t.name?t:n)}import{useCallback as $,useRef as oe}from"react";var Gt=e=>{let{scrollLeft:t,scrollTop:n}=e,{clientHeight:o,clientWidth:r,scrollHeight:i,scrollWidth:s}=e,l=t/(s-r),a=n/(i-o);return[l,a]},$r=e=>{let{clientHeight:t,clientWidth:n,scrollHeight:o,scrollWidth:r}=e;return[r-n,o-t]},Bt=({onAttach:e,onDetach:t})=>{let n=oe(null);return $(r=>{if(r)n.current=r,e==null||e(r);else if(n.current){let{current:i}=n;n.current=r,t==null||t(i)}},[e,t])},Ut=({onHorizontalScroll:e,onVerticalScroll:t,viewport:n})=>{let o=oe(!1),r=oe({scrollTop:0,scrollLeft:0}),i=oe(null),s=oe(null),{maxScrollContainerScrollHorizontal:l,maxScrollContainerScrollVertical:a}=n,u=$(()=>{let{current:m}=s,{current:C}=i,{current:R}=o;if(R)o.current=!1;else if(m&&C){let[w,v]=Gt(C),[D,S]=$r(m),P=Math.round(w*D),b=Math.round(v*S);m.scrollTo({left:P,top:b,behavior:"auto"})}},[]),c=$(()=>{let{current:m}=s,{current:C}=i,{current:R}=r;if(m&&C){let{scrollLeft:w,scrollTop:v}=m,[D,S]=Gt(m);o.current=!0,C.scrollLeft=Math.round(D*l),C.scrollTop=Math.round(S*a),R.scrollTop!==v&&(R.scrollTop=v,t==null||t(v,S)),R.scrollLeft!==w&&(R.scrollLeft=w,e==null||e(w))}},[l,a,e,t]),p=$(m=>{i.current=m,m.addEventListener("scroll",u,{passive:!0})},[u]),d=$(m=>{i.current=null,m.removeEventListener("scroll",u)},[u]),g=$(m=>{s.current=m,m.addEventListener("scroll",c,{passive:!0})},[c]),h=$(m=>{s.current=null,m.removeEventListener("scroll",c)},[c]),f=Bt({onAttach:g,onDetach:h}),T=Bt({onAttach:p,onDetach:d}),y=$(m=>{let{current:C}=s;if(C){if(o.current=!1,m.type==="scroll-page"){let{clientHeight:R,scrollLeft:w,scrollTop:v}=C,{direction:D}=m,S=D==="down"?R:-R,P=Math.min(Math.max(0,v+S),a);C.scrollTo({top:P,left:w,behavior:"auto"})}else if(m.type==="scroll-end"){let{direction:R}=m,w=R==="end"?a:0;C.scrollTo({top:w,left:C.scrollLeft,behavior:"auto"})}}},[a]);return{scrollbarContainerRef:T,contentContainerRef:f,requestScroll:y}};import{useCallback as Or,useMemo as de,useRef as Gr}from"react";import{actualRowPositioning as Br,virtualRowPositioning as Ur}from"@vuu-ui/vuu-utils";var _r=15e5,Jr={contentHeight:0,contentWidth:0,getRowAtPosition:()=>-1,getRowOffset:()=>-1,horizontalScrollbarHeight:0,maxScrollContainerScrollHorizontal:0,maxScrollContainerScrollVertical:0,pinnedWidthLeft:0,pinnedWidthRight:0,rowCount:0,setPctScrollTop:()=>{},totalHeaderHeight:0,verticalScrollbarWidth:0,viewportBodyHeight:0},Xr=e=>{let t=0,n=0,o=0;for(let r of e){let{hidden:i,pin:s,width:l}=r,a=i?0:l;s==="left"?t+=a:s==="right"?n+=a:o+=a}return{pinnedWidthLeft:t,pinnedWidthRight:n,unpinnedWidth:o}},_t=({columns:e,headerHeight:t,headings:n,rowCount:o,rowHeight:r,size:i})=>{let s=Gr(0),a=Math.min(o,_r)*r,c=o*r-a,{pinnedWidthLeft:p,pinnedWidthRight:d,unpinnedWidth:g}=de(()=>Xr(e),[e]),[h,f]=de(()=>Br(r),[r]),[T,y]=de(()=>c?Ur(r,c,s):[h,f],[f,h,c,r]),m=Or(C=>{s.current=C},[]);return de(()=>{var C;if(i){let R=n.length,w=15,v=p+g+d,D=v>i.width?w:0,S=t*(1+R),P=a-(((C=i==null?void 0:i.height)!=null?C:0)-D)+S,b=v-i.width+p,M=(i.height-t)/r,E=Number.isInteger(M)?M+1:Math.ceil(M),x=i.height-S,k=a>x?w:0;return{contentHeight:a,getRowAtPosition:y,getRowOffset:T,horizontalScrollbarHeight:D,maxScrollContainerScrollHorizontal:b,maxScrollContainerScrollVertical:P,pinnedWidthLeft:p,pinnedWidthRight:d,rowCount:E,contentWidth:v,setPctScrollTop:m,totalHeaderHeight:S,verticalScrollbarWidth:k,viewportBodyHeight:x}}else return Jr},[i,n.length,p,g,d,a,t,r,y,T,m])};import{getColumnsInViewport as Jt,itemsChanged as Yr}from"@vuu-ui/vuu-utils";import{useCallback as Xt,useEffect as Qr,useMemo as Zr,useRef as Fe,useState as jr}from"react";var Yt=({columns:e,getRowAtPosition:t,setRange:n,viewportMeasurements:o})=>{let r=Fe(-1),{rowCount:i,contentWidth:s,maxScrollContainerScrollHorizontal:l}=o,a=s-l,u=Fe(0),[c,p]=Zr(()=>Jt(e,u.current,u.current+a),[a,e]),d=Fe(p);Qr(()=>{h(c)},[c]);let[g,h]=jr(c),f=Xt(y=>{u.current=y;let[m,C]=Jt(e,y,y+a);Yr(g,m)&&(d.current=C,h(m))},[a,e,g]),T=Xt(y=>{let m=t(y);m!==r.current&&(r.current=m,n({from:m,to:m+i}))},[t,n,i]);return{columnsWithinViewport:g,onHorizontalScroll:f,onVerticalScroll:T,virtualColSpan:d.current}};var ls=[],{KEY:as,IS_EXPANDED:Zt,IS_LEAF:jt}=os,qt=({config:e,dataSource:t,headerHeight:n,onConfigChange:o,onFeatureEnabled:r,onFeatureInvocation:i,onSelectionChange:s,renderBufferSize:l=0,rowHeight:a,selectionModel:u,...c})=>{var Oe,Ge;let[p,d]=is(t.size),g=Ie(!1),h=Ie();if(h.current=t,t===void 0)throw Error("no data source provided to Vuu Table");let f=kt(c),T=z(H=>{d(H)},[]),{columns:y,dispatchColumnAction:m,headings:C}=Wt(e,t.config),{getRowAtPosition:R,getRowOffset:w,setPctScrollTop:v,...D}=_t({columns:y,headerHeight:n,headings:C,rowCount:p,rowHeight:a,size:f.innerSize}),S=z(({tableSchema:H})=>{H?(g.current=!0,m({type:"setTableSchema",tableSchema:H})):console.log("usbscription message with no schema")},[m]),P=z(H=>{t.select(H),s==null||s(H)},[t,s]),b=zt({onSelectionChange:P,selectionModel:u}),{data:M,getSelectedRows:E,range:x,setRange:k}=vt({dataSource:t,onFeatureEnabled:r,onFeatureInvocation:i,onSubscribed:S,onSizeChange:T,renderBufferSize:l,viewportRowCount:D.rowCount}),J=Ie();J.current=M;let pe=z(H=>{g.current=!0,m(H)},[m]),tn=Xe({dataSource:t,onPersistentColumnOperation:pe}),nn=z((H,A=!1,K)=>{t&&(t.sort=es(t.sort,H,A,K))},[t]),on=z((H,A,K)=>{let L=y.find(N=>N.name===A);if(L)H==="end"&&(g.current=!0),m({type:"resizeColumn",phase:H,column:L,width:K});else throw Error(`useDataTable.handleColumnResize, column ${A} not found`)},[y,m]),rn=z((H,A)=>{let K=ns(A,H),L=H[as];if(H[Zt]){if(t.closeTreeNode(L,!0),K){let N=y.indexOf(A);t.getRowsAtDepth(N+1).some(F=>F[Zt]||F[jt])||m({type:"hideColumns",columns:y.slice(N+2)})}}else if(t.openTreeNode(L),K){let N=t.getChildRows(L),O=y.indexOf(A)+1,F=[y[O]];N.some(X=>X[jt])&&F.push(y[O+1]),F.some(X=>X.hidden)&&m({type:"showColumns",columns:F})}},[y,t,m]),{onVerticalScroll:We,onHorizontalScroll:sn,columnsWithinViewport:ln,virtualColSpan:an}=Yt({columns:y,getRowAtPosition:R,setRange:k,viewportMeasurements:D}),cn=z((H,A)=>{v(A),We(H)},[We,v]),{requestScroll:un,...mn}=Ut({onHorizontalScroll:sn,onVerticalScroll:cn,viewport:D,viewportHeight:((Ge=(Oe=f.innerSize)==null?void 0:Oe.height)!=null?Ge:0)-n}),dn=Ht({columnCount:y.length,containerRef:f.containerRef,data:M,requestScroll:un,rowCount:t==null?void 0:t.size,viewportRange:x}),pn=z(H=>{H?t&&t.groupBy.includes(H.name)&&(t.groupBy=t.groupBy.filter(A=>A!==H.name)):t.groupBy=[]},[t]),fn=z((H,A)=>{let K=t.columns[H],L=rs(t.columns,K,A);L!==t.columns&&(t.columns=L,m({type:"tableConfig",columns:L}))},[t,m]),gn=Mt({onDrop:fn});Qt(()=>{h.current&&(g.current=!0,m({type:"init",tableConfig:e,dataSourceConfig:h.current.config}))},[e,m]),Qt(()=>{t.on("config",(H,A)=>{g.current=!0,m({type:"tableConfig",...H,confirmed:A})})},[t,m]),ss(()=>{g.current&&(o==null||o({...e,columns:y}),g.current=!1)},[y,e,o]);let $e=qr(),bn=z(H=>{var F;let{current:A}=J,{current:K}=h,L=H.target,N=L==null?void 0:L.closest("div[role='cell']"),O=L==null?void 0:L.closest(".vuuTableRow");if(N&&O&&A&&K){let{columns:X,selectedRowsCount:Cn}=K,hn=ts(X),vn=parseInt((F=O.ariaRowIndex)!=null?F:"-1"),yn=Array.from(O.childNodes).indexOf(N),wn=A.find(([Tn])=>Tn===vn),Mn=X[yn];$e(H,"grid",{columnMap:hn,columnName:Mn,row:wn,selectedRows:Cn===0?ls:E(),viewport:t==null?void 0:t.viewport})}},[t==null?void 0:t.viewport,E,$e]);return{columns:y,columnsWithinViewport:ln,containerMeasurements:f,containerProps:dn,data:M,dispatchColumnAction:m,getRowOffset:w,handleContextMenuAction:tn,headings:C,onColumnResize:on,onContextMenu:bn,onRemoveColumnFromGroupBy:pn,onRowClick:b,onSort:nn,onToggleGroup:rn,virtualColSpan:an,scrollProps:mn,rowCount:p,viewportMeasurements:D,...gn}};import ds from"classnames";import{isDataLoading as ps}from"@vuu-ui/vuu-utils";import{jsx as re,jsxs as en}from"react/jsx-runtime";var _="vuuTable",Ua=({allowConfigEditing:e=!1,className:t,config:n,dataSource:o,headerHeight:r=25,height:i,id:s,onConfigChange:l,onFeatureEnabled:a,onFeatureInvocation:u,onSelectionChange:c,onShowConfigEditor:p,renderBufferSize:d=0,rowHeight:g=20,selectionModel:h="extended",style:f,width:T,zebraStripes:y=!1,...m})=>{let C=ms(s),{containerMeasurements:{containerRef:R,innerSize:w,outerSize:v},containerProps:D,dispatchColumnAction:S,draggable:P,draggedItemIndex:b,handleContextMenuAction:M,scrollProps:E,viewportMeasurements:x,...k}=qt({config:n,dataSource:o,renderBufferSize:d,headerHeight:r,height:i,onConfigChange:l,onFeatureEnabled:a,onFeatureInvocation:u,onSelectionChange:c,rowHeight:g,selectionModel:h,width:T}),J={...v,"--content-height":`${x.contentHeight}px`,"--horizontal-scrollbar-height":`${x.horizontalScrollbarHeight}px`,"--content-width":`${x.contentWidth}px`,"--pinned-width-left":`${x.pinnedWidthLeft}px`,"--pinned-width-right":`${x.pinnedWidthRight}px`,"--header-height":`${r}px`,"--row-height":`${g}px`,"--table-height":`${w==null?void 0:w.height}px`,"--table-width":`${w==null?void 0:w.width}px`,"--total-header-height":`${x.totalHeaderHeight}px`,"--vertical-scrollbar-width":`${x.verticalScrollbarWidth}px`,"--viewport-body-height":`${x.viewportBodyHeight}px`},pe=ds(_,t,{[`${_}-zebra`]:y,[`${_}-loading`]:ps(k.columns)});return re(cs,{menuActionHandler:M,menuBuilder:Be(o),children:en("div",{...m,...D,className:pe,id:C,ref:R,style:J,tabIndex:-1,children:[w?re("div",{className:`${_}-scrollbarContainer`,ref:E.scrollbarContainerRef,children:re("div",{className:`${_}-scrollbarContent`})}):null,w?en("div",{className:`${_}-contentContainer`,ref:E.contentContainerRef,children:[re(ht,{...k,headerHeight:r,tableId:C}),P]}):null,e&&w?re(us,{className:`${_}-settings`,"data-icon":"settings",onClick:p,variant:"secondary"}):null]})})};import fs from"classnames";import{isJsonAttribute as gs,metadataKeys as bs,registerComponent as Cs}from"@vuu-ui/vuu-utils";import{jsx as Ve,jsxs as Ms}from"react/jsx-runtime";var se="vuuJsonCell",{IS_EXPANDED:hs,KEY:vs}=bs,ys=e=>{let t=e.lastIndexOf("|");return t===-1?"":e.slice(t+1)},ws=({column:e,row:t})=>{let{key:n}=e,o=t[n],r=!1;gs(o)&&(o=o.slice(0,-1),r=!0);let i=ys(t[vs]),s=fs({[`${se}-name`]:i===o,[`${se}-value`]:i!==o,[`${se}-group`]:r});if(r){let l=t[hs]?"minus-box":"plus-box";return Ms("span",{className:s,children:[Ve("span",{className:`${se}-value`,children:o}),Ve("span",{className:`${se}-toggle`,"data-icon":l})]})}else return o?Ve("span",{className:s,children:o}):null};Cs("json",ws,"cell-renderer",{});export{Ua as Table,Be as buildContextMenuDescriptors,kt as useMeasuredContainer,Xe as useTableContextMenu,Wt as useTableModel,_t as useTableViewport};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|