@vuu-ui/vuu-table 0.8.10 → 0.8.11
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/index.css +1 -1
- package/index.css.map +2 -2
- package/package.json +9 -9
- package/types/table/Table.d.ts +1 -1
- package/types/table/dataTableTypes.d.ts +4 -2
- package/types/table/useSelection.d.ts +3 -1
- package/types/table-next/TableNext.d.ts +1 -1
- package/types/table-next/column-header-pill/ColumnHeaderPill.d.ts +1 -1
- package/types/table-next/column-header-pill/GroupColumnPill.d.ts +1 -1
- package/types/table-next/table-cell/TableCell.d.ts +1 -1
- package/types/table-next/useTableNext.d.ts +2 -2
package/esm/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{useCallback as bt,useRef as ir}from"react";import{jsx as cr}from"react/jsx-runtime";var co=()=>{},ar="vuuColumnResizer",We=({onDrag:e,onDragEnd:t=co,onDragStart:o=co})=>{let n=ir(0),r=bt(i=>{i.stopPropagation&&i.stopPropagation(),i.preventDefault&&i.preventDefault();let a=Math.round(i.clientX),c=a-n.current;n.current=a,c!==0&&e(i,c)},[e]),l=bt(i=>{window.removeEventListener("mouseup",l),window.removeEventListener("mousemove",r),t(i)},[t,r]),s=bt(i=>{o(i),n.current=Math.round(i.clientX),window.addEventListener("mouseup",l),window.addEventListener("mousemove",r),i.stopPropagation&&i.stopPropagation(),i.preventDefault&&i.preventDefault()},[o,r,l]);return cr("div",{className:ar,"data-align":"end",onMouseDown:s})};import{isNumericColumn as ur}from"@vuu-ui/vuu-utils";var Be=e=>(t,o)=>{let n=[];if(e===void 0)return n;if(t==="header"||t==="column-menu")n.push(...mr(o,e)),n.push(...fr(o,e)),n.push(...pr(o,e)),n.push(...dr(o)),n.push({action:"column-settings",icon:"cog",label:"Column Settings",options:o}),n.push({action:"table-settings",icon:"cog",label:"DataGrid Settings",options:o});else if(t==="filter"){let{column:r,filter:l}=o,s=(l==null?void 0:l.column)===(r==null?void 0:r.name);n.push({label:"Edit filter",action:"filter-edit",options:o}),n.push({label:"Remove filter",action:"filter-remove-column",options:o}),r&&!s&&n.push({label:"Remove all filters",action:"remove-filters",options:o})}return n};function mr(e,{sort:{sortDefs:t}}){let{column:o}=e,n=[];if(o===void 0)return n;let r=t.length>0;return o.sorted==="A"?n.push({label:"Reverse Sort (DSC)",action:"sort-dsc",options:e}):o.sorted==="D"?n.push({label:"Reverse Sort (ASC)",action:"sort-asc",options:e}):typeof o.sorted=="number"?(o.sorted>0?n.push({label:"Reverse Sort (DSC)",action:"sort-add-dsc",options:e}):n.push({label:"Reverse Sort (ASC)",action:"sort-add-asc",options:e}),r&&Math.abs(o.sorted)<t.length&&n.push({label:"Remove from sort",action:"sort-remove",options:e}),n.push({label:"New Sort",children:[{label:"Ascending",action:"sort-asc",options:e},{label:"Descending",action:"sort-dsc",options:e}]})):r?(n.push({label:"Add to sort",children:[{label:"Ascending",action:"sort-add-asc",options:e},{label:"Descending",action:"sort-add-dsc",options:e}]}),n.push({label:"New Sort",children:[{label:"Ascending",action:"sort-asc",options:e},{label:"Descending",action:"sort-dsc",options:e}]})):n.push({label:"Sort",children:[{label:"Ascending",action:"sort-asc",options:e},{label:"Descending",action:"sort-dsc",options:e}]}),n}function pr(e,t){let{column:o}=e;if(o===void 0||t.groupBy.length===0)return[];let{name:n,label:r=n}=o;return[{label:`Aggregate ${r}`,children:[{label:"Count",action:"agg-count",options:e},{label:"Distinct",action:"agg-distinct",options:e}].concat(ur(o)?[{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 yt=(e,t)=>({label:`Pin ${t}`,action:`column-pin-${t}`,options:e}),gt=e=>yt(e,"left"),ht=e=>yt(e,"floating"),vt=e=>yt(e,"right");function dr(e){let{column:t}=e;if(t===void 0)return[];let{pin:o}=t,n=[{label:"Hide column",action:"column-hide",options:e},{label:"Remove column",action:"column-remove",options:e}];return o===void 0?n.push({label:"Pin column",children:[gt(e),ht(e),vt(e)]}):o==="left"?n.push({label:"Unpin column",action:"column-unpin",options:e},{label:"Pin column",children:[ht(e),vt(e)]}):o==="right"?n.push({label:"Unpin column",action:"column-unpin",options:e},{label:"Pin column",children:[gt(e),ht(e)]}):o==="floating"&&n.push({label:"Unpin column",action:"column-unpin",options:e},{label:"Pin column",children:[gt(e),vt(e)]}),n}function fr(e,{groupBy:t}){let{column:o}=e,n=[];if(o===void 0)return n;let{name:r,label:l=r}=o;return t.length===0?n.push({label:`Group by ${l}`,action:"group",options:e}):n.push({label:`Add ${l} to group by`,action:"group-add",options:e}),n}import{removeColumnFromFilter as Cr}from"@vuu-ui/vuu-utils";import{addGroupColumn as uo,addSortColumn as mo,AggregationType as br,setAggregations as Ce,setSortColumn as po}from"@vuu-ui/vuu-utils";var gr=(e,t)=>{if(e.filterStruct&&t){let[o,n]=Cr(t,e.filterStruct);return{filter:n,filterStruct:o}}else return e},{Average:hr,Count:vr,Distinct:yr,High:Tr,Low:wr,Sum:Dr}=br,Ue=({dataSource:e,onPersistentColumnOperation:t})=>n=>{let r=n.options;if(r.column&&e){let{column:l}=r;switch(n.menuId){case"sort-asc":return e.sort=po(e.sort,l,"A"),!0;case"sort-dsc":return e.sort=po(e.sort,l,"D"),!0;case"sort-add-asc":return e.sort=mo(e.sort,l,"A"),!0;case"sort-add-dsc":return e.sort=mo(e.sort,l,"D"),!0;case"group":return e.groupBy=uo(e.groupBy,l),!0;case"group-add":return e.groupBy=uo(e.groupBy,l),!0;case"column-hide":return t({type:"hideColumns",columns:[l]}),!0;case"column-remove":return e.columns=e.columns.filter(s=>s!==l.name),!0;case"filter-remove-column":return e.filter=gr(e.filter,l),!0;case"remove-filters":return e.filter={filter:""},!0;case"agg-avg":return e.aggregations=Ce(e.aggregations,l,hr),!0;case"agg-high":return e.aggregations=Ce(e.aggregations,l,Tr),!0;case"agg-low":return e.aggregations=Ce(e.aggregations,l,wr),!0;case"agg-count":return e.aggregations=Ce(e.aggregations,l,vr),!0;case"agg-distinct":return e.aggregations=Ce(e.aggregations,l,yr),!0;case"agg-sum":return e.aggregations=Ce(e.aggregations,l,Dr),!0;case"column-pin-floating":return t({type:"pinColumn",column:l,pin:"floating"}),!0;case"column-pin-left":return t({type:"pinColumn",column:l,pin:"left"}),!0;case"column-pin-right":return t({type:"pinColumn",column:l,pin:"right"}),!0;case"column-unpin":return t({type:"pinColumn",column:l,pin:void 0}),!0;case"column-settings":return t({type:"columnSettings",column:l}),!0;case"table-settings":return t({type:"tableSettings"}),!0;default:}}return!1};import{ContextMenuProvider as _s}from"@vuu-ui/vuu-popups";import{Button as Js,useIdMemo as Xs}from"@salt-ds/core";import{buildColumnMap as il,getColumnStyle as al,isGroupColumn as cl,metadataKeys as ul,notHidden as ml,visibleColumnAtIndex as pl}from"@vuu-ui/vuu-utils";import{useCallback as ko,useMemo as Ko}from"react";import{isGroupColumn as go,isJsonColumn as Vr,isJsonGroup as $r,metadataKeys as Fr,notHidden as Or,RowSelected as Gr}from"@vuu-ui/vuu-utils";import Wr from"classnames";import{memo as Br,useCallback as ho}from"react";import{getColumnStyle as Mr,metadataKeys as Rr}from"@vuu-ui/vuu-utils";import{EditableLabel as xr}from"@vuu-ui/vuu-ui-controls";import Pr from"classnames";import{memo as Hr,useCallback as Er,useRef as Sr,useState as fo}from"react";import{jsx as _e}from"react/jsx-runtime";var{KEY:Co}=Rr,Tt=Hr(({className:e,column:t,columnMap:o,onClick:n,row:r})=>{let l=Sr(null),{align:s,CellRenderer:i,key:a,pin:c,editable:u,resizing:d,valueFormatter:p}=t,[C,v]=fo(!1),h=p(r[a]),[w,R]=fo(h),b=()=>{var M;(M=l.current)==null||M.focus()},f=M=>{M.key==="Enter"&&v(!0)},T=Er(M=>{n==null||n(M,t)},[t,n]),x=()=>{v(!0)},m=(M="",y="",E=!0,H=!1)=>{var A;v(!1),H?R(M):y!==M&&R(y),E===!1&&((A=l.current)==null||A.focus())},g=Pr(e,{vuuAlignRight:s==="right",vuuPinFloating:c==="floating",vuuPinLeft:c==="left",vuuPinRight:c==="right","vuuTableCell-resizing":d})||void 0,P=Mr(t);return u?_e("div",{className:g,"data-editable":!0,role:"cell",style:P,onKeyDown:f,children:_e(xr,{editing:C,value:w,onChange:R,onMouseDownCapture:b,onEnterEditMode:x,onExitEditMode:m,onKeyDown:f,ref:l,tabIndex:0},"title")}):_e("div",{className:g,role:"cell",style:P,onClick:T,children:i?_e(i,{column:t,columnMap:o,row:r}):h})},Ar);Tt.displayName="TableCell";function Ar(e,t){return e.column===t.column&&e.onClick===t.onClick&&e.row[Co]===t.row[Co]&&e.row[e.column.key]===t.row[t.column.key]}import{getColumnStyle as Lr,getGroupValueAndOffset as kr,metadataKeys as Kr}from"@vuu-ui/vuu-utils";import{useCallback as Nr}from"react";import{jsx as wt,jsxs as Ir}from"react/jsx-runtime";var{IS_LEAF:zr}=Kr,bo=({column:e,onClick:t,row:o})=>{let{columns:n}=e,[r,l]=kr(n,o),s=Nr(u=>{t==null||t(u,e)},[e,t]),i=Lr(e),a=o[zr],c=Array(l).fill(0).map((u,d)=>wt("span",{className:"vuuTableGroupCell-spacer"},d));return Ir("div",{className:"vuuTableGroupCell vuuPinLeft",onClick:a?void 0:s,role:"cell",style:i,children:[c,a?null:wt("span",{className:"vuuTableGroupCell-toggle","data-icon":"triangle-right"}),wt("span",{children:r})]})};import{jsx as yo,jsxs as Yr}from"react/jsx-runtime";var{IDX:Ur,IS_EXPANDED:_r,SELECTED:Jr}=Fr,{True:vo,First:Xr,Last:Qr}=Gr,be="vuuTableRow",To=Br(function({columnMap:t,columns:o,offset:n,onClick:r,onToggleGroup:l,virtualColSpan:s=0,row:i}){let{[Ur]:a,[_r]:c,[Jr]:u}=i,d=Wr(be,{[`${be}-even`]:a%2===0,[`${be}-expanded`]:c,[`${be}-selected`]:u&vo,[`${be}-selectedStart`]:u&Xr,[`${be}-selectedEnd`]:u&Qr}),p=ho(v=>{let h=v.shiftKey,w=v.ctrlKey||v.metaKey;r==null||r(i,h,w)},[r,i]),C=ho((v,h)=>{(go(h)||$r(h,i))&&(v.stopPropagation(),l==null||l(i,h))},[l,i]);return Yr("div",{"aria-selected":u&vo?!0:void 0,"aria-rowindex":a,className:d,onClick:p,role:"row",style:{transform:`translate3d(0px, ${n}px, 0px)`},children:[s>0?yo("div",{role:"cell",style:{width:s}}):null,o.filter(Or).map(v=>{let h=go(v),w=Vr(v);return yo(h?bo:Tt,{column:v,columnMap:t,onClick:h||w?C:void 0,row:i},v.name)})]})});import Mo from"classnames";import{useRef as Zr}from"react";import{useCallback as Dt,useRef as wo}from"react";var Je=({column:e,onResize:t,rootRef:o})=>{let n=wo(0),r=wo(!1),{name:l}=e,s=Dt(()=>{if(t&&o.current){console.log("handleResizeStart");let{width:c}=o.current.getBoundingClientRect();n.current=Math.round(c),r.current=!0,t==null||t("begin",l)}},[l,t,o]),i=Dt((c,u)=>{if(o.current&&t){let{width:d}=o.current.getBoundingClientRect(),p=Math.round(d)+u;p!==n.current&&p>0&&(t("resize",l,p),n.current=p)}},[l,t,o]),a=Dt(()=>{t&&(t("end",l,n.current),setTimeout(()=>{r.current=!1},100))},[l,t]);return{isResizing:r.current,onDrag:i,onDragStart:s,onDragEnd:a}};import{jsx as ce,jsxs as xo}from"react/jsx-runtime";var oe="vuuTable-groupHeaderCell",Do=({column:e,onClick:t,...o})=>ce("span",{...o,className:`${oe}-close`,"data-icon":"close-circle",onClick:()=>t==null?void 0:t(e)}),jr=e=>{let{children:t,column:o,className:n}=e;return xo("div",{className:Mo(`${oe}-col`,n),role:"columnheader",children:[ce("span",{className:`${oe}-label`,children:o.name}),t]})},Ro=({column:e,className:t,onRemoveColumn:o,onResize:n,...r})=>{let l=Zr(null),{isResizing:s,...i}=Je({column:e,onResize:n,rootRef:l}),a=Mo(oe,t,{vuuPinLeft:e.pin==="left",[`${oe}-right`]:e.align==="right",[`${oe}-resizing`]:e.resizing,[`${oe}-pending`]:e.groupConfirmed===!1}),{columns:c}=e;return ce("div",{className:a,ref:l,...r,children:xo("div",{className:`${oe}-inner`,children:[c.map(u=>ce(jr,{column:u,children:c.length>1?ce(Do,{column:u,onClick:o}):null},u.key)),ce(Do,{"data-align":"end",onClick:o}),e.resizeable!==!1?ce(We,{...i}):null]})})};import rl from"classnames";import{useCallback as Mt,useRef as Ao}from"react";import Po from"classnames";import{jsx as Xe,jsxs as qr}from"react/jsx-runtime";var Ho="vuuSortIndicator",Eo=({sorted:e})=>{if(!e)return null;let t=typeof e=="number"?e<0?"dsc":"asc":e==="A"?"asc":"dsc";return typeof e=="number"?qr("div",{className:Po(Ho,"multi-col",t),children:[Xe("span",{"data-icon":`sorted-${t}`}),Xe("span",{className:"vuuSortPosition",children:Math.abs(e)})]}):Xe("div",{className:Po(Ho,"single-col"),children:Xe("span",{"data-icon":`sorted-${t}`})})};import{useContextMenu as ll}from"@vuu-ui/vuu-popups";import{useContextMenu as el}from"@vuu-ui/vuu-popups";import tl from"classnames";import{useCallback as ol}from"react";import{jsx as nl}from"react/jsx-runtime";var So=({column:e,filter:t})=>{let[o]=el(),n=ol(r=>{r.stopPropagation(),o(r,"filter",{column:e,filter:t})},[e,t,o]);return e.filter?nl("div",{className:tl("vuuFilterIndicator"),"data-icon":"filter",onClick:n}):null};import{jsx as xe,jsxs as sl}from"react/jsx-runtime";var Re="vuuTable-headerCell",Lo=({column:e,className:t,onClick:o,onDragStart:n,onResize:r,...l})=>{let s=Ao(null),{isResizing:i,...a}=Je({column:e,onResize:r,rootRef:s}),[c]=ll(),u=Ao(null),d=w=>{c(w,"header",{column:e})},p=Mt(w=>!i&&(o==null?void 0:o(w)),[i,o]),C=Mt(w=>{u.current=window.setTimeout(()=>{n==null||n(w),u.current=null},500)},[n]),v=Mt(()=>{u.current!==null&&(window.clearTimeout(u.current),u.current=null)},[]),h=rl(Re,t,{vuuPinFloating:e.pin==="floating",vuuPinLeft:e.pin==="left",vuuPinRight:e.pin==="right",vuuEndPin:e.endPin,[`${Re}-resizing`]:e.resizing,[`${Re}-right`]:e.align==="right"});return xe("div",{className:h,...l,onClick:p,onContextMenu:d,onMouseDown:C,onMouseUp:v,ref:s,children:sl("div",{className:`${Re}-inner`,children:[xe(So,{column:e}),xe("div",{className:`${Re}-label`,children:e.label}),xe(Eo,{sorted:e.sorted}),e.resizeable!==!1?xe(We,{...a}):null]})})};import{jsx as ue,jsxs as No}from"react/jsx-runtime";var Rt="vuuTable",{RENDER_IDX:dl}=ul,zo=({columns:e,columnsWithinViewport:t,data:o,getRowOffset:n,headings:r,onColumnResize:l,onHeaderCellDragStart:s,onContextMenu:i,onRemoveColumnFromGroupBy:a,onRowClick:c,onSort:u,onToggleGroup:d,tableId:p,virtualColSpan:C=0,rowCount:v})=>{let h=ko(f=>{s==null||s(f)},[s]),w=Ko(()=>e.filter(ml),[e]),R=Ko(()=>il(e),[e]),b=ko(f=>{var M;let x=f.target.closest(".vuuTable-headerCell"),m=parseInt((M=x==null?void 0:x.dataset.idx)!=null?M:"-1"),g=pl(e,m),P=f.shiftKey;g&&u(g,P)},[e,u]);return No("div",{"aria-rowcount":v,className:`${Rt}-table`,role:"table",children:[No("div",{className:`${Rt}-headers`,role:"rowGroup",children:[r.map((f,T)=>ue("div",{className:"vuuTable-heading",children:f.map(({label:x,width:m},g)=>ue("div",{className:"vuuTable-headingCell",style:{width:m},children:x},g))},T)),ue("div",{role:"row",children:w.map((f,T)=>{let x=al(f);return cl(f)?ue(Ro,{column:f,"data-idx":T,onRemoveColumn:a,onResize:l,role:"columnHeader",style:x},T):ue(Lo,{column:f,"data-idx":T,id:`${p}-${T}`,onClick:b,onDragStart:h,onResize:l,role:"columnHeader",style:x},T)})})]}),ue("div",{className:`${Rt}-body`,onContextMenu:i,role:"rowGroup",children:o==null?void 0:o.map(f=>ue(To,{columnMap:R,columns:t,offset:n(f),onClick:c,virtualColSpan:C,onToggleGroup:d,row:f},f[dl]))})]})};import{useContextMenu as zs}from"@vuu-ui/vuu-popups";import{applySort as Is,buildColumnMap as Vs,isJsonGroup as $s,metadataKeys as Fs,moveItemDeprecated as Os}from"@vuu-ui/vuu-utils";import{useCallback as U,useEffect as fn,useMemo as Gs,useRef as $t,useState as Ws}from"react";import{isVuuFeatureAction as fl,isVuuFeatureInvocation as Cl}from"@vuu-ui/vuu-data-react";import{getFullRange as xt,metadataKeys as bl,WindowRange as gl}from"@vuu-ui/vuu-utils";import{useCallback as ge,useEffect as Qe,useMemo as hl,useRef as Pe,useState as vl}from"react";var{SELECTED:He}=bl;function Io({dataSource:e,onConfigChange:t,onFeatureEnabled:o,onFeatureInvocation:n,onSizeChange:r,onSubscribed:l,range:s={from:0,to:0},renderBufferSize:i=0,viewportRowCount:a}){let[,c]=vl(null),u=Pe(!0),d=Pe(!1),p=Pe({from:0,to:0}),C=Pe(null),v=Pe([]),h=hl(()=>new Pt(xt(s)),[]),w=ge(m=>{for(let g of m)h.add(g);v.current=h.data,d.current=!0},[h]),R=ge(m=>{m.type==="subscribed"?l==null||l(m):m.type==="viewport-update"?(typeof m.size=="number"&&(r==null||r(m.size),h.setRowCount(m.size)),m.rows?w(m.rows):typeof m.size=="number"&&(v.current=h.data,d.current=!0)):fl(m)?o==null||o(m):Cl(m)?n==null||n(m):console.log(`useDataSource unexpected message ${m.type}`)},[h,o,n,r,l,w]);Qe(()=>()=>{C.current&&(cancelAnimationFrame(C.current),C.current=null),u.current=!1},[]);let b=ge(()=>{u.current&&(d.current&&(c({}),d.current=!1),C.current=requestAnimationFrame(b))},[c]);Qe(()=>{C.current=requestAnimationFrame(b)},[b]);let f=ge(m=>{let{from:g}=e.range,P={from:g,to:g+m},M=xt(P,i);h.setRange(M),e.range=p.current=M,e.emit("range",P)},[e,h,i]),T=ge(m=>{let g=xt(m,i);h.setRange(g),e.range=p.current=g,e.emit("range",m)},[e,h,i]),x=ge(()=>h.getSelectedRows(),[h]);return Qe(()=>{e==null||e.subscribe({range:p.current},R)},[e,R,t]),Qe(()=>{console.log(`adjust range as rowCount chnaged ${a}`),f(a)},[f,a]),{data:v.current,getSelectedRows:x,range:p.current,setRange:T,dataSource:e}}var Pt=class{constructor({from:t,to:o}){this.rowCount=0;this.setRowCount=t=>{t<this.data.length&&(this.data.length=t),this.rowCount=t};this.range=new gl(t,o),this.data=new Array(o-t),this.rowCount=0}add(t){var n;let[o]=t;if(this.isWithinRange(o)){let r=o-this.range.from;this.data[r]=t;let l=t[He],s=(n=this.data[r-1])==null?void 0:n[He];s===0&&l?this.data[r-1][He]=2:s===2&&!l&&(this.data[r-1][He]=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:o}){if(t!==this.range.from||o!==this.range.to){let[n,r]=this.range.overlap(t,o),l=new Array(Math.max(0,o-t));for(let s=n;s<r;s++){let i=this.getAtIndex(s);if(i){let a=s-t;l[a]=i}}this.data=l,this.range.from=t,this.range.to=o}}getSelectedRows(){return this.data.filter(t=>t[He]===1)}};import{useDragDropNext as yl}from"@vuu-ui/vuu-ui-controls";import{useCallback as Vo,useRef as $o}from"react";var Fo=({onDrop:e})=>{let t=$o(),o=$o(null),n=Vo(()=>{console.log("handleDropSettle"),t.current=void 0,o.current=null},[]),{draggable:r,draggedItemIndex:l,onMouseDown:s}=yl({allowDragDrop:!0,draggableClassName:"vuuTable-headerCell",orientation:"horizontal",containerRef:o,itemQuery:".vuuTable-headerCell",onDrop:e,onDropSettle:n}),i=Vo(a=>{let{clientX:c,clientY:u}=a;console.log("useDraggableColumn handleHeaderCellDragStart means mouseDown fired on a column in RowBasedTable");let p=a.target.closest(".vuuTable-headerCell");o.current=p==null?void 0:p.closest("[role='row']");let{dataset:{idx:C="-1"}}=p;t.current={clientX:c,clientY:u,idx:C},s==null||s(a)},[s]);return{draggable:r,draggedItemIndex:l,onHeaderCellDragStart:i}};import{withinRange as Pl}from"@vuu-ui/vuu-utils";import{useCallback as Z,useEffect as Hl,useLayoutEffect as El,useMemo as Sl,useRef as zt}from"react";function Tl(e,...t){let o=new Set(e);for(let n of t)for(let r of n)o.add(r);return o}var Ht="ArrowUp",Et="ArrowDown",St="ArrowLeft",At="ArrowRight";var Lt="Home",kt="End",Kt="PageUp",Nt="PageDown";var wl=new Set(["Enter","Delete"," "]),Dl=new Set(["Tab"]),Ml=new Set(["ArrowRight","ArrowLeft"]),Oo=new Set([Lt,kt,Kt,Nt,Et,St,At,Ht]),Rl=new Set(["F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12"]),Qm=Tl(wl,Oo,Ml,Rl,Dl);var xl=["Home","End","PageUp","PageDown"],Go=e=>xl.includes(e),Wo=e=>Oo.has(e);var Bo=e=>`.vuuTable-headers .vuuTable-headerCell:nth-child(${e+1})`,Al=(e,t)=>`.vuuTable-body > [aria-rowindex='${e}'] > [role='cell']:nth-child(${t+1})`,Ll=[-1,-1];function kl(e,[t,o],n,r){return e===Ht?t>-1?[t-1,o]:[t,o]:e===Et?t===-1?[0,o]:t===r-1?[t,o]:[t+1,o]:e===At?o<n-1?[t,o+1]:[t,o]:e===St?o>0?[t,o-1]:[t,o]:[t,o]}var Uo=({columnCount:e=0,containerRef:t,disableHighlightOnFocus:o,data:n,requestScroll:r,rowCount:l=0,viewportRange:s})=>{var M;let{from:i,to:a}=s,c=zt([-1,-1]),u=zt(),d=zt([-1,0]),p=Z(([y,E])=>{var A;let H=y===-1?Bo(E):Al(y,E);return(A=t.current)==null?void 0:A.querySelector(H)},[t]),C=y=>y==null?void 0:y.closest("[role='columnHeader'],[role='cell']"),v=y=>{var E,H;if(y.role==="columnHeader")return[-1,parseInt((E=y.dataset.idx)!=null?E:"-1",10)];{let A=y.closest("[role='row']");if(A){let I=parseInt((H=A.ariaRowIndex)!=null?H:"-1",10),J=Array.from(A.childNodes).indexOf(y);return[I,J]}}return Ll},h=Z(y=>{var E;if(t.current){let H=p(y);H?(H!==u.current&&((E=u.current)==null||E.setAttribute("tabindex",""),u.current=H,H.setAttribute("tabindex","0")),H.focus()):Pl(y[0],s)||(u.current=void 0,r==null||r({type:"scroll-page",direction:"up"}))}},[t,p,r,s]),w=Z((y,E,H=!1)=>{let A=[y,E];d.current=A,h(A),H&&(c.current=A)},[h]),R=Z(()=>{var y;(y=u.current)==null||y.setAttribute("tabindex",""),u.current=void 0},[]),b=Z(async(y,E)=>{switch(y){case Nt:r==null||r({type:"scroll-page",direction:"down"});break;case Kt:r==null||r({type:"scroll-page",direction:"up"});break;case Lt:r==null||r({type:"scroll-end",direction:"home"});break;case kt:r==null||r({type:"scroll-end",direction:"end"});break}return E},[r]),f=Z(()=>{var y;if(o!==!0&&(y=t.current)!=null&&y.contains(document.activeElement)){let E=C(document.activeElement);E&&(c.current=v(E))}},[o,t]),T=Z(async y=>{let[E,H]=Go(y)?await b(y,d.current):kl(y,d.current,e,l),[A,I]=d.current;(E!==A||H!==I)&&w(E,H,!0)},[e,b,l,w]),x=Z(y=>{n.length>0&&Wo(y.key)&&(y.preventDefault(),y.stopPropagation(),T(y.key))},[n,T]),m=Z(y=>{let E=y.target,H=C(E);if(H){let[A,I]=v(H);w(A,I)}},[w]),g=Sl(()=>({onClick:m,onFocus:f,onKeyDown:x}),[m,f,x]);El(()=>{let{current:y}=d,E=y[0]>=i&&y[0]<=a;u.current&&!E?R():!u.current&&E&&h(y)},[h,i,a,R]);let P=((M=t.current)==null?void 0:M.firstChild)!=null;return Hl(()=>{var y;if(P&&u.current===void 0){let E=(y=t.current)==null?void 0:y.querySelector(Bo(0));E&&(E.setAttribute("tabindex","0"),u.current=E)}},[t,P]),g};import{isValidNumber as ne}from"@vuu-ui/vuu-utils";import{useCallback as zl,useMemo as Il,useRef as Vl,useState as $l}from"react";import{useCallback as Kl,useEffect as _o,useRef as Nl}from"react";var me=new Map,Xo=(e,t,o)=>{switch(o){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}},Jo=new ResizeObserver(e=>{for(let t of e){let{target:o,borderBoxSize:n,contentBoxSize:r}=t,l=me.get(o);if(l){let[{blockSize:s,inlineSize:i}]=n,[{blockSize:a,inlineSize:c}]=r,{onResize:u,measurements:d}=l,p=!1;for(let[C,v]of Object.entries(d)){let h=Xo(o,{height:s,width:i,contentHeight:a,contentWidth:c},C);h!==v&&(p=!0,d[C]=h)}p&&u&&u(d)}}});function Qo(e,t,o,n=!1){let r=Nl(t),l=Kl(s=>{let{width:i,height:a}=s.getBoundingClientRect(),{clientWidth:c,clientHeight:u}=s;return r.current.reduce((d,p)=>(d[p]=Xo(s,{width:i,height:a,contentHeight:u,contentWidth:c},p),d),{})},[]);_o(()=>{let s=e.current;async function i(){me.set(s,{measurements:{}}),await document.fonts.ready;let a=me.get(s);if(a){let c=l(s);a.measurements=c,Jo.observe(s),n&&o(c)}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(me.has(s))throw Error("useResizeObserver attemping to observe same element twice");i()}return()=>{s&&me.has(s)&&(Jo.unobserve(s),me.delete(s))}},[l,e]),_o(()=>{let s=e.current,i=me.get(s);if(i){if(r.current!==t){r.current=t;let a=l(s);i.measurements=a}i.onResize=o}},[t,l,e,o])}var Fl=["clientHeight","clientWidth"],Yo=e=>Number.isFinite(e),Ol={height:"100%",width:"100%"},Gl=(e,t)=>ne(e)&&ne(t)?{height:`${e}px`,width:`${t}px`}:Ol,Wl=(e,t)=>{if(ne(e)&&ne(t))return{height:e,width:t}},Zo=({defaultHeight:e=0,defaultWidth:t=0,height:o,width:n})=>{let r=Vl(null),[l,s]=$l({css:Gl(o,n),inner:Wl(o,n),outer:{height:o!=null?o:"100%",width:n!=null?n:"100%"}});Il(()=>{s(a=>{let{inner:c,outer:u}=a;if(ne(o)&&ne(n)&&c&&u){let{height:d,width:p}=c,{height:C,width:v}=u;if(C!==o||v!==n){let h=ne(C)?C-d:0,w=ne(v)?v-p:0;return{...a,outer:{height:o,width:n},inner:{height:o-h,width:n-w}}}}return a})},[o,n]);let i=zl(({clientWidth:a,clientHeight:c})=>{s(u=>{let{css:d,inner:p,outer:C}=u;return Yo(c)&&Yo(a)&&(a!==(p==null?void 0:p.width)||c!==(p==null?void 0:p.height))?{css:d,outer:C,inner:{width:Math.floor(a)||t,height:Math.floor(c)||e}}:u})},[e,t]);return Qo(r,Fl,i,!0),{containerRef:r,cssSize:l.css,outerSize:l.outer,innerSize:l.inner}};import{deselectItem as Bl,isRowSelected as Ul,metadataKeys as _l,selectItem as Jl}from"@vuu-ui/vuu-utils";import{useCallback as Xl,useRef as jo}from"react";var{IDX:Ql}=_l,Yl=[],Ye=({selectionModel:e,onSelectionChange:t})=>{let o=jo(-1),n=jo(Yl);return Xl((l,s,i)=>{let{[Ql]:a}=l,{current:c}=o,{current:u}=n,p=(Ul(l)?Bl:Jl)(e,u,a,s,i,c);n.current=p,o.current=a,t&&t(p)},[t,e])};import{applyFilterToColumns as Zl,applyGroupByToColumns as jl,applySortToColumns as ql,findColumn as es,getCellRenderer as ts,getColumnName as os,getTableHeadings as ns,getValueFormatter as rs,isFilteredColumn as ls,isGroupColumn as ss,isPinned as is,isTypeDescriptor as as,metadataKeys as cs,updateColumn as qo,sortPinnedColumns as en,stripFilterFromColumns as us,moveItemDeprecated as ms,getDefaultAlignment as tn}from"@vuu-ui/vuu-utils";import{useReducer as ps}from"react";var ds=100,on=cs.count,fs=({serverDataType:e})=>e===void 0,Cs=e=>{var t;if(as(e.type))return ts((t=e.type)==null?void 0:t.renderer)},nn=(e,t)=>{if(e.serverDataType)return e.serverDataType;if(t){let o=t.columns.find(n=>n.name===e.name);if(o)return o.serverDataType}return"string"},Tp=e=>e.type==="columnSettings",wp=e=>e.type==="tableSettings",bs=(e,t)=>{switch(t.type){case"init":return ln(t);case"moveColumn":return hs(e,t);case"resizeColumn":return Ts(e,t);case"setTableSchema":return ws(e,t);case"hideColumns":return vs(e,t);case"showColumns":return ys(e,t);case"pinColumn":return Ds(e,t);case"updateColumnProp":return he(e,t);case"tableConfig":return sn(e,t);default:return console.log(`unhandled action ${t.type}`),e}},rn=(e,t)=>{let[o,n]=ps(bs,{tableConfig:e,dataSourceConfig:t},ln);return{columns:o.columns,dispatchColumnAction:n,headings:o.headings}};function ln({dataSourceConfig:e,tableConfig:t}){let o=t.columns.map(It(t)),n=o.some(is)?en(o):o,r={columns:n,headings:ns(n)};if(e){let{columns:l,...s}=e;return sn(r,{type:"tableConfig",...s})}else return r}var gs=(e,t)=>t==="uppercase"?e.toUpperCase():t==="capitalize"?e[0].toUpperCase()+e.slice(1).toLowerCase():e,It=e=>(t,o)=>{let n=nn(t,e.tableSchema),{columnDefaultWidth:r=ds,columnFormatHeader:l}=e,{align:s=tn(n),key:i,name:a,label:c=a,width:u=r,...d}=t,p={...d,align:s,CellRenderer:Cs(t),label:gs(c,l),key:i!=null?i:o+on,name:a,originalIdx:o,serverDataType:n,valueFormatter:rs(t),width:u};return ss(p)&&(p.columns=p.columns.map(C=>It(e)(C,C.key))),p};function hs(e,{column:t,moveBy:o,moveTo:n}){let{columns:r}=e;if(typeof o=="number"){let l=r.indexOf(t),s=r.slice(),[i]=s.splice(l,1);return s.splice(l+o,0,i),{...e,columns:s}}else if(typeof n=="number")return{...e,columns:ms(r,t,n)};return e}function vs(e,{columns:t}){return t.some(o=>o.hidden!==!0)?t.reduce((o,n)=>n.hidden!==!0?he(o,{type:"updateColumnProp",column:n,hidden:!0}):o,e):e}function ys(e,{columns:t}){return t.some(o=>o.hidden)?t.reduce((o,n)=>n.hidden?he(o,{type:"updateColumnProp",column:n,hidden:!1}):o,e):e}function Ts(e,{column:t,phase:o,width:n}){let r="updateColumnProp",l=o!=="end";switch(o){case"begin":return he(e,{type:r,column:t,resizing:l});case"end":return he(e,{type:r,column:t,resizing:l,width:n});case"resize":return he(e,{type:r,column:t,width:n});default:throw Error(`useTableModel.resizeColumn, invalid resizePhase ${o}`)}}function ws(e,{tableSchema:t}){let{columns:o}=e;if(o.some(fs)){let n=o.map(r=>{var s;let l=nn(r,t);return{...r,align:(s=r.align)!=null?s:tn(l),serverDataType:l}});return{...e,columns:n,tableSchema:t}}else return{...e,tableSchema:t}}function Ds(e,t){let{columns:o}=e,{column:n,pin:r}=t;return o=qo(o,n.name,{pin:r}),o=en(o),console.log({withPins:o}),{...e,columns:o}}function he(e,t){let{columns:o}=e,{align:n,column:r,hidden:l,label:s,resizing:i,width:a}=t,c={};return(n==="left"||n==="right")&&(c.align=n),typeof s=="string"&&(c.label=s),typeof i=="boolean"&&(c.resizing=i),typeof l=="boolean"&&(c.hidden=l),typeof a=="number"&&(c.width=a),o=qo(o,r.name,c),{...e,columns:o}}function sn(e,{columns:t,confirmed:o,filter:n,groupBy:r,sort:l}){let s=t&&t.length>0,i=r!==void 0,a=typeof(n==null?void 0:n.filter)=="string",c=l&&l.sortDefs.length>0,u=e;return s&&(u={...e,columns:t.map((d,p)=>{let C=os(d),v=p+on,h=es(u.columns,C);return h?h.key===v?h:{...h,key:v}:It(e)({name:d},p)})}),i&&(u={...e,columns:jl(u.columns,r,o)}),c&&(u={...e,columns:ql(u.columns,l)}),a?u={...e,columns:Zl(u.columns,n)}:u.columns.some(ls)&&(u={...e,columns:us(u.columns)}),u}import{useCallback as re,useRef as Ee}from"react";var an=e=>{let{scrollLeft:t,scrollTop:o}=e,{clientHeight:n,clientWidth:r,scrollHeight:l,scrollWidth:s}=e,i=t/(s-r),a=o/(l-n);return[i,a]},Ms=e=>{let{clientHeight:t,clientWidth:o,scrollHeight:n,scrollWidth:r}=e;return[r-o,n-t]},cn=({onAttach:e,onDetach:t})=>{let o=Ee(null);return re(r=>{if(r)o.current=r,e==null||e(r);else if(o.current){let{current:l}=o;o.current=r,t==null||t(l)}},[e,t])},un=({onHorizontalScroll:e,onVerticalScroll:t,viewport:o})=>{let n=Ee(!1),r=Ee({scrollTop:0,scrollLeft:0}),l=Ee(null),s=Ee(null),{maxScrollContainerScrollHorizontal:i,maxScrollContainerScrollVertical:a}=o,c=re(()=>{let{current:b}=s,{current:f}=l,{current:T}=n;if(T)n.current=!1;else if(b&&f){let[x,m]=an(f),[g,P]=Ms(b),M=Math.round(x*g),y=Math.round(m*P);console.log(`pctScrollTop ${m}, maxScrollTop ${P} rootScrollTop ${y}`),b.scrollTo({left:M,top:y,behavior:"auto"})}},[]),u=re(()=>{let{current:b}=s,{current:f}=l,{current:T}=r;if(b&&f){let{scrollLeft:x,scrollTop:m}=b,[g,P]=an(b);n.current=!0,f.scrollLeft=Math.round(g*i),f.scrollTop=Math.round(P*a),T.scrollTop!==m&&(T.scrollTop=m,t==null||t(m,P)),T.scrollLeft!==x&&(T.scrollLeft=x,e==null||e(x))}},[i,a,e,t]),d=re(b=>{l.current=b,b.addEventListener("scroll",c,{passive:!0})},[c]),p=re(b=>{l.current=null,b.removeEventListener("scroll",c)},[c]),C=re(b=>{s.current=b,b.addEventListener("scroll",u,{passive:!0})},[u]),v=re(b=>{s.current=null,b.removeEventListener("scroll",u)},[u]),h=cn({onAttach:C,onDetach:v}),w=cn({onAttach:d,onDetach:p}),R=re(b=>{let{current:f}=s;if(f){if(n.current=!1,b.type==="scroll-page"){let{clientHeight:T,scrollLeft:x,scrollTop:m}=f,{direction:g}=b,P=g==="down"?T:-T,M=Math.min(Math.max(0,m+P),a);f.scrollTo({top:M,left:x,behavior:"auto"})}else if(b.type==="scroll-end"){let{direction:T}=b,x=T==="end"?a:0;f.scrollTo({top:x,left:f.scrollLeft,behavior:"auto"})}}},[a]);return{scrollbarContainerRef:w,contentContainerRef:h,requestScroll:R}};import{useCallback as Rs,useMemo as Ze,useRef as xs}from"react";import{actualRowPositioning as Ps,virtualRowPositioning as Hs}from"@vuu-ui/vuu-utils";var Es=15e5,Ss={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},As=e=>{let t=0,o=0,n=0;for(let r of e){let{hidden:l,pin:s,width:i}=r,a=l?0:i;s==="left"?t+=a:s==="right"?o+=a:n+=a}return{pinnedWidthLeft:t+4,pinnedWidthRight:o+4,unpinnedWidth:n}},je=({columns:e,headerHeight:t,headings:o,rowCount:n,rowHeight:r,size:l})=>{let s=xs(0),a=Math.min(n,Es)*r,u=n*r-a,{pinnedWidthLeft:d,pinnedWidthRight:p,unpinnedWidth:C}=Ze(()=>As(e),[e]),[v,h]=Ze(()=>Ps(r),[r]),[w,R]=Ze(()=>u?Hs(r,u,s):[v,h],[h,v,u,r]),b=Rs(f=>{s.current=f},[]);return Ze(()=>{var f;if(l){let T=o.length,x=15,m=d+C+p,g=m>l.width?x:0,P=t*(1+T),M=a-(((f=l==null?void 0:l.height)!=null?f:0)-g)+P,y=m-l.width+d,E=(l.height-t)/r,H=Number.isInteger(E)?E+1:Math.ceil(E),A=l.height-P,I=a>A?x:0;return{contentHeight:a,getRowAtPosition:R,getRowOffset:w,horizontalScrollbarHeight:g,maxScrollContainerScrollHorizontal:y,maxScrollContainerScrollVertical:M,pinnedWidthLeft:d,pinnedWidthRight:p,rowCount:H,contentWidth:m,setPctScrollTop:b,totalHeaderHeight:P,verticalScrollbarWidth:I,viewportBodyHeight:A}}else return Ss},[l,o.length,d,C,p,a,t,r,R,w,b])};import{getColumnsInViewport as mn,itemsChanged as Ls}from"@vuu-ui/vuu-utils";import{useCallback as pn,useEffect as ks,useMemo as Ks,useRef as Vt,useState as Ns}from"react";var dn=({columns:e,getRowAtPosition:t,setRange:o,viewportMeasurements:n})=>{let r=Vt(-1),{rowCount:l,contentWidth:s,maxScrollContainerScrollHorizontal:i}=n,a=s-i,c=Vt(0),[u,d]=Ks(()=>mn(e,c.current,c.current+a),[a,e]),p=Vt(d);ks(()=>{v(u)},[u]);let[C,v]=Ns(u),h=pn(R=>{c.current=R;let[b,f]=mn(e,R,R+a);Ls(C,b)&&(p.current=f,v(b))},[a,e,C]),w=pn(R=>{let b=t(R);b!==r.current&&(r.current=b,console.log("setRange from handleVerticalScroll"),o({from:b,to:b+l}))},[t,o,l]);return{columnsWithinViewport:C,onHorizontalScroll:h,onVerticalScroll:w,virtualColSpan:p.current}};var Bs=[],{KEY:Us,IS_EXPANDED:Cn,IS_LEAF:bn}=Fs,gn=({config:e,dataSource:t,headerHeight:o,onConfigChange:n,onFeatureEnabled:r,onFeatureInvocation:l,onSelectionChange:s,renderBufferSize:i=0,rowHeight:a,selectionModel:c,...u})=>{var De,Oe;let[d,p]=Ws(t.size),C=$t(!1),v=$t();if(v.current=t,t===void 0)throw Error("no data source provided to Vuu Table");let h=Zo(u),w=U(S=>{p(S)},[]),{columns:R,dispatchColumnAction:b,headings:f}=rn(e,t.config),{getRowAtPosition:T,getRowOffset:x,setPctScrollTop:m,...g}=je({columns:R,headerHeight:o,headings:f,rowCount:d,rowHeight:a,size:h.innerSize});console.log(`rowCount from viewportMeasurements ${g.rowCount}`);let P=U(({tableSchema:S})=>{S?(C.current=!0,b({type:"setTableSchema",tableSchema:S})):console.log("usbscription message with no schema")},[b]),M=U(S=>{t.select(S),s==null||s(S)},[t,s]),y=Ye({onSelectionChange:M,selectionModel:c}),{data:E,getSelectedRows:H,range:A,setRange:I}=Io({dataSource:t,onFeatureEnabled:r,onFeatureInvocation:l,onSubscribed:P,onSizeChange:w,renderBufferSize:i,viewportRowCount:g.rowCount}),J=$t();J.current=E;let Ne=U(S=>{C.current=!0,console.log("onPersistentColumnOperation, dispatchColumnAction",{action:S}),b(S)},[b]),ze=Ue({dataSource:t,onPersistentColumnOperation:Ne}),F=U((S,K=!1,$)=>{t&&(t.sort=Is(t.sort,S,K,$))},[t]),q=U((S,K,$)=>{let N=R.find(W=>W.name===K);if(N)S==="end"&&(C.current=!0),b({type:"resizeColumn",phase:S,column:N,width:$});else throw Error(`useDataTable.handleColumnResize, column ${K} not found`)},[R,b]),O=U((S,K)=>{let $=$s(K,S),N=S[Us];if(S[Cn]){if(t.closeTreeNode(N,!0),$){let W=R.indexOf(K);t.getRowsAtDepth(W+1).some(B=>B[Cn]||B[bn])||b({type:"hideColumns",columns:R.slice(W+2)})}}else if(t.openTreeNode(N),$){let W=t.getChildRows(N),X=R.indexOf(K)+1,B=[R[X]];W.some(te=>te[bn])&&B.push(R[X+1]),B.some(te=>te.hidden)&&b({type:"showColumns",columns:B})}},[R,t,b]),{onVerticalScroll:ae,onHorizontalScroll:Te,columnsWithinViewport:we,virtualColSpan:V}=dn({columns:R,getRowAtPosition:T,setRange:I,viewportMeasurements:g}),ee=U((S,K)=>{m(K),ae(S)},[ae,m]),{requestScroll:lt,...Ie}=un({onHorizontalScroll:Te,onVerticalScroll:ee,viewport:g,viewportHeight:((Oe=(De=h.innerSize)==null?void 0:De.height)!=null?Oe:0)-o}),Ve=Uo({columnCount:R.length,containerRef:h.containerRef,data:E,requestScroll:lt,rowCount:t==null?void 0:t.size,viewportRange:A}),st=U(S=>{S?t&&t.groupBy.includes(S.name)&&(t.groupBy=t.groupBy.filter(K=>K!==S.name)):t.groupBy=[]},[t]),it=U((S,K)=>{let $=t.columns[S],N=Os(t.columns,$,K);N!==t.columns&&(t.columns=N,b({type:"tableConfig",columns:N}))},[t,b]),$e=Fo({onDrop:it});fn(()=>{v.current&&(C.current=!0,b({type:"init",tableConfig:e,dataSourceConfig:v.current.config}))},[e,b]),fn(()=>{t.on("config",(S,K)=>{C.current=!0,b({type:"tableConfig",...S,confirmed:K})})},[t,b]),Gs(()=>{C.current&&(n==null||n({...e,columns:R}),C.current=!1)},[R,e,n]);let[Fe]=zs(),at=U(S=>{var B;let{current:K}=J,{current:$}=v,N=S.target,W=N==null?void 0:N.closest("div[role='cell']"),X=N==null?void 0:N.closest(".vuuTableRow");if(W&&X&&K&&$){let{columns:te,selectedRowsCount:ct}=$,ut=Vs(te),mt=parseInt((B=X.ariaRowIndex)!=null?B:"-1"),Ge=Array.from(X.childNodes).indexOf(W),pt=K.find(([ft])=>ft===mt),dt=te[Ge];Fe(S,"grid",{columnMap:ut,columnName:dt,row:pt,selectedRows:ct===0?Bs:H(),viewport:t==null?void 0:t.viewport})}},[t==null?void 0:t.viewport,H,Fe]);return{columns:R,columnsWithinViewport:we,containerMeasurements:h,containerProps:Ve,data:E,dispatchColumnAction:b,getRowOffset:x,handleContextMenuAction:ze,headings:f,onColumnResize:q,onContextMenu:at,onRemoveColumnFromGroupBy:st,onRowClick:y,onSort:F,onToggleGroup:O,virtualColSpan:V,scrollProps:Ie,rowCount:d,viewportMeasurements:g,...$e}};import Qs from"classnames";import{isDataLoading as Ys}from"@vuu-ui/vuu-utils";import{jsx as Se,jsxs as hn}from"react/jsx-runtime";var pe="vuuTable",pd=({allowConfigEditing:e=!1,className:t,config:o,dataSource:n,headerHeight:r=25,height:l,id:s,onConfigChange:i,onFeatureEnabled:a,onFeatureInvocation:c,onSelectionChange:u,onShowConfigEditor:d,renderBufferSize:p=0,rowHeight:C=20,selectionModel:v="extended",style:h,width:w,...R})=>{let b=Xs(s),{containerMeasurements:{containerRef:f,innerSize:T,outerSize:x},containerProps:m,dispatchColumnAction:g,draggable:P,draggedItemIndex:M,handleContextMenuAction:y,scrollProps:E,viewportMeasurements:H,...A}=gn({config:o,dataSource:n,renderBufferSize:p,headerHeight:r,height:l,onConfigChange:i,onFeatureEnabled:a,onFeatureInvocation:c,onSelectionChange:u,rowHeight:C,selectionModel:v,width:w}),I={...x,"--content-height":`${H.contentHeight}px`,"--horizontal-scrollbar-height":`${H.horizontalScrollbarHeight}px`,"--content-width":`${H.contentWidth}px`,"--pinned-width-left":`${H.pinnedWidthLeft}px`,"--pinned-width-right":`${H.pinnedWidthRight}px`,"--header-height":`${r}px`,"--row-height":`${C}px`,"--table-height":`${T==null?void 0:T.height}px`,"--table-width":`${T==null?void 0:T.width}px`,"--total-header-height":`${H.totalHeaderHeight}px`,"--vertical-scrollbar-width":`${H.verticalScrollbarWidth}px`,"--viewport-body-height":`${H.viewportBodyHeight}px`},J=Qs(pe,t,{[`${pe}-zebra`]:o.zebraStripes,[`${pe}-loading`]:Ys(A.columns)});return Se(_s,{menuActionHandler:y,menuBuilder:Be(n),children:hn("div",{...R,...m,className:J,id:b,ref:f,style:I,tabIndex:-1,children:[T?Se("div",{className:`${pe}-scrollbarContainer`,ref:E.scrollbarContainerRef,children:Se("div",{className:`${pe}-scrollbarContent`})}):null,T?hn("div",{className:`${pe}-contentContainer`,ref:E.contentContainerRef,children:[Se(zo,{...A,headerHeight:r,tableId:b}),P]}):null,e&&T?Se(Js,{className:`${pe}-settings`,"data-icon":"settings",onClick:d,variant:"secondary"}):null]})})};import Zs from"classnames";import{isJsonAttribute as js,metadataKeys as qs,registerComponent as ei}from"@vuu-ui/vuu-utils";import{jsx as Ft,jsxs as li}from"react/jsx-runtime";var Ae="vuuJsonCell",{IS_EXPANDED:ti,KEY:oi}=qs,ni=e=>{let t=e.lastIndexOf("|");return t===-1?"":e.slice(t+1)},ri=({column:e,row:t})=>{let{key:o}=e,n=t[o],r=!1;js(n)&&(n=n.slice(0,-1),r=!0);let l=ni(t[oi]),s=Zs({[`${Ae}-name`]:l===n,[`${Ae}-value`]:l!==n,[`${Ae}-group`]:r});if(r){let i=t[ti]?"minus-box":"plus-box";return li("span",{className:s,children:[Ft("span",{className:`${Ae}-value`,children:n}),Ft("span",{className:`${Ae}-toggle`,"data-icon":i})]})}else return n?Ft("span",{className:s,children:n}):null};ei("json",ri,"cell-renderer",{description:"JSON formatter",label:"JSON formatter",serverDataType:"json"});import xf from"classnames";import{useRef as Hf}from"react";import{useCallback as Ot,useRef as si}from"react";import{jsx as ai}from"react/jsx-runtime";var vn=()=>{},ii="vuuColumnResizerNext",Le=({onDrag:e,onDragEnd:t=vn,onDragStart:o=vn})=>{let n=si(0),r=Ot(i=>{i.stopPropagation&&i.stopPropagation(),i.preventDefault&&i.preventDefault();let a=Math.round(i.clientX),c=a-n.current;n.current=a,c!==0&&e(i,c)},[e]),l=Ot(i=>{window.removeEventListener("mouseup",l),window.removeEventListener("mousemove",r),t(i)},[t,r]),s=Ot(i=>{o(i),n.current=Math.round(i.clientX),window.addEventListener("mouseup",l),window.addEventListener("mousemove",r),i.stopPropagation&&i.stopPropagation(),i.preventDefault&&i.preventDefault()},[o,r,l]);return ai("div",{className:ii,onMouseDown:s})};import{useCallback as Gt,useRef as ci,useState as ui}from"react";var ke=({column:e,onResize:t,rootRef:o})=>{let n=ci(0),[r,l]=ui(!1),{name:s}=e,i=Gt(()=>{if(console.log("onResizeStart"),t&&o.current){console.log("handleResizeStart");let{width:u}=o.current.getBoundingClientRect();n.current=Math.round(u),l(!0),t==null||t("begin",s)}},[s,t,o]),a=Gt((u,d)=>{if(o.current&&t){let{width:p}=o.current.getBoundingClientRect(),C=Math.round(p)+d;C!==n.current&&C>0&&(t("resize",s,C),n.current=C)}},[s,t,o]),c=Gt(()=>{t&&(t("end",s,n.current),setTimeout(()=>{l(!1)},80))},[s,t]);return{isResizing:r,onDrag:a,onDragStart:i,onDragEnd:c}};import{getColumnStyle as mi}from"@vuu-ui/vuu-utils";import pi from"classnames";import{useMemo as di}from"react";var j=(e,t,o)=>di(()=>{let n=pi(t,{vuuPinFloating:e.pin==="floating",vuuPinLeft:e.pin==="left",vuuPinRight:e.pin==="right",vuuEndPin:o&&e.endPin,[`${t}-editable`]:e.editable,[`${t}-right`]:e.align==="right"}),r=mi(e);return{className:n,style:r}},[e,t,o]);import fi from"classnames";import{useCallback as Ci}from"react";import{jsx as bi,jsxs as gi}from"react/jsx-runtime";var yn="vuuColumnHeaderPill",de=({children:e,className:t,column:o,onRemove:n,removable:r,...l})=>{if(r&&typeof n!="function")throw Error("ColumnHeaderPill onRemove prop must be provided if Pill is removable");let s=Ci(i=>{i.preventDefault(),i.stopPropagation(),n==null||n(o)},[o,n]);return gi("div",{...l,className:fi(yn,t),children:[e,r?bi("span",{className:`${yn}-removeButton`,role:"button","data-icon":"cross",onClick:s}):null]})};import{jsx as Wt,jsxs as hi}from"react/jsx-runtime";var Bt=({column:e,...t})=>{let{name:o,sorted:n}=e,r=typeof n=="number"?n<0?"arrow-down":"arrow-up":n==="A"?"arrow-up":n==="D"?"arrow-down":void 0;return hi(de,{...t,column:e,children:[Wt("span",{className:"vuuGroupColumnPill-label",children:o}),r!==void 0?Wt("span",{"data-icon":r}):null,typeof n=="number"?Wt("span",{className:"vuuSortPosition",children:Math.abs(n)}):null]})};import{jsx as Tn,jsxs as vi}from"react/jsx-runtime";var wn=({column:e})=>{if(!e.sorted)return null;let t=typeof e.sorted=="number"?e.sorted<0?"arrow-down":"arrow-up":e.sorted==="A"?"arrow-up":"arrow-down";return vi(de,{column:e,children:[Tn("span",{"data-icon":t}),typeof e.sorted=="number"?Tn("span",{className:"vuuSortPosition",children:Math.abs(e.sorted)}):null]})};import{jsx as Nf,jsxs as zf}from"react/jsx-runtime";import{createElement as Kf}from"react";import yi from"classnames";import{useCallback as Ti,useRef as wi,useState as Di}from"react";import{OverflowContainer as Mi,useLayoutEffectSkipFirst as Ri}from"@vuu-ui/vuu-layout";import{jsx as _t,jsxs as Hi}from"react/jsx-runtime";import{createElement as Pi}from"react";var Ut="vuuTableNextGroupHeaderCell",xi=(e,t)=>e===t?e:t,qe=({column:e,className:t,onRemoveColumn:o,onResize:n,...r})=>{let l=wi(null),{isResizing:s,...i}=ke({column:e,onResize:n,rootRef:l}),[a,c]=Di(e.columns),{className:u,style:d}=j(e,Ut,!0),p=a.length>1?{removable:!0,onRemove:o}:void 0,C=Ti((v,h)=>{c(w=>{let R=w.slice(),[b]=R.splice(v,1);return h===-1?R.concat(b):(R.splice(h,0,b),R)})},[]);return Ri(()=>{c(v=>xi(v,e.columns))},[e.columns]),Hi("div",{...r,className:yi(u,"vuuTableNextHeaderCell",t,{[`${Ut}-pending`]:e.groupConfirmed===!1}),ref:l,role:"columnheader",style:d,children:[_t(Mi,{allowDragDrop:!0,className:`${Ut}-inner`,height:24,onMoveItem:C,overflowPosition:"start",children:a.map(v=>Pi(Bt,{...p,column:v,key:v.key}))}),_t(de,{column:e,removable:!0,onRemove:o}),e.resizeable!==!1?_t(Le,{...i}):null]})};import{useCallback as Ni,useRef as zi}from"react";import{useContextMenu as Ei}from"@vuu-ui/vuu-popups";import Si from"classnames";import{useCallback as Dn,useRef as Ai,useState as Li}from"react";import{jsx as Ki}from"react/jsx-runtime";var ki=e=>{if(e){let{bottom:t,left:o}=e.getBoundingClientRect();return{x:o,y:t+6}}},Mn=({className:e,column:t,...o})=>{let n=Ai(null),[r,l]=Li(!1),[s]=Ei(),i=Dn(()=>{l(!1)},[]),a=Dn(c=>{l(!0),s(c,"column-menu",{column:t,ContextMenuProps:{className:"vuuColumnMenuList",onClose:i,position:ki(n.current)}})},[t,i,s]);return Ki("span",{...o,className:Si("vuuTable-columnMenu",e,{"vuuTable-columnMenu-open":r}),"data-icon":"more-vert",onClick:a,ref:n})};import Ii from"classnames";import{jsx as et,jsxs as Vi}from"react/jsx-runtime";var Jt="vuuTableNextHeaderCell",Rn=({className:e,column:t,onClick:o,onResize:n,...r})=>{var h;let l=zi(null),{isResizing:s,...i}=ke({column:t,onResize:n,rootRef:l}),a=Ni(w=>{console.log(`click isResizing ${s}`),!s&&(o==null||o(w))},[s,o]),{className:c,style:u}=j(t,Jt,!0),d=et(Mn,{column:t}),p=et("div",{className:`${Jt}-label`,children:(h=t.label)!=null?h:t.name}),C=et(wn,{column:t}),v=t.align==="right"?[C,p,d]:[d,p,C];return Vi("div",{...r,className:Ii(c,e,{[`${Jt}-resizing`]:s}),onClick:a,ref:l,role:"columnheader",style:u,children:[...v,t.resizeable!==!1?et(Le,{...i}):null]})};import{ContextMenuProvider as Dc}from"@vuu-ui/vuu-popups";import{isGroupColumn as Mc,metadataKeys as Rc,notHidden as xc}from"@vuu-ui/vuu-utils";import nr from"classnames";import{useRef as Pc}from"react";import{isGroupColumn as En,isJsonColumn as Qi,isJsonGroup as Yi,metadataKeys as Zi,notHidden as ji,RowSelected as qi}from"@vuu-ui/vuu-utils";import ea from"classnames";import{memo as ta,useCallback as Sn}from"react";import{metadataKeys as $i}from"@vuu-ui/vuu-utils";import{useCallback as Fi}from"react";import{jsx as xn}from"react/jsx-runtime";var{IDX:Oi}=$i,Gi="vuuTableNextCell",Pn=({column:e,columnMap:t,onDataEdited:o,row:n})=>{let{className:r,style:l}=j(e,Gi),{CellRenderer:s,name:i,valueFormatter:a}=e,c=t[i],u=Fi(d=>(o==null||o(n[Oi],i,d),!0),[i,o,n]);return xn("div",{className:r,role:"cell",style:l,children:s?xn(s,{column:e,columnMap:t,onCommit:u,row:n}):a(n[c])})};import{getGroupValueAndOffset as Wi,metadataKeys as Bi}from"@vuu-ui/vuu-utils";import{useCallback as Ui}from"react";import _i from"classnames";import{jsx as Qt,jsxs as Xi}from"react/jsx-runtime";var{IS_LEAF:Ji}=Bi,Xt="vuuTableNextGroupCell",Hn=({column:e,onClick:t,row:o})=>{let{columns:n}=e,[r,l]=Wi(n,o),{className:s,style:i}=j(e,Xt),a=Ui(d=>{t==null||t(d,e)},[e,t]),c=o[Ji],u=Array(l).fill(0).map((d,p)=>Qt("span",{className:`${Xt}-spacer`},p));return Xi("div",{className:_i(s,"vuuTableNextCell"),role:"cell",style:i,onClick:c?void 0:a,children:[u,c?null:Qt("span",{className:`${Xt}-toggle`,"data-icon":"triangle-right"}),Qt("span",{children:r})]})};import{jsx as Yt}from"react/jsx-runtime";import{createElement as la}from"react";var{IDX:oa,IS_EXPANDED:na,SELECTED:ra}=Zi,le="vuuTableNextRow",Zt=ta(({className:e,columnMap:t,columns:o,row:n,offset:r,onClick:l,onDataEdited:s,onToggleGroup:i,zebraStripes:a=!1,...c})=>{let{[oa]:u,[na]:d,[ra]:p}=n,C=Sn(T=>{let x=T.shiftKey,m=T.ctrlKey||T.metaKey;l==null||l(n,x,m)},[l,n]),{True:v,First:h,Last:w}=qi,R=ea(le,e,{[`${le}-even`]:a&&u%2===0,[`${le}-expanded`]:d,[`${le}-selected`]:p&v,[`${le}-selectedStart`]:p&h,[`${le}-selectedEnd`]:p&w}),b={transform:`translate3d(0px, ${r}px, 0px)`},f=Sn((T,x)=>{(En(x)||Yi(x,n))&&(T.stopPropagation(),i==null||i(n,x))},[i,n]);return la("div",{...c,"aria-rowindex":n[0],key:`row-${n[0]}`,role:"row",className:R,onClick:C,style:b},Yt("span",{className:`${le}-selectionDecorator vuuStickyLeft`}),o.filter(ji).map(T=>{let x=En(T),m=Qi(T);return Yt(x?Hn:Pn,{column:T,columnMap:t,onClick:x||m?f:void 0,onDataEdited:s,row:n},T.key)}),Yt("span",{className:`${le}-selectionDecorator vuuStickyRight`}))});Zt.displayName="Row";import{useLayoutEffectSkipFirst as mc}from"@vuu-ui/vuu-layout";import{useTableAndColumnSettings as pc}from"@vuu-ui/vuu-table-extras";import{useDragDropNext as dc}from"@vuu-ui/vuu-ui-controls";import{useCallback as se,useEffect as ia,useMemo as aa,useRef as eo}from"react";var jt=e=>`.vuuTableNext-col-headers .vuuTableNextHeaderCell:nth-child(${e})`,qt=(e,t)=>`.vuuTableNext-body > [aria-rowindex='${e}'] > [role='cell']:nth-child(${t+1})`,An=(e,[t,o])=>{var l;let n=t===-1?jt(o):qt(t,o),r=(l=e.current)==null?void 0:l.querySelector(n);return sa(r)&&r.querySelector("button")||r},sa=e=>e.classList.contains("vuuTableNextCell-editable"),Ln=e=>e.querySelector(".vuuTableInputCell")!==null;var ca=new Set(["Home","End","PageUp","PageDown","ArrowDown","ArrowLeft","ArrowRight","ArrowUp"]),ua=e=>ca.has(e),ma=["Home","End","PageUp","PageDown"],pa=e=>ma.includes(e),da=[-1,-1],fa=[void 0,void 0],Ca=e=>{var o,n;let t=(o=e.closest(".vuuTableNext"))==null?void 0:o.querySelector(".vuuTableNext-scrollbarContainer");if(t){let r=t==null?void 0:t.getBoundingClientRect(),l=(n=e.closest(".vuuTableNextCell"))==null?void 0:n.getBoundingClientRect();if(l)return l.bottom>r.bottom?["down",l.bottom-r.bottom]:l.top<r.top?["up",l.top-r.top]:l.right<r.right?["right",l.right-r.right]:l.left<r.left?["left",l.left-r.left]:fa;throw Error("Whats going on, cell not found")}else throw Error("Whats going on, scrollbar container not found")};function ba(e,[t,o],n,r){return e==="ArrowUp"?t>-1?[t-1,o]:[t,o]:e==="ArrowDown"?t===-1?[0,o]:t===r-1?[t,o]:[t+1,o]:e==="ArrowRight"?o<n-1?[t,o+1]:[t,o]:e==="ArrowLeft"?o>1?[t,o-1]:[t,o]:[t,o]}var kn=({columnCount:e=0,containerRef:t,disableHighlightOnFocus:o,requestScroll:n,rowCount:r=0,viewportRowCount:l})=>{var x;let s=eo([-1,-1]),i=eo(),a=eo([-1,0]),c=m=>m==null?void 0:m.closest("[role='columnHeader'],[role='cell']"),u=m=>{var g,P;if(m.role==="columnHeader")return[-1,parseInt((g=m.dataset.idx)!=null?g:"-1",10)];{let M=m.closest("[role='row']");if(M){let y=parseInt((P=M.ariaRowIndex)!=null?P:"-1",10),E=Array.from(M.childNodes).indexOf(m);return[y,E]}}return da},d=se(m=>{var g;if(t.current){let P=An(t,m);if(P){P!==i.current&&((g=i.current)==null||g.removeAttribute("tabindex"),i.current=P,P.setAttribute("tabindex","0"));let[M,y]=Ca(P);M&&y&&(n==null||n({type:"scroll-distance",distance:y,direction:M})),P.focus()}}},[t,n]),p=se((m,g,P=!1)=>{let M=[m,g];a.current=M,d(M),P&&(s.current=M)},[d]),C=se((m,[g,P])=>new Promise(M=>{let y=g;switch(m){case"PageDown":y=Math.min(r-1,g+l),n==null||n({type:"scroll-page",direction:"down"});break;case"PageUp":y=Math.max(0,g-l),n==null||n({type:"scroll-page",direction:"up"});break;case"Home":y=0,n==null||n({type:"scroll-end",direction:"home"});break;case"End":y=r-1,n==null||n({type:"scroll-end",direction:"end"});break}setTimeout(()=>{M([y,P])},90)}),[n,r,l]),v=se(()=>{var m;if(o!==!0&&(m=t.current)!=null&&m.contains(document.activeElement)){let g=c(document.activeElement);g&&(console.log({focusedCell:g}),s.current=u(g))}},[o,t]),h=se(async m=>{console.log(`navigate child items ${m}`);let[g,P]=pa(m)?await C(m,a.current):ba(m,a.current,e,r);console.log(`nextRowIdx ${g} nextColIdx ${P}`);let[M,y]=a.current;(g!==M||P!==y)&&p(g,P,!0)},[e,C,r,p]),w=se(m=>{r>0&&ua(m.key)&&(m.preventDefault(),m.stopPropagation(),h(m.key))},[r,h]),R=se(m=>{let g=m.target,P=c(g);if(P){let[M,y]=u(P);p(M,y)}},[p]),b=se(()=>{h("ArrowDown")},[h]),f=aa(()=>({navigate:b,onClick:R,onFocus:v,onKeyDown:w}),[R,v,w,b]),T=((x=t.current)==null?void 0:x.firstChild)!=null;return ia(()=>{if(T&&i.current===void 0){let{current:m}=t,g=(m==null?void 0:m.querySelector(jt(0)))||(m==null?void 0:m.querySelector(qt(0,0)));g&&(g.setAttribute("tabindex","0"),i.current=g)}},[t,T]),f};import{applySort as fc,buildColumnMap as Cc,isGroupColumn as bc,isJsonGroup as gc,isValidNumber as jn,metadataKeys as hc,updateColumn as vc,visibleColumnAtIndex as yc}from"@vuu-ui/vuu-utils";import{useCallback as z,useEffect as qn,useMemo as lo,useState as so}from"react";var to=(e,t)=>{switch(t.type){case"col-size":return{...e,columns:e.columns.map(o=>o.name===t.column.name?{...o,width:t.width}:o)};case"column-prop":return{...e,columns:e.columns.map(o=>o.name===t.column.name?{...o,[t.property]:t.value}:o)};default:return e}};import{isVuuFeatureAction as ya,isVuuFeatureInvocation as Ta}from"@vuu-ui/vuu-data-react/src";import{getFullRange as oo,NULL_RANGE as Kn}from"@vuu-ui/vuu-utils";import{useCallback as no,useEffect as Nn,useMemo as wa,useRef as ot,useState as Da}from"react";import{metadataKeys as ga,WindowRange as ha}from"@vuu-ui/vuu-utils";var{SELECTED:va}=ga,tt=class{constructor({from:t,to:o}){this.rowCount=0;this.setRowCount=t=>{t<this.data.length&&(this.data.length=t),this.rowCount=t};this.range=new ha(t,o),this.data=new Array(o-t),this.rowCount=0}add(t){let[o]=t;if(this.isWithinRange(o)){let n=o-this.range.from;this.data[n]=t}}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:o}){if(t!==this.range.from||o!==this.range.to){let[n,r]=this.range.overlap(t,o),l=new Array(Math.max(0,o-t));for(let s=n;s<r;s++){let i=this.getAtIndex(s);if(i){let a=s-t;l[a]=i}}this.data=l,this.range.from=t,this.range.to=o}}getSelectedRows(){return this.data.filter(t=>t[va]===1)}};var zn=({dataSource:e,onFeatureEnabled:t,onFeatureInvocation:o,onSizeChange:n,onSubscribed:r,range:l=Kn,renderBufferSize:s=0})=>{let[,i]=Da(null),a=ot([]),c=ot(!0),u=ot(!1),d=ot(Kn),p=wa(()=>new tt(oo(l,s)),[]),C=no(w=>{for(let R of w)p.add(R);a.current=p.data,c.current&&i({})},[p]),v=no(w=>{w.type==="subscribed"?r==null||r(w):w.type==="viewport-update"?(typeof w.size=="number"&&(n==null||n(w.size),p.setRowCount(w.size)),w.rows?C(w.rows):typeof w.size=="number"&&(a.current=p.data,u.current=!0)):ya(w)?t==null||t(w):Ta(w)?o==null||o(w):console.log(`useDataSource unexpected message ${w.type}`)},[p,t,o,n,r,C]);Nn(()=>()=>{c.current=!0,c.current=!1},[]),Nn(()=>{e==null||e.subscribe({range:oo(l,s)},v)},[e,v,l,s]);let h=no(w=>{let R=oo(w,s);p.setRange(R),e.range=d.current=R,e.emit("range",w)},[e,p,s]);return{data:a.current,range:d.current,setRange:h}};import{useMemo as Ma,useRef as Ra}from"react";var In=e=>{let t=Ra(e);return Ma(()=>t.current,[])};import{buildColumnMap as xa}from"@vuu-ui/vuu-utils";import{useCallback as Pa}from"react";import{useContextMenu as Ha}from"@vuu-ui/vuu-popups";var Vn=({columns:e,data:t})=>{let[o]=Ha();return Pa(r=>{var a;let l=r.target,s=l==null?void 0:l.closest("div[role='cell']"),i=l==null?void 0:l.closest("div[role='row']");if(s&&i){let c=xa(e),u=parseInt((a=i.ariaRowIndex)!=null?a:"-1"),d=Array.from(i.childNodes).indexOf(s),p=t.find(([v])=>v===u),C=e[d];o(r,"grid",{columnMap:c,columnName:C,row:p})}},[e,t,o])};import{isCharacterKey as Ea}from"@vuu-ui/vuu-utils";import{useCallback as nt}from"react";var $n=({navigate:e})=>{let t=nt(()=>{e()},[e]),o=nt(l=>{let s=l.target,i=s.querySelector("input");i&&(i.focus(),i.select()),s.addEventListener("vuu-commit",t,!0)},[t]),n=nt(l=>{let s=l.target,i=s.querySelector("input");i&&(i.focus(),i.select()),s.addEventListener("vuu-commit",t,!0)},[t]);return{onKeyDown:nt(l=>{Ln(l.target)&&(Ea(l.key)?o(l):l.key==="Enter"&&n(l))},[o,n])}};import{applyFilterToColumns as Sa,applyGroupByToColumns as Aa,applySortToColumns as La,getCellRenderer as ka,getTableHeadings as Ka,getValueFormatter as Na,hasValidationRules as za,isFilteredColumn as Ia,isGroupColumn as Va,isPinned as $a,isTypeDescriptor as Fa,logger as Oa,metadataKeys as Ga,moveItem as Wa,sortPinnedColumns as Fn,stripFilterFromColumns as Ba,subscribedOnly as Ua}from"@vuu-ui/vuu-utils";import{buildValidationChecker as _a}from"@vuu-ui/vuu-ui-controls";import{useReducer as Ja}from"react";var{info:ro}=Oa("useTableModel"),Xa=100,Qa=Ga.count,Ya=({serverDataType:e})=>e===void 0,Za=e=>{var t;if(Fa(e.type))return ka((t=e.type)==null?void 0:t.renderer)},ja=(e,t)=>{var n;let o=t.columns.find(({name:r})=>r===e.name);return o?o.serverDataType:(n=e.serverDataType)!=null?n:"string"},qa=["int","long","double"],On=e=>e===void 0?void 0:qa.includes(e)?"right":"left",Gn=e=>e.type==="columnSettings",Wn=e=>e.type==="tableSettings",ec=(e,t)=>{switch(ro==null||ro(`TableModelReducer ${t.type}`),console.log(`TableModelReducer ${t.type}`),t.type){case"init":return console.log({init:t}),Un(t);case"moveColumn":return oc(e,t);case"resizeColumn":return lc(e,t);case"setTableSchema":return sc(e,t);case"hideColumns":return nc(e,t);case"showColumns":return rc(e,t);case"pinColumn":return ic(e,t);case"updateColumnProp":return ye(e,t);case"tableConfig":return Jn(e,t);default:return console.log(`unhandled action ${t.type}`),e}},Bn=(e,t)=>{let[o,n]=Ja(ec,{tableConfig:e,dataSourceConfig:t},Un),{columns:r,headings:l,tableConfig:s,...i}=o;return{columns:r,dispatchColumnAction:n,headings:l,tableAttributes:i,tableConfig:s}};function Un({dataSourceConfig:e,tableConfig:t}){let{columns:o,...n}=t,r=o.filter(Ua(e==null?void 0:e.columns)).map(_n(n)),l=r.some($a)?Fn(r):r,s={columns:l,headings:Ka(l),tableConfig:t,...n};if(e){let{columns:i,...a}=e;s=Jn(s,{type:"tableConfig",...a})}return s}var tc=(e,t)=>t==="uppercase"?e.toUpperCase():t==="capitalize"?e[0].toUpperCase()+e.slice(1).toLowerCase():e,_n=e=>(t,o)=>{let{columnDefaultWidth:n=Xa,columnFormatHeader:r}=e,{align:l=On(t.serverDataType),key:s,name:i,label:a=i,width:c=n,...u}=t,d={...u,align:l,CellRenderer:Za(t),clientSideEditValidationCheck:za(t.type)?_a(t.type.renderer.rules):void 0,label:tc(a,r),key:s!=null?s:o+Qa,name:i,originalIdx:o,valueFormatter:Na(t),width:c};return Va(d)&&(d.columns=d.columns.map(p=>_n(e)(p,p.key))),d};function oc(e,{column:t,moveBy:o,moveTo:n}){let{columns:r}=e;if(typeof o=="number"){let l=r.indexOf(t),s=r.slice(),[i]=s.splice(l,1);return s.splice(l+o,0,i),{...e,columns:s}}else if(typeof n=="number"){let l=r.indexOf(t);return{...e,columns:Wa(r,l,n)}}return e}function nc(e,{columns:t}){return t.some(o=>o.hidden!==!0)?t.reduce((o,n)=>n.hidden!==!0?ye(o,{type:"updateColumnProp",column:n,hidden:!0}):o,e):e}function rc(e,{columns:t}){return t.some(o=>o.hidden)?t.reduce((o,n)=>n.hidden?ye(o,{type:"updateColumnProp",column:n,hidden:!1}):o,e):e}function lc(e,{column:t,phase:o,width:n}){let r="updateColumnProp",l=o!=="end";switch(o){case"begin":return ye(e,{type:r,column:t,resizing:l});case"end":return ye(e,{type:r,column:t,resizing:l,width:n});case"resize":return ye(e,{type:r,column:t,width:n});default:throw Error(`useTableModel.resizeColumn, invalid resizePhase ${o}`)}}function sc(e,{tableSchema:t}){let{columns:o}=e;if(o.some(Ya)){let n=o.map(r=>{var s;let l=ja(r,t);return{...r,align:(s=r.align)!=null?s:On(l),serverDataType:l}});return{...e,columns:n}}else return e}function ic(e,t){let{columns:o}=e,{column:n,pin:r}=t,l=o.find(s=>s.name===n.name);return l?(o=ve(o,{...l,pin:r}),o=Fn(o),{...e,columns:o}):e}function ye(e,t){let{columns:o}=e,{align:n,column:r,hidden:l,label:s,resizing:i,width:a}=t,c=o.find(u=>u.name===r.name);return c&&((n==="left"||n==="right")&&(o=ve(o,{...c,align:n})),typeof s=="string"&&(o=ve(o,{...c,label:s})),typeof i=="boolean"&&(o=ve(o,{...c,resizing:i})),typeof l=="boolean"&&(o=ve(o,{...c,hidden:l})),typeof a=="number"&&(o=ve(o,{...c,width:a}))),{...e,columns:o}}function Jn(e,{confirmed:t,filter:o,groupBy:n,sort:r}){let l=n!==void 0,s=typeof(o==null?void 0:o.filter)=="string",i=r&&r.sortDefs.length>0,a=e;return l&&(a={...e,columns:Aa(a.columns,n,t)}),i&&(a={...e,columns:La(a.columns,r)}),s?a={...e,columns:Sa(a.columns,o)}:a.columns.some(Ia)&&(a={...e,columns:Ba(a.columns)}),a}function ve(e,t){return e.map(o=>o.name===t.name?t:o)}import{useCallback as ie,useRef as Ke}from"react";var Xn=e=>{let{scrollLeft:t,scrollTop:o}=e,{clientHeight:n,clientWidth:r,scrollHeight:l,scrollWidth:s}=e,i=t/(s-r),a=o/(l-n);return[i,a]},Qn=({onAttach:e,onDetach:t})=>{let o=Ke(null);return ie(r=>{if(r)o.current=r,e==null||e(r);else if(o.current){let{current:l}=o;o.current=r,t==null||t(l)}},[e,t])},Yn=({maxScrollLeft:e,maxScrollTop:t,onHorizontalScroll:o,onVerticalScroll:n,rowHeight:r,viewportRowCount:l})=>{let s=Ke(!1),i=Ke({scrollTop:0,scrollLeft:0}),a=Ke(null),c=Ke(null),u=ie(()=>{let{current:f}=c,{current:T}=a,{current:x}=s;if(x)s.current=!1;else if(f&&T){let[m,g]=Xn(T),P=Math.round(m*e),M=Math.round(g*t);f.scrollTo({left:P,top:M,behavior:"auto"})}},[e,t]),d=ie(()=>{let{current:f}=c,{current:T}=a,{current:x}=i;if(f&&T){let{scrollLeft:m,scrollTop:g}=f,[P,M]=Xn(f);s.current=!0,T.scrollLeft=Math.round(P*e),T.scrollTop=Math.round(M*t),x.scrollTop!==g&&(x.scrollTop=g,n==null||n(g,M)),x.scrollLeft!==m&&(x.scrollLeft=m,o==null||o(m))}},[e,t,o,n]),p=ie(f=>{a.current=f,f.addEventListener("scroll",u,{passive:!0})},[u]),C=ie(f=>{a.current=null,f.removeEventListener("scroll",u)},[u]),v=ie(f=>{c.current=f,f.addEventListener("scroll",d,{passive:!0})},[d]),h=ie(f=>{c.current=null,f.removeEventListener("scroll",d)},[d]),w=Qn({onAttach:v,onDetach:h}),R=Qn({onAttach:p,onDetach:C}),b=ie(f=>{let{current:T}=c;if(T){let{scrollLeft:x,scrollTop:m}=T;if(s.current=!1,f.type==="scroll-distance"){let g=x,P=m;f.direction==="up"||f.direction==="down"?P=Math.min(Math.max(0,m+f.distance),t):g=Math.min(Math.max(0,x+f.distance),e),T.scrollTo({top:P,left:g,behavior:"auto"})}else if(f.type==="scroll-page"){let{direction:g}=f,P=l*(g==="down"?r:-r),M=Math.min(Math.max(0,m+P),t);T.scrollTo({top:M,left:x,behavior:"auto"})}else if(f.type==="scroll-end"){let{direction:g}=f,P=g==="end"?t:0;T.scrollTo({top:P,left:T.scrollLeft,behavior:"auto"})}}},[e,t,r,l]);return{scrollbarContainerRef:R,contentContainerRef:w,requestScroll:b}};import{useCallback as ac,useEffect as cc,useRef as uc}from"react";var Zn=({columns:e,getRowAtPosition:t,setRange:o,viewportMeasurements:n})=>{let r=uc(0),{contentWidth:l,rowCount:s}=n,i=ac(a=>{let c=t(a);c!==r.current&&(r.current=c,o({from:c,to:c+s}))},[t,o,s]);return cc(()=>{let{current:a}=r,c={from:a,to:a+s};o(c)},[o,s]),{onVerticalScroll:i}};var{KEY:Tc,IS_EXPANDED:er,IS_LEAF:tr}=hc,wc=(e,t)=>({...e,columns:e.columns.concat(t)}),or=({availableColumns:e,config:t,containerRef:o,dataSource:n,headerHeight:r=25,onAvailableColumnsChange:l,onConfigChange:s,onFeatureEnabled:i,onFeatureInvocation:a,onRowClick:c,onSelectionChange:u,renderBufferSize:d=0,rowHeight:p=20,selectionModel:C})=>{let[v,h]=so(n.size);if(n===void 0)throw Error("no data source provided to Vuu Table");let[w,R]=so(),b=z(D=>{R(D)},[]),f=lo(()=>Be(n),[n]),T=z(D=>{h(D)},[]),{columns:x,dispatchColumnAction:m,headings:g,tableAttributes:P,tableConfig:M}=Bn(t,n.config);mc(()=>{m({type:"init",dataSourceConfig:n.config,tableConfig:M})},[M,n.config,m]);let[y,E]=so(),[H,A]=lo(()=>{let D=(L,k)=>{let G=vc(x,L,{width:k});E(G)};return[y!=null?y:x,D]},[x,y]),I=lo(()=>Cc(n.columns),[n.columns]),{getRowAtPosition:J,getRowOffset:Ne,setPctScrollTop:ze,...F}=je({columns:H,headerHeight:r,headings:g,rowCount:v,rowHeight:p,size:w}),q=In({from:0,to:F.rowCount}),O=z(({tableSchema:D})=>{D||console.log("usbscription message with no schema")},[]),{data:ae,range:Te,setRange:we}=zn({dataSource:n,onFeatureEnabled:i,onFeatureInvocation:a,renderBufferSize:d,onSizeChange:T,onSubscribed:O,range:q}),V=z(D=>{console.log("useTableNext handleConfigChanged",{tableConfig:D}),m({type:"init",tableConfig:D,dataSourceConfig:n.config}),s==null||s(D)},[n.config,m,s]),ee=z(D=>{console.log("config changed",{dataSourceConfig:D}),n.config={...n.config,...D}},[n]),lt=z(D=>{console.log("useTableNext handleCreateCalculatedColumn",{column:D}),n.columns=n.columns.concat(D.name);let L=wc(M,D);m({type:"init",tableConfig:L,dataSourceConfig:n.config}),s==null||s(L)},[n,m,s,M]);qn(()=>{n.on("config",(D,L)=>{m({type:"tableConfig",...D,confirmed:L})})},[n,m]);let{showColumnSettingsPanel:Ie,showTableSettingsPanel:Ve}=pc({availableColumns:e!=null?e:M.columns.map(({name:D,serverDataType:L="string"})=>({name:D,serverDataType:L})),onAvailableColumnsChange:l,onConfigChange:V,onCreateCalculatedColumn:lt,onDataSourceConfigChange:ee,tableConfig:M}),st=z(D=>{Gn(D)?Ie(D):Wn(D)?Ve():m(D)},[m,Ie,Ve]),it=Ue({dataSource:n,onPersistentColumnOperation:st}),$e=z((D,L=!1,k)=>{n&&(n.sort=fc(n.sort,D,L,k))},[n]),Fe=z((D,L,k)=>{let G=H.find(Q=>Q.name===L);if(G)D==="resize"?jn(k)&&A(L,k):D==="end"?jn(k)&&(m({type:"resizeColumn",phase:D,column:G,width:k}),s==null||s(to(M,{type:"col-size",column:G,width:k}))):(E(void 0),m({type:"resizeColumn",phase:D,column:G,width:k}));else throw Error(`useDataTable.handleColumnResize, column ${L} not found`)},[H,M,m,s,A]),at=z((D,L)=>{let k=gc(L,D),G=D[Tc];if(D[er]){if(n.closeTreeNode(G,!0),k){let Q=H.indexOf(L);n.getRowsAtDepth(Q+1).some(Y=>Y[er]||Y[tr])||m({type:"hideColumns",columns:H.slice(Q+2)})}}else if(n.openTreeNode(G),k){let Q=n.getChildRows(G),Me=H.indexOf(L)+1,Y=[H[Me]];Q.some(Ct=>Ct[tr])&&Y.push(H[Me+1]),Y.some(Ct=>Ct.hidden)&&m({type:"showColumns",columns:Y})}},[H,n,m]),{onVerticalScroll:De}=Zn({columns:H,getRowAtPosition:J,setRange:we,viewportMeasurements:F}),Oe=z(D=>{De(D)},[De]),{requestScroll:S,...K}=Yn({maxScrollLeft:F.maxScrollContainerScrollHorizontal,maxScrollTop:F.maxScrollContainerScrollVertical,rowHeight:p,onVerticalScroll:Oe,viewportRowCount:F.rowCount}),{navigate:$,onKeyDown:N,...W}=kn({columnCount:H.filter(D=>D.hidden!==!0).length,containerRef:o,requestScroll:S,rowCount:n==null?void 0:n.size,viewportRange:Te,viewportRowCount:F.rowCount}),{onKeyDown:X}=$n({navigate:$}),B=z(D=>{N(D),D.defaultPrevented||X(D)},[N,X]),te=Vn({columns:H,data:ae}),ct=z(D=>{var Y;let k=D.target.closest(".vuuTableNextHeaderCell"),G=parseInt((Y=k==null?void 0:k.dataset.index)!=null?Y:"-1"),Q=yc(H,G),Me=D.shiftKey;Q&&$e(Q,Me)},[H,$e]),ut=z(D=>{bc(D)?n.groupBy=[]:n&&n.groupBy.includes(D.name)&&(n.groupBy=n.groupBy.filter(L=>L!==D.name))},[n]),mt=z(D=>{n.select(D),u==null||u(D)},[n,u]),Ge=Ye({onSelectionChange:mt,selectionModel:C}),pt=z((D,L,k)=>{Ge(D,L,k),c==null||c(D)},[c,Ge]);qn(()=>{n.on("config",(D,L)=>{m({type:"tableConfig",...D,confirmed:L})})},[n,m]);let dt=z((D,L)=>{let k=H[D];m({type:"moveColumn",column:k,moveTo:L})},[H,m]),ft=z((D,L,k)=>n.applyEdit(D,L,k),[n]),{onMouseDown:lr,...sr}=dc({allowDragDrop:!0,containerRef:o,draggableClassName:"vuuTableNext",onDrop:dt,orientation:"horizontal",itemQuery:".vuuTableNextHeaderCell"});return{...W,onKeyDown:B,columnMap:I,columns:H,data:ae,handleContextMenuAction:it,headerProps:{onClick:ct,onMouseDown:lr,onResize:Fe},menuBuilder:f,onContextMenu:te,onDataEdited:ft,onRemoveGroupColumn:ut,onResize:b,onRowClick:pt,onToggleGroup:at,scrollProps:K,tableAttributes:P,viewportMeasurements:F,dragDropHook:sr}};import{MeasuredContainer as Hc,useId as Ec}from"@vuu-ui/vuu-layout";import{jsx as fe,jsxs as io}from"react/jsx-runtime";import{createElement as rr}from"react";var _="vuuTableNext",{IDX:Sc,RENDER_IDX:Ac}=Rc,Lc=({Row:e=Zt,availableColumns:t,className:o,config:n,dataSource:r,id:l,onAvailableColumnsChange:s,onConfigChange:i,onFeatureEnabled:a,onFeatureInvocation:c,onRowClick:u,onSelectionChange:d,onShowConfigEditor:p,renderBufferSize:C=0,rowHeight:v=20,selectionModel:h="extended",showColumnHeaders:w=!0,headerHeight:R=w?25:0,style:b,...f})=>{let T=Ec(l),x=Pc(null),{columnMap:m,columns:g,data:P,dragDropHook:M,handleContextMenuAction:y,headerProps:E,onDataEdited:H,onRemoveGroupColumn:A,onResize:I,onRowClick:J,onToggleGroup:Ne,menuBuilder:ze,scrollProps:F,tableAttributes:q,viewportMeasurements:O,...ae}=or({availableColumns:t,config:n,containerRef:x,dataSource:r,headerHeight:R,onAvailableColumnsChange:s,onConfigChange:i,onFeatureEnabled:a,onFeatureInvocation:c,onRowClick:u,onSelectionChange:d,renderBufferSize:C,rowHeight:v,selectionModel:h}),Te=()=>({...b,"--content-height":`${O.contentHeight}px`,"--horizontal-scrollbar-height":`${O.horizontalScrollbarHeight}px`,"--content-width":`${O.contentWidth}px`,"--pinned-width-left":`${O.pinnedWidthLeft}px`,"--pinned-width-right":`${O.pinnedWidthRight}px`,"--header-height":`${R}px`,"--row-height":`${v}px`,"--total-header-height":`${O.totalHeaderHeight}px`,"--vertical-scrollbar-width":`${O.verticalScrollbarWidth}px`,"--viewport-body-height":`${O.viewportBodyHeight}px`}),we=nr(_,o,{[`${_}-colLines`]:q.columnSeparators,[`${_}-rowLines`]:q.rowSeparators,[`${_}-zebra`]:q.zebraStripes});return fe(Dc,{menuActionHandler:y,menuBuilder:ze,children:io(Hc,{...f,className:we,onResize:I,ref:x,style:Te(),children:[fe("div",{className:`${_}-scrollbarContainer`,ref:F.scrollbarContainerRef,children:fe("div",{className:`${_}-scrollbarContent`})}),fe("div",{className:`${_}-contentContainer`,ref:F.contentContainerRef,children:io("div",{...ae,className:`${_}-table`,tabIndex:-1,children:[w?fe("div",{className:`${_}-col-headings`,children:io("div",{className:`${_}-col-headers`,role:"row",children:[g.filter(xc).map((V,ee)=>Mc(V)?rr(qe,{...E,column:V,"data-index":ee,key:V.name,onRemoveColumn:A}):rr(Rn,{...E,className:nr({"vuuDraggable-dragAway":ee===M.draggedItemIndex}),column:V,"data-index":ee,id:`${T}-col-${ee}`,key:V.name})),M.draggable]})}):null,fe("div",{className:`${_}-body`,children:P.map(V=>fe(e,{columnMap:m,columns:g,onClick:J,onDataEdited:H,row:V,offset:v*V[Sc]+R,onToggleGroup:Ne,zebraStripes:q.zebraStripes},V[Ac]))})]})})]})})};import{Dropdown as kc}from"@vuu-ui/vuu-ui-controls";import{isColumnTypeRenderer as Kc,isTypeDescriptor as Nc,registerComponent as zc}from"@vuu-ui/vuu-utils";import{useCallback as Ic,useState as Vc}from"react";import{jsx as Gc}from"react/jsx-runtime";var $c="vuuTableDropdownCell",Fc=["Enter"," "],Oc=({column:e,columnMap:t,row:o})=>{var a,c,u;let n=Nc(e.type)&&Kc((a=e.type)==null?void 0:a.renderer)?(u=(c=e.type)==null?void 0:c.renderer)==null?void 0:u.values:[],r=t[e.name],[l,s]=Vc(o[r]),i=Ic((d,p)=>{p&&s(p)},[]);return Gc(kc,{className:$c,onSelectionChange:i,openKeys:Fc,selected:l,source:n,width:e.width-17})};zc("dropdown-cell",Oc,"cell-renderer",{});import{registerComponent as Wc}from"@vuu-ui/vuu-utils";import{Input as Bc}from"@salt-ds/core";import{useEditableText as Uc}from"@vuu-ui/vuu-ui-controls";import _c from"classnames";import{jsx as ao}from"react/jsx-runtime";var rt="vuuTableInputCell",Jc=()=>(console.warn("onCommit handler has not been provided to InputCell cell renderer"),!0),Xc=({column:e,columnMap:t,onCommit:o=Jc,row:n})=>{let r=t[e.name],{align:l="left",clientSideEditValidationCheck:s,valueFormatter:i}=e,{warningMessage:a,...c}=Uc({initialValue:i(n[r]),onCommit:o,clientSideEditValidationCheck:s}),u=a&&l==="left"?ao("span",{className:`${rt}-icon`,"data-icon":"error"}):void 0,d=a&&l==="right"?ao("span",{className:`${rt}-icon`,"data-icon":"error"}):void 0;return ao(Bc,{...c,className:_c(rt,{[`${rt}-error`]:a!==void 0}),endAdornment:u,startAdornment:d})};Wc("input-cell",Xc,"cell-renderer",{});export{We as ColumnResizer,qe as GroupHeaderCellNext,pd as Table,Lc as TableNext,Be as buildContextMenuDescriptors,Tp as isShowColumnSettings,wp as isShowTableSettings,to as updateTableConfig,Zo as useMeasuredContainer,Ye as useSelection,Je as useTableColumnResize,Ue as useTableContextMenu,rn as useTableModel,je as useTableViewport};
|
|
1
|
+
import{useCallback as bt,useRef as cr}from"react";import{jsx as mr}from"react/jsx-runtime";var co=()=>{},ur="vuuColumnResizer",Be=({onDrag:e,onDragEnd:t=co,onDragStart:o=co})=>{let n=cr(0),r=bt(i=>{i.stopPropagation&&i.stopPropagation(),i.preventDefault&&i.preventDefault();let a=Math.round(i.clientX),c=a-n.current;n.current=a,c!==0&&e(i,c)},[e]),l=bt(i=>{window.removeEventListener("mouseup",l),window.removeEventListener("mousemove",r),t(i)},[t,r]),s=bt(i=>{o(i),n.current=Math.round(i.clientX),window.addEventListener("mouseup",l),window.addEventListener("mousemove",r),i.stopPropagation&&i.stopPropagation(),i.preventDefault&&i.preventDefault()},[o,r,l]);return mr("div",{className:ur,"data-align":"end",onMouseDown:s})};import{isNumericColumn as pr}from"@vuu-ui/vuu-utils";var Ue=e=>(t,o)=>{let n=[];if(e===void 0)return n;if(t==="header"||t==="column-menu")n.push(...dr(o,e)),n.push(...br(o,e)),n.push(...fr(o,e)),n.push(...Cr(o)),n.push({action:"column-settings",icon:"cog",label:"Column Settings",options:o}),n.push({action:"table-settings",icon:"cog",label:"DataGrid Settings",options:o});else if(t==="filter"){let{column:r,filter:l}=o,s=(l==null?void 0:l.column)===(r==null?void 0:r.name);n.push({label:"Edit filter",action:"filter-edit",options:o}),n.push({label:"Remove filter",action:"filter-remove-column",options:o}),r&&!s&&n.push({label:"Remove all filters",action:"remove-filters",options:o})}return n};function dr(e,{sort:{sortDefs:t}}){let{column:o}=e,n=[];if(o===void 0)return n;let r=t.length>0;return o.sorted==="A"?n.push({label:"Reverse Sort (DSC)",action:"sort-dsc",options:e}):o.sorted==="D"?n.push({label:"Reverse Sort (ASC)",action:"sort-asc",options:e}):typeof o.sorted=="number"?(o.sorted>0?n.push({label:"Reverse Sort (DSC)",action:"sort-add-dsc",options:e}):n.push({label:"Reverse Sort (ASC)",action:"sort-add-asc",options:e}),r&&Math.abs(o.sorted)<t.length&&n.push({label:"Remove from sort",action:"sort-remove",options:e}),n.push({label:"New Sort",children:[{label:"Ascending",action:"sort-asc",options:e},{label:"Descending",action:"sort-dsc",options:e}]})):r?(n.push({label:"Add to sort",children:[{label:"Ascending",action:"sort-add-asc",options:e},{label:"Descending",action:"sort-add-dsc",options:e}]}),n.push({label:"New Sort",children:[{label:"Ascending",action:"sort-asc",options:e},{label:"Descending",action:"sort-dsc",options:e}]})):n.push({label:"Sort",children:[{label:"Ascending",action:"sort-asc",options:e},{label:"Descending",action:"sort-dsc",options:e}]}),n}function fr(e,t){let{column:o}=e;if(o===void 0||t.groupBy.length===0)return[];let{name:n,label:r=n}=o;return[{label:`Aggregate ${r}`,children:[{label:"Count",action:"agg-count",options:e},{label:"Distinct",action:"agg-distinct",options:e}].concat(pr(o)?[{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 yt=(e,t)=>({label:`Pin ${t}`,action:`column-pin-${t}`,options:e}),gt=e=>yt(e,"left"),ht=e=>yt(e,"floating"),vt=e=>yt(e,"right");function Cr(e){let{column:t}=e;if(t===void 0)return[];let{pin:o}=t,n=[{label:"Hide column",action:"column-hide",options:e},{label:"Remove column",action:"column-remove",options:e}];return o===void 0?n.push({label:"Pin column",children:[gt(e),ht(e),vt(e)]}):o==="left"?n.push({label:"Unpin column",action:"column-unpin",options:e},{label:"Pin column",children:[ht(e),vt(e)]}):o==="right"?n.push({label:"Unpin column",action:"column-unpin",options:e},{label:"Pin column",children:[gt(e),ht(e)]}):o==="floating"&&n.push({label:"Unpin column",action:"column-unpin",options:e},{label:"Pin column",children:[gt(e),vt(e)]}),n}function br(e,{groupBy:t}){let{column:o}=e,n=[];if(o===void 0)return n;let{name:r,label:l=r}=o;return t.length===0?n.push({label:`Group by ${l}`,action:"group",options:e}):n.push({label:`Add ${l} to group by`,action:"group-add",options:e}),n}import{removeColumnFromFilter as gr}from"@vuu-ui/vuu-utils";import{addGroupColumn as uo,addSortColumn as mo,AggregationType as hr,setAggregations as be,setSortColumn as po}from"@vuu-ui/vuu-utils";var vr=(e,t)=>{if(e.filterStruct&&t){let[o,n]=gr(t,e.filterStruct);return{filter:n,filterStruct:o}}else return e},{Average:yr,Count:Tr,Distinct:wr,High:Dr,Low:Mr,Sum:Rr}=hr,_e=({dataSource:e,onPersistentColumnOperation:t})=>n=>{let r=n.options;if(r.column&&e){let{column:l}=r;switch(n.menuId){case"sort-asc":return e.sort=po(e.sort,l,"A"),!0;case"sort-dsc":return e.sort=po(e.sort,l,"D"),!0;case"sort-add-asc":return e.sort=mo(e.sort,l,"A"),!0;case"sort-add-dsc":return e.sort=mo(e.sort,l,"D"),!0;case"group":return e.groupBy=uo(e.groupBy,l),!0;case"group-add":return e.groupBy=uo(e.groupBy,l),!0;case"column-hide":return t({type:"hideColumns",columns:[l]}),!0;case"column-remove":return e.columns=e.columns.filter(s=>s!==l.name),!0;case"filter-remove-column":return e.filter=vr(e.filter,l),!0;case"remove-filters":return e.filter={filter:""},!0;case"agg-avg":return e.aggregations=be(e.aggregations,l,yr),!0;case"agg-high":return e.aggregations=be(e.aggregations,l,Dr),!0;case"agg-low":return e.aggregations=be(e.aggregations,l,Mr),!0;case"agg-count":return e.aggregations=be(e.aggregations,l,Tr),!0;case"agg-distinct":return e.aggregations=be(e.aggregations,l,wr),!0;case"agg-sum":return e.aggregations=be(e.aggregations,l,Rr),!0;case"column-pin-floating":return t({type:"pinColumn",column:l,pin:"floating"}),!0;case"column-pin-left":return t({type:"pinColumn",column:l,pin:"left"}),!0;case"column-pin-right":return t({type:"pinColumn",column:l,pin:"right"}),!0;case"column-unpin":return t({type:"pinColumn",column:l,pin:void 0}),!0;case"column-settings":return t({type:"columnSettings",column:l}),!0;case"table-settings":return t({type:"tableSettings"}),!0;default:}}return!1};import{ContextMenuProvider as Xs}from"@vuu-ui/vuu-popups";import{Button as Qs,useIdMemo as Ys}from"@salt-ds/core";import{buildColumnMap as cl,getColumnStyle as ul,isGroupColumn as ml,metadataKeys as pl,notHidden as dl,visibleColumnAtIndex as fl}from"@vuu-ui/vuu-utils";import{useCallback as Ko,useMemo as ko}from"react";import{isGroupColumn as go,isJsonColumn as Fr,isJsonGroup as Or,metadataKeys as Gr,notHidden as Wr,RowSelected as Br}from"@vuu-ui/vuu-utils";import Ur from"classnames";import{memo as _r,useCallback as ho}from"react";import{getColumnStyle as xr,metadataKeys as Pr}from"@vuu-ui/vuu-utils";import{EditableLabel as Hr}from"@vuu-ui/vuu-ui-controls";import Er from"classnames";import{memo as Sr,useCallback as Ar,useRef as Lr,useState as fo}from"react";import{jsx as Je}from"react/jsx-runtime";var{KEY:Co}=Pr,Tt=Sr(({className:e,column:t,columnMap:o,onClick:n,row:r})=>{let l=Lr(null),{align:s,CellRenderer:i,key:a,pin:c,editable:u,resizing:d,valueFormatter:m}=t,[b,y]=fo(!1),h=m(r[a]),[T,x]=fo(h),v=()=>{var P;(P=l.current)==null||P.focus()},C=P=>{P.key==="Enter"&&y(!0)},D=Ar(P=>{n==null||n(P,t)},[t,n]),w=()=>{y(!0)},p=(P="",g="",E=!0,S=!1)=>{var H;y(!1),S?x(P):g!==P&&x(g),E===!1&&((H=l.current)==null||H.focus())},f=Er(e,{vuuAlignRight:s==="right",vuuPinFloating:c==="floating",vuuPinLeft:c==="left",vuuPinRight:c==="right","vuuTableCell-resizing":d})||void 0,M=xr(t);return u?Je("div",{className:f,"data-editable":!0,role:"cell",style:M,onKeyDown:C,children:Je(Hr,{editing:b,value:T,onChange:x,onMouseDownCapture:v,onEnterEditMode:w,onExitEditMode:p,onKeyDown:C,ref:l,tabIndex:0},"title")}):Je("div",{className:f,role:"cell",style:M,onClick:D,children:i?Je(i,{column:t,columnMap:o,row:r}):h})},Kr);Tt.displayName="TableCell";function Kr(e,t){return e.column===t.column&&e.onClick===t.onClick&&e.row[Co]===t.row[Co]&&e.row[e.column.key]===t.row[t.column.key]}import{getColumnStyle as kr,getGroupValueAndOffset as Nr,metadataKeys as zr}from"@vuu-ui/vuu-utils";import{useCallback as Ir}from"react";import{jsx as wt,jsxs as $r}from"react/jsx-runtime";var{IS_LEAF:Vr}=zr,bo=({column:e,onClick:t,row:o})=>{let{columns:n}=e,[r,l]=Nr(n,o),s=Ir(u=>{t==null||t(u,e)},[e,t]),i=kr(e),a=o[Vr],c=Array(l).fill(0).map((u,d)=>wt("span",{className:"vuuTableGroupCell-spacer"},d));return $r("div",{className:"vuuTableGroupCell vuuPinLeft",onClick:a?void 0:s,role:"cell",style:i,children:[c,a?null:wt("span",{className:"vuuTableGroupCell-toggle","data-icon":"triangle-right"}),wt("span",{children:r})]})};import{jsx as yo,jsxs as jr}from"react/jsx-runtime";var{IDX:Jr,IS_EXPANDED:Xr,SELECTED:Qr}=Gr,{True:vo,First:Yr,Last:Zr}=Br,ge="vuuTableRow",To=_r(function({columnMap:t,columns:o,offset:n,onClick:r,onToggleGroup:l,virtualColSpan:s=0,row:i}){let{[Jr]:a,[Xr]:c,[Qr]:u}=i,d=Ur(ge,{[`${ge}-even`]:a%2===0,[`${ge}-expanded`]:c,[`${ge}-selected`]:u&vo,[`${ge}-selectedStart`]:u&Yr,[`${ge}-selectedEnd`]:u&Zr}),m=ho(y=>{let h=y.shiftKey,T=y.ctrlKey||y.metaKey;r==null||r(i,h,T)},[r,i]),b=ho((y,h)=>{(go(h)||Or(h,i))&&(y.stopPropagation(),l==null||l(i,h))},[l,i]);return jr("div",{"aria-selected":u&vo?!0:void 0,"aria-rowindex":a,className:d,onClick:m,role:"row",style:{transform:`translate3d(0px, ${n}px, 0px)`},children:[s>0?yo("div",{role:"cell",style:{width:s}}):null,o.filter(Wr).map(y=>{let h=go(y),T=Fr(y);return yo(h?bo:Tt,{column:y,columnMap:t,onClick:h||T?b:void 0,row:i},y.name)})]})});import Mo from"classnames";import{useRef as qr}from"react";import{useCallback as Dt,useRef as wo}from"react";var Xe=({column:e,onResize:t,rootRef:o})=>{let n=wo(0),r=wo(!1),{name:l}=e,s=Dt(()=>{if(t&&o.current){console.log("handleResizeStart");let{width:c}=o.current.getBoundingClientRect();n.current=Math.round(c),r.current=!0,t==null||t("begin",l)}},[l,t,o]),i=Dt((c,u)=>{if(o.current&&t){let{width:d}=o.current.getBoundingClientRect(),m=Math.round(d)+u;m!==n.current&&m>0&&(t("resize",l,m),n.current=m)}},[l,t,o]),a=Dt(()=>{t&&(t("end",l,n.current),setTimeout(()=>{r.current=!1},100))},[l,t]);return{isResizing:r.current,onDrag:i,onDragStart:s,onDragEnd:a}};import{jsx as ue,jsxs as xo}from"react/jsx-runtime";var oe="vuuTable-groupHeaderCell",Do=({column:e,onClick:t,...o})=>ue("span",{...o,className:`${oe}-close`,"data-icon":"close-circle",onClick:()=>t==null?void 0:t(e)}),el=e=>{let{children:t,column:o,className:n}=e;return xo("div",{className:Mo(`${oe}-col`,n),role:"columnheader",children:[ue("span",{className:`${oe}-label`,children:o.name}),t]})},Ro=({column:e,className:t,onRemoveColumn:o,onResize:n,...r})=>{let l=qr(null),{isResizing:s,...i}=Xe({column:e,onResize:n,rootRef:l}),a=Mo(oe,t,{vuuPinLeft:e.pin==="left",[`${oe}-right`]:e.align==="right",[`${oe}-resizing`]:e.resizing,[`${oe}-pending`]:e.groupConfirmed===!1}),{columns:c}=e;return ue("div",{className:a,ref:l,...r,children:xo("div",{className:`${oe}-inner`,children:[c.map(u=>ue(el,{column:u,children:c.length>1?ue(Do,{column:u,onClick:o}):null},u.key)),ue(Do,{"data-align":"end",onClick:o}),e.resizeable!==!1?ue(Be,{...i}):null]})})};import sl from"classnames";import{useCallback as Mt,useRef as Ao}from"react";import Po from"classnames";import{jsx as Qe,jsxs as tl}from"react/jsx-runtime";var Ho="vuuSortIndicator",Eo=({sorted:e})=>{if(!e)return null;let t=typeof e=="number"?e<0?"dsc":"asc":e==="A"?"asc":"dsc";return typeof e=="number"?tl("div",{className:Po(Ho,"multi-col",t),children:[Qe("span",{"data-icon":`sorted-${t}`}),Qe("span",{className:"vuuSortPosition",children:Math.abs(e)})]}):Qe("div",{className:Po(Ho,"single-col"),children:Qe("span",{"data-icon":`sorted-${t}`})})};import{useContextMenu as il}from"@vuu-ui/vuu-popups";import{useContextMenu as ol}from"@vuu-ui/vuu-popups";import nl from"classnames";import{useCallback as rl}from"react";import{jsx as ll}from"react/jsx-runtime";var So=({column:e,filter:t})=>{let[o]=ol(),n=rl(r=>{r.stopPropagation(),o(r,"filter",{column:e,filter:t})},[e,t,o]);return e.filter?ll("div",{className:nl("vuuFilterIndicator"),"data-icon":"filter",onClick:n}):null};import{jsx as Se,jsxs as al}from"react/jsx-runtime";var Ee="vuuTable-headerCell",Lo=({column:e,className:t,onClick:o,onDragStart:n,onResize:r,...l})=>{let s=Ao(null),{isResizing:i,...a}=Xe({column:e,onResize:r,rootRef:s}),[c]=il(),u=Ao(null),d=T=>{c(T,"header",{column:e})},m=Mt(T=>!i&&(o==null?void 0:o(T)),[i,o]),b=Mt(T=>{u.current=window.setTimeout(()=>{n==null||n(T),u.current=null},500)},[n]),y=Mt(()=>{u.current!==null&&(window.clearTimeout(u.current),u.current=null)},[]),h=sl(Ee,t,{vuuPinFloating:e.pin==="floating",vuuPinLeft:e.pin==="left",vuuPinRight:e.pin==="right",vuuEndPin:e.endPin,[`${Ee}-resizing`]:e.resizing,[`${Ee}-right`]:e.align==="right"});return Se("div",{className:h,...l,onClick:m,onContextMenu:d,onMouseDown:b,onMouseUp:y,ref:s,children:al("div",{className:`${Ee}-inner`,children:[Se(So,{column:e}),Se("div",{className:`${Ee}-label`,children:e.label}),Se(Eo,{sorted:e.sorted}),e.resizeable!==!1?Se(Be,{...a}):null]})})};import{jsx as me,jsxs as No}from"react/jsx-runtime";var Rt="vuuTable",{RENDER_IDX:Cl}=pl,zo=({columns:e,columnsWithinViewport:t,data:o,getRowOffset:n,headings:r,onColumnResize:l,onHeaderCellDragStart:s,onContextMenu:i,onRemoveColumnFromGroupBy:a,onRowClick:c,onSort:u,onToggleGroup:d,tableId:m,virtualColSpan:b=0,rowCount:y})=>{let h=Ko(C=>{s==null||s(C)},[s]),T=ko(()=>e.filter(dl),[e]),x=ko(()=>cl(e),[e]),v=Ko(C=>{var P;let w=C.target.closest(".vuuTable-headerCell"),p=parseInt((P=w==null?void 0:w.dataset.idx)!=null?P:"-1"),f=fl(e,p),M=C.shiftKey;f&&u(f,M)},[e,u]);return No("div",{"aria-rowcount":y,className:`${Rt}-table`,role:"table",children:[No("div",{className:`${Rt}-headers`,role:"rowGroup",children:[r.map((C,D)=>me("div",{className:"vuuTable-heading",children:C.map(({label:w,width:p},f)=>me("div",{className:"vuuTable-headingCell",style:{width:p},children:w},f))},D)),me("div",{role:"row",children:T.map((C,D)=>{let w=ul(C);return ml(C)?me(Ro,{column:C,"data-idx":D,onRemoveColumn:a,onResize:l,role:"columnHeader",style:w},D):me(Lo,{column:C,"data-idx":D,id:`${m}-${D}`,onClick:v,onDragStart:h,onResize:l,role:"columnHeader",style:w},D)})})]}),me("div",{className:`${Rt}-body`,onContextMenu:i,role:"rowGroup",children:o==null?void 0:o.map(C=>me(To,{columnMap:x,columns:t,offset:n(C),onClick:c,virtualColSpan:b,onToggleGroup:d,row:C},C[Cl]))})]})};import{useContextMenu as Vs}from"@vuu-ui/vuu-popups";import{applySort as $s,buildColumnMap as Fs,isJsonGroup as Os,metadataKeys as Gs,moveItemDeprecated as Ws}from"@vuu-ui/vuu-utils";import{useCallback as U,useEffect as fn,useMemo as Bs,useRef as $t,useState as Us}from"react";import{isVuuFeatureAction as bl,isVuuFeatureInvocation as gl}from"@vuu-ui/vuu-data-react";import{getFullRange as xt,metadataKeys as hl,WindowRange as vl}from"@vuu-ui/vuu-utils";import{useCallback as he,useEffect as Ye,useMemo as yl,useRef as Ae,useState as Tl}from"react";var{SELECTED:Le}=hl;function Io({dataSource:e,onConfigChange:t,onFeatureEnabled:o,onFeatureInvocation:n,onSizeChange:r,onSubscribed:l,range:s={from:0,to:0},renderBufferSize:i=0,viewportRowCount:a}){let[,c]=Tl(null),u=Ae(!0),d=Ae(!1),m=Ae({from:0,to:0}),b=Ae(null),y=Ae([]),h=yl(()=>new Pt(xt(s)),[]),T=he(p=>{for(let f of p)h.add(f);y.current=h.data,d.current=!0},[h]),x=he(p=>{p.type==="subscribed"?l==null||l(p):p.type==="viewport-update"?(typeof p.size=="number"&&(r==null||r(p.size),h.setRowCount(p.size)),p.rows?T(p.rows):typeof p.size=="number"&&(y.current=h.data,d.current=!0)):bl(p)?o==null||o(p):gl(p)?n==null||n(p):console.log(`useDataSource unexpected message ${p.type}`)},[h,o,n,r,l,T]);Ye(()=>()=>{b.current&&(cancelAnimationFrame(b.current),b.current=null),u.current=!1},[]);let v=he(()=>{u.current&&(d.current&&(c({}),d.current=!1),b.current=requestAnimationFrame(v))},[c]);Ye(()=>{b.current=requestAnimationFrame(v)},[v]);let C=he(p=>{let{from:f}=e.range,M={from:f,to:f+p},P=xt(M,i);h.setRange(P),e.range=m.current=P,e.emit("range",M)},[e,h,i]),D=he(p=>{let f=xt(p,i);h.setRange(f),e.range=m.current=f,e.emit("range",p)},[e,h,i]),w=he(()=>h.getSelectedRows(),[h]);return Ye(()=>{e==null||e.subscribe({range:m.current},x)},[e,x,t]),Ye(()=>{console.log(`adjust range as rowCount chnaged ${a}`),C(a)},[C,a]),{data:y.current,getSelectedRows:w,range:m.current,setRange:D,dataSource:e}}var Pt=class{constructor({from:t,to:o}){this.rowCount=0;this.setRowCount=t=>{t<this.data.length&&(this.data.length=t),this.rowCount=t};this.range=new vl(t,o),this.data=new Array(o-t),this.rowCount=0}add(t){var n;let[o]=t;if(this.isWithinRange(o)){let r=o-this.range.from;this.data[r]=t;let l=t[Le],s=(n=this.data[r-1])==null?void 0:n[Le];s===0&&l?this.data[r-1][Le]=2:s===2&&!l&&(this.data[r-1][Le]=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:o}){if(t!==this.range.from||o!==this.range.to){let[n,r]=this.range.overlap(t,o),l=new Array(Math.max(0,o-t));for(let s=n;s<r;s++){let i=this.getAtIndex(s);if(i){let a=s-t;l[a]=i}}this.data=l,this.range.from=t,this.range.to=o}}getSelectedRows(){return this.data.filter(t=>t[Le]!==0)}};import{useDragDropNext as wl}from"@vuu-ui/vuu-ui-controls";import{useCallback as Vo,useRef as $o}from"react";var Fo=({onDrop:e})=>{let t=$o(),o=$o(null),n=Vo(()=>{console.log("handleDropSettle"),t.current=void 0,o.current=null},[]),{draggable:r,draggedItemIndex:l,onMouseDown:s}=wl({allowDragDrop:!0,draggableClassName:"vuuTable-headerCell",orientation:"horizontal",containerRef:o,itemQuery:".vuuTable-headerCell",onDrop:e,onDropSettle:n}),i=Vo(a=>{let{clientX:c,clientY:u}=a;console.log("useDraggableColumn handleHeaderCellDragStart means mouseDown fired on a column in RowBasedTable");let m=a.target.closest(".vuuTable-headerCell");o.current=m==null?void 0:m.closest("[role='row']");let{dataset:{idx:b="-1"}}=m;t.current={clientX:c,clientY:u,idx:b},s==null||s(a)},[s]);return{draggable:r,draggedItemIndex:l,onHeaderCellDragStart:i}};import{withinRange as El}from"@vuu-ui/vuu-utils";import{useCallback as q,useEffect as Sl,useLayoutEffect as Al,useMemo as Ll,useRef as zt}from"react";function Dl(e,...t){let o=new Set(e);for(let n of t)for(let r of n)o.add(r);return o}var Ht="ArrowUp",Et="ArrowDown",St="ArrowLeft",At="ArrowRight";var Lt="Home",Kt="End",kt="PageUp",Nt="PageDown";var Ml=new Set(["Enter","Delete"," "]),Rl=new Set(["Tab"]),xl=new Set(["ArrowRight","ArrowLeft"]),Oo=new Set([Lt,Kt,kt,Nt,Et,St,At,Ht]),Pl=new Set(["F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12"]),jm=Dl(Ml,Oo,xl,Pl,Rl);var Hl=["Home","End","PageUp","PageDown"],Go=e=>Hl.includes(e),Wo=e=>Oo.has(e);var Bo=e=>`.vuuTable-headers .vuuTable-headerCell:nth-child(${e+1})`,Kl=(e,t)=>`.vuuTable-body > [aria-rowindex='${e}'] > [role='cell']:nth-child(${t+1})`,kl=[-1,-1];function Nl(e,[t,o],n,r){return e===Ht?t>-1?[t-1,o]:[t,o]:e===Et?t===-1?[0,o]:t===r-1?[t,o]:[t+1,o]:e===At?o<n-1?[t,o+1]:[t,o]:e===St?o>0?[t,o-1]:[t,o]:[t,o]}var Uo=({columnCount:e=0,containerRef:t,disableHighlightOnFocus:o,data:n,requestScroll:r,rowCount:l=0,viewportRange:s})=>{var P;let{from:i,to:a}=s,c=zt([-1,-1]),u=zt(),d=zt([-1,0]),m=q(([g,E])=>{var H;let S=g===-1?Bo(E):Kl(g,E);return(H=t.current)==null?void 0:H.querySelector(S)},[t]),b=g=>g==null?void 0:g.closest("[role='columnHeader'],[role='cell']"),y=g=>{var E,S;if(g.role==="columnHeader")return[-1,parseInt((E=g.dataset.idx)!=null?E:"-1",10)];{let H=g.closest("[role='row']");if(H){let N=parseInt((S=H.ariaRowIndex)!=null?S:"-1",10),J=Array.from(H.childNodes).indexOf(g);return[N,J]}}return kl},h=q(g=>{var E;if(t.current){let S=m(g);S?(S!==u.current&&((E=u.current)==null||E.setAttribute("tabindex",""),u.current=S,S.setAttribute("tabindex","0")),S.focus()):El(g[0],s)||(u.current=void 0,r==null||r({type:"scroll-page",direction:"up"}))}},[t,m,r,s]),T=q((g,E,S=!1)=>{let H=[g,E];d.current=H,h(H),S&&(c.current=H)},[h]),x=q(()=>{var g;(g=u.current)==null||g.setAttribute("tabindex",""),u.current=void 0},[]),v=q(async(g,E)=>{switch(g){case Nt:r==null||r({type:"scroll-page",direction:"down"});break;case kt:r==null||r({type:"scroll-page",direction:"up"});break;case Lt:r==null||r({type:"scroll-end",direction:"home"});break;case Kt:r==null||r({type:"scroll-end",direction:"end"});break}return E},[r]),C=q(()=>{var g;if(o!==!0&&(g=t.current)!=null&&g.contains(document.activeElement)){let E=b(document.activeElement);E&&(c.current=y(E))}},[o,t]),D=q(async g=>{let[E,S]=Go(g)?await v(g,d.current):Nl(g,d.current,e,l),[H,N]=d.current;(E!==H||S!==N)&&T(E,S,!0)},[e,v,l,T]),w=q(g=>{n.length>0&&Wo(g.key)&&(g.preventDefault(),g.stopPropagation(),D(g.key))},[n,D]),p=q(g=>{let E=g.target,S=b(E);if(S){let[H,N]=y(S);T(H,N)}},[T]),f=Ll(()=>({onClick:p,onFocus:C,onKeyDown:w}),[p,C,w]);Al(()=>{let{current:g}=d,E=g[0]>=i&&g[0]<=a;u.current&&!E?x():!u.current&&E&&h(g)},[h,i,a,x]);let M=((P=t.current)==null?void 0:P.firstChild)!=null;return Sl(()=>{var g;if(M&&u.current===void 0){let E=(g=t.current)==null?void 0:g.querySelector(Bo(0));E&&(E.setAttribute("tabindex","0"),u.current=E)}},[t,M]),f};import{isValidNumber as ne}from"@vuu-ui/vuu-utils";import{useCallback as Vl,useMemo as $l,useRef as Fl,useState as Ol}from"react";import{useCallback as zl,useEffect as _o,useRef as Il}from"react";var pe=new Map,Xo=(e,t,o)=>{switch(o){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}},Jo=new ResizeObserver(e=>{for(let t of e){let{target:o,borderBoxSize:n,contentBoxSize:r}=t,l=pe.get(o);if(l){let[{blockSize:s,inlineSize:i}]=n,[{blockSize:a,inlineSize:c}]=r,{onResize:u,measurements:d}=l,m=!1;for(let[b,y]of Object.entries(d)){let h=Xo(o,{height:s,width:i,contentHeight:a,contentWidth:c},b);h!==y&&(m=!0,d[b]=h)}m&&u&&u(d)}}});function Qo(e,t,o,n=!1){let r=Il(t),l=zl(s=>{let{width:i,height:a}=s.getBoundingClientRect(),{clientWidth:c,clientHeight:u}=s;return r.current.reduce((d,m)=>(d[m]=Xo(s,{width:i,height:a,contentHeight:u,contentWidth:c},m),d),{})},[]);_o(()=>{let s=e.current;async function i(){pe.set(s,{measurements:{}}),await document.fonts.ready;let a=pe.get(s);if(a){let c=l(s);a.measurements=c,Jo.observe(s),n&&o(c)}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(pe.has(s))throw Error("useResizeObserver attemping to observe same element twice");i()}return()=>{s&&pe.has(s)&&(Jo.unobserve(s),pe.delete(s))}},[l,e]),_o(()=>{let s=e.current,i=pe.get(s);if(i){if(r.current!==t){r.current=t;let a=l(s);i.measurements=a}i.onResize=o}},[t,l,e,o])}var Gl=["clientHeight","clientWidth"],Yo=e=>Number.isFinite(e),Wl={height:"100%",width:"100%"},Bl=(e,t)=>ne(e)&&ne(t)?{height:`${e}px`,width:`${t}px`}:Wl,Ul=(e,t)=>{if(ne(e)&&ne(t))return{height:e,width:t}},Zo=({defaultHeight:e=0,defaultWidth:t=0,height:o,width:n})=>{let r=Fl(null),[l,s]=Ol({css:Bl(o,n),inner:Ul(o,n),outer:{height:o!=null?o:"100%",width:n!=null?n:"100%"}});$l(()=>{s(a=>{let{inner:c,outer:u}=a;if(ne(o)&&ne(n)&&c&&u){let{height:d,width:m}=c,{height:b,width:y}=u;if(b!==o||y!==n){let h=ne(b)?b-d:0,T=ne(y)?y-m:0;return{...a,outer:{height:o,width:n},inner:{height:o-h,width:n-T}}}}return a})},[o,n]);let i=Vl(({clientWidth:a,clientHeight:c})=>{s(u=>{let{css:d,inner:m,outer:b}=u;return Yo(c)&&Yo(a)&&(a!==(m==null?void 0:m.width)||c!==(m==null?void 0:m.height))?{css:d,outer:b,inner:{width:Math.floor(a)||t,height:Math.floor(c)||e}}:u})},[e,t]);return Qo(r,Gl,i,!0),{containerRef:r,cssSize:l.css,outerSize:l.outer,innerSize:l.inner}};import{deselectItem as _l,isRowSelected as Jl,metadataKeys as Xl,selectItem as Ql}from"@vuu-ui/vuu-utils";import{useCallback as Yl,useRef as jo}from"react";var{IDX:Zl}=Xl,jl=[],Ze=({selectionModel:e,onSelect:t,onSelectionChange:o})=>{let n=jo(-1),r=jo(jl);return Yl((s,i,a)=>{let{[Zl]:c}=s,{current:u}=n,{current:d}=r,b=(Jl(s)?_l:Ql)(e,d,c,i,a,u);r.current=b,n.current=c,t==null||t(s),o==null||o(b)},[t,o,e])};import{applyFilterToColumns as ql,applyGroupByToColumns as es,applySortToColumns as ts,findColumn as os,getCellRenderer as ns,getColumnName as rs,getTableHeadings as ls,getValueFormatter as ss,isFilteredColumn as is,isGroupColumn as as,isPinned as cs,isTypeDescriptor as us,metadataKeys as ms,updateColumn as qo,sortPinnedColumns as en,stripFilterFromColumns as ps,moveItemDeprecated as ds,getDefaultAlignment as tn}from"@vuu-ui/vuu-utils";import{useReducer as fs}from"react";var Cs=100,on=ms.count,bs=({serverDataType:e})=>e===void 0,gs=e=>{var t;if(us(e.type))return ns((t=e.type)==null?void 0:t.renderer)},nn=(e,t)=>{if(e.serverDataType)return e.serverDataType;if(t){let o=t.columns.find(n=>n.name===e.name);if(o)return o.serverDataType}return"string"},Mp=e=>e.type==="columnSettings",Rp=e=>e.type==="tableSettings",hs=(e,t)=>{switch(t.type){case"init":return ln(t);case"moveColumn":return ys(e,t);case"resizeColumn":return Ds(e,t);case"setTableSchema":return Ms(e,t);case"hideColumns":return Ts(e,t);case"showColumns":return ws(e,t);case"pinColumn":return Rs(e,t);case"updateColumnProp":return ve(e,t);case"tableConfig":return sn(e,t);default:return console.log(`unhandled action ${t.type}`),e}},rn=(e,t)=>{let[o,n]=fs(hs,{tableConfig:e,dataSourceConfig:t},ln);return{columns:o.columns,dispatchColumnAction:n,headings:o.headings}};function ln({dataSourceConfig:e,tableConfig:t}){let o=t.columns.map(It(t)),n=o.some(cs)?en(o):o,r={columns:n,headings:ls(n)};if(e){let{columns:l,...s}=e;return sn(r,{type:"tableConfig",...s})}else return r}var vs=(e,t)=>t==="uppercase"?e.toUpperCase():t==="capitalize"?e[0].toUpperCase()+e.slice(1).toLowerCase():e,It=e=>(t,o)=>{let n=nn(t,e.tableSchema),{columnDefaultWidth:r=Cs,columnFormatHeader:l}=e,{align:s=tn(n),key:i,name:a,label:c=a,width:u=r,...d}=t,m={...d,align:s,CellRenderer:gs(t),label:vs(c,l),key:i!=null?i:o+on,name:a,originalIdx:o,serverDataType:n,valueFormatter:ss(t),width:u};return as(m)&&(m.columns=m.columns.map(b=>It(e)(b,b.key))),m};function ys(e,{column:t,moveBy:o,moveTo:n}){let{columns:r}=e;if(typeof o=="number"){let l=r.indexOf(t),s=r.slice(),[i]=s.splice(l,1);return s.splice(l+o,0,i),{...e,columns:s}}else if(typeof n=="number")return{...e,columns:ds(r,t,n)};return e}function Ts(e,{columns:t}){return t.some(o=>o.hidden!==!0)?t.reduce((o,n)=>n.hidden!==!0?ve(o,{type:"updateColumnProp",column:n,hidden:!0}):o,e):e}function ws(e,{columns:t}){return t.some(o=>o.hidden)?t.reduce((o,n)=>n.hidden?ve(o,{type:"updateColumnProp",column:n,hidden:!1}):o,e):e}function Ds(e,{column:t,phase:o,width:n}){let r="updateColumnProp",l=o!=="end";switch(o){case"begin":return ve(e,{type:r,column:t,resizing:l});case"end":return ve(e,{type:r,column:t,resizing:l,width:n});case"resize":return ve(e,{type:r,column:t,width:n});default:throw Error(`useTableModel.resizeColumn, invalid resizePhase ${o}`)}}function Ms(e,{tableSchema:t}){let{columns:o}=e;if(o.some(bs)){let n=o.map(r=>{var s;let l=nn(r,t);return{...r,align:(s=r.align)!=null?s:tn(l),serverDataType:l}});return{...e,columns:n,tableSchema:t}}else return{...e,tableSchema:t}}function Rs(e,t){let{columns:o}=e,{column:n,pin:r}=t;return o=qo(o,n.name,{pin:r}),o=en(o),console.log({withPins:o}),{...e,columns:o}}function ve(e,t){let{columns:o}=e,{align:n,column:r,hidden:l,label:s,resizing:i,width:a}=t,c={};return(n==="left"||n==="right")&&(c.align=n),typeof s=="string"&&(c.label=s),typeof i=="boolean"&&(c.resizing=i),typeof l=="boolean"&&(c.hidden=l),typeof a=="number"&&(c.width=a),o=qo(o,r.name,c),{...e,columns:o}}function sn(e,{columns:t,confirmed:o,filter:n,groupBy:r,sort:l}){let s=t&&t.length>0,i=r!==void 0,a=typeof(n==null?void 0:n.filter)=="string",c=l&&l.sortDefs.length>0,u=e;return s&&(u={...e,columns:t.map((d,m)=>{let b=rs(d),y=m+on,h=os(u.columns,b);return h?h.key===y?h:{...h,key:y}:It(e)({name:d},m)})}),i&&(u={...e,columns:es(u.columns,r,o)}),c&&(u={...e,columns:ts(u.columns,l)}),a?u={...e,columns:ql(u.columns,n)}:u.columns.some(is)&&(u={...e,columns:ps(u.columns)}),u}import{useCallback as re,useRef as Ke}from"react";var an=e=>{let{scrollLeft:t,scrollTop:o}=e,{clientHeight:n,clientWidth:r,scrollHeight:l,scrollWidth:s}=e,i=t/(s-r),a=o/(l-n);return[i,a]},xs=e=>{let{clientHeight:t,clientWidth:o,scrollHeight:n,scrollWidth:r}=e;return[r-o,n-t]},cn=({onAttach:e,onDetach:t})=>{let o=Ke(null);return re(r=>{if(r)o.current=r,e==null||e(r);else if(o.current){let{current:l}=o;o.current=r,t==null||t(l)}},[e,t])},un=({onHorizontalScroll:e,onVerticalScroll:t,viewport:o})=>{let n=Ke(!1),r=Ke({scrollTop:0,scrollLeft:0}),l=Ke(null),s=Ke(null),{maxScrollContainerScrollHorizontal:i,maxScrollContainerScrollVertical:a}=o,c=re(()=>{let{current:v}=s,{current:C}=l,{current:D}=n;if(D)n.current=!1;else if(v&&C){let[w,p]=an(C),[f,M]=xs(v),P=Math.round(w*f),g=Math.round(p*M);console.log(`pctScrollTop ${p}, maxScrollTop ${M} rootScrollTop ${g}`),v.scrollTo({left:P,top:g,behavior:"auto"})}},[]),u=re(()=>{let{current:v}=s,{current:C}=l,{current:D}=r;if(v&&C){let{scrollLeft:w,scrollTop:p}=v,[f,M]=an(v);n.current=!0,C.scrollLeft=Math.round(f*i),C.scrollTop=Math.round(M*a),D.scrollTop!==p&&(D.scrollTop=p,t==null||t(p,M)),D.scrollLeft!==w&&(D.scrollLeft=w,e==null||e(w))}},[i,a,e,t]),d=re(v=>{l.current=v,v.addEventListener("scroll",c,{passive:!0})},[c]),m=re(v=>{l.current=null,v.removeEventListener("scroll",c)},[c]),b=re(v=>{s.current=v,v.addEventListener("scroll",u,{passive:!0})},[u]),y=re(v=>{s.current=null,v.removeEventListener("scroll",u)},[u]),h=cn({onAttach:b,onDetach:y}),T=cn({onAttach:d,onDetach:m}),x=re(v=>{let{current:C}=s;if(C){if(n.current=!1,v.type==="scroll-page"){let{clientHeight:D,scrollLeft:w,scrollTop:p}=C,{direction:f}=v,M=f==="down"?D:-D,P=Math.min(Math.max(0,p+M),a);C.scrollTo({top:P,left:w,behavior:"auto"})}else if(v.type==="scroll-end"){let{direction:D}=v,w=D==="end"?a:0;C.scrollTo({top:w,left:C.scrollLeft,behavior:"auto"})}}},[a]);return{scrollbarContainerRef:T,contentContainerRef:h,requestScroll:x}};import{useCallback as Ps,useMemo as je,useRef as Hs}from"react";import{actualRowPositioning as Es,virtualRowPositioning as Ss}from"@vuu-ui/vuu-utils";var As=15e5,Ls={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},Ks=e=>{let t=0,o=0,n=0;for(let r of e){let{hidden:l,pin:s,width:i}=r,a=l?0:i;s==="left"?t+=a:s==="right"?o+=a:n+=a}return{pinnedWidthLeft:t+4,pinnedWidthRight:o+4,unpinnedWidth:n}},qe=({columns:e,headerHeight:t,headings:o,rowCount:n,rowHeight:r,size:l})=>{let s=Hs(0),a=Math.min(n,As)*r,u=n*r-a,{pinnedWidthLeft:d,pinnedWidthRight:m,unpinnedWidth:b}=je(()=>Ks(e),[e]),[y,h]=je(()=>Es(r),[r]),[T,x]=je(()=>u?Ss(r,u,s):[y,h],[h,y,u,r]),v=Ps(C=>{s.current=C},[]);return je(()=>{var C;if(l){let D=o.length,w=15,p=d+b+m,f=p>l.width?w:0,M=t*(1+D),P=a-(((C=l==null?void 0:l.height)!=null?C:0)-f)+M,g=p-l.width+d,E=(l.height-t)/r,S=Number.isInteger(E)?E+1:Math.ceil(E),H=l.height-M,N=a>H?w:0;return{contentHeight:a,getRowAtPosition:x,getRowOffset:T,horizontalScrollbarHeight:f,maxScrollContainerScrollHorizontal:g,maxScrollContainerScrollVertical:P,pinnedWidthLeft:d,pinnedWidthRight:m,rowCount:S,contentWidth:p,setPctScrollTop:v,totalHeaderHeight:M,verticalScrollbarWidth:N,viewportBodyHeight:H}}else return Ls},[l,o.length,d,b,m,a,t,r,x,T,v])};import{getColumnsInViewport as mn,itemsChanged as ks}from"@vuu-ui/vuu-utils";import{useCallback as pn,useEffect as Ns,useMemo as zs,useRef as Vt,useState as Is}from"react";var dn=({columns:e,getRowAtPosition:t,setRange:o,viewportMeasurements:n})=>{let r=Vt(-1),{rowCount:l,contentWidth:s,maxScrollContainerScrollHorizontal:i}=n,a=s-i,c=Vt(0),[u,d]=zs(()=>mn(e,c.current,c.current+a),[a,e]),m=Vt(d);Ns(()=>{y(u)},[u]);let[b,y]=Is(u),h=pn(x=>{c.current=x;let[v,C]=mn(e,x,x+a);ks(b,v)&&(m.current=C,y(v))},[a,e,b]),T=pn(x=>{let v=t(x);v!==r.current&&(r.current=v,console.log("setRange from handleVerticalScroll"),o({from:v,to:v+l}))},[t,o,l]);return{columnsWithinViewport:b,onHorizontalScroll:h,onVerticalScroll:T,virtualColSpan:m.current}};var _s=[],{KEY:Js,IS_EXPANDED:Cn,IS_LEAF:bn}=Gs,gn=({config:e,dataSource:t,headerHeight:o,onConfigChange:n,onFeatureEnabled:r,onFeatureInvocation:l,onSelectionChange:s,renderBufferSize:i=0,rowHeight:a,selectionModel:c,...u})=>{var Ge,Pe;let[d,m]=Us(t.size),b=$t(!1),y=$t();if(y.current=t,t===void 0)throw Error("no data source provided to Vuu Table");let h=Zo(u),T=U(A=>{m(A)},[]),{columns:x,dispatchColumnAction:v,headings:C}=rn(e,t.config),{getRowAtPosition:D,getRowOffset:w,setPctScrollTop:p,...f}=qe({columns:x,headerHeight:o,headings:C,rowCount:d,rowHeight:a,size:h.innerSize}),M=U(({tableSchema:A})=>{A?(b.current=!0,v({type:"setTableSchema",tableSchema:A})):console.log("usbscription message with no schema")},[v]),P=U(A=>{t.select(A),s==null||s(A)},[t,s]),g=Ze({onSelectionChange:P,selectionModel:c}),{data:E,getSelectedRows:S,range:H,setRange:N}=Io({dataSource:t,onFeatureEnabled:r,onFeatureInvocation:l,onSubscribed:M,onSizeChange:T,renderBufferSize:i,viewportRowCount:f.rowCount}),J=$t();J.current=E;let ae=U(A=>{b.current=!0,console.log("onPersistentColumnOperation, dispatchColumnAction",{action:A}),v(A)},[v]),$e=_e({dataSource:t,onPersistentColumnOperation:ae}),Fe=U((A,k=!1,$)=>{t&&(t.sort=$s(t.sort,A,k,$))},[t]),B=U((A,k,$)=>{let z=x.find(O=>O.name===k);if(z)A==="end"&&(b.current=!0),v({type:"resizeColumn",phase:A,column:z,width:$});else throw Error(`useDataTable.handleColumnResize, column ${k} not found`)},[x,v]),we=U((A,k)=>{let $=Os(k,A),z=A[Js];if(A[Cn]){if(t.closeTreeNode(z,!0),$){let O=x.indexOf(k);t.getRowsAtDepth(O+1).some(G=>G[Cn]||G[bn])||v({type:"hideColumns",columns:x.slice(O+2)})}}else if(t.openTreeNode(z),$){let O=t.getChildRows(z),Y=x.indexOf(k)+1,G=[x[Y]];O.some(te=>te[bn])&&G.push(x[Y+1]),G.some(te=>te.hidden)&&v({type:"showColumns",columns:G})}},[x,t,v]),{onVerticalScroll:ce,onHorizontalScroll:X,columnsWithinViewport:F,virtualColSpan:De}=dn({columns:x,getRowAtPosition:D,setRange:N,viewportMeasurements:f}),Me=U((A,k)=>{p(k),ce(A)},[ce,p]),{requestScroll:Re,...V}=un({onHorizontalScroll:X,onVerticalScroll:Me,viewport:f,viewportHeight:((Pe=(Ge=h.innerSize)==null?void 0:Ge.height)!=null?Pe:0)-o}),Q=Uo({columnCount:x.length,containerRef:h.containerRef,data:E,requestScroll:Re,rowCount:t==null?void 0:t.size,viewportRange:H}),Oe=U(A=>{A?t&&t.groupBy.includes(A.name)&&(t.groupBy=t.groupBy.filter(k=>k!==A.name)):t.groupBy=[]},[t]),st=U((A,k)=>{let $=t.columns[A],z=Ws(t.columns,$,k);z!==t.columns&&(t.columns=z,v({type:"tableConfig",columns:z}))},[t,v]),it=Fo({onDrop:st});fn(()=>{y.current&&(b.current=!0,v({type:"init",tableConfig:e,dataSourceConfig:y.current.config}))},[e,v]),fn(()=>{t.on("config",(A,k)=>{b.current=!0,v({type:"tableConfig",...A,confirmed:k})})},[t,v]),Bs(()=>{b.current&&(n==null||n({...e,columns:x}),b.current=!1)},[x,e,n]);let[xe]=Vs(),at=U(A=>{var G;let{current:k}=J,{current:$}=y,z=A.target,O=z==null?void 0:z.closest("div[role='cell']"),Y=z==null?void 0:z.closest(".vuuTableRow");if(O&&Y&&k&&$){let{columns:te,selectedRowsCount:ct}=$,ut=Fs(te),mt=parseInt((G=Y.ariaRowIndex)!=null?G:"-1"),pt=Array.from(Y.childNodes).indexOf(O),We=k.find(([ft])=>ft===mt),dt=te[pt];xe(A,"grid",{columnMap:ut,columnName:dt,row:We,selectedRows:ct===0?_s:S(),viewport:t==null?void 0:t.viewport})}},[t==null?void 0:t.viewport,S,xe]);return{columns:x,columnsWithinViewport:F,containerMeasurements:h,containerProps:Q,data:E,dispatchColumnAction:v,getRowOffset:w,handleContextMenuAction:$e,headings:C,onColumnResize:B,onContextMenu:at,onRemoveColumnFromGroupBy:Oe,onRowClick:g,onSort:Fe,onToggleGroup:we,virtualColSpan:De,scrollProps:V,rowCount:d,viewportMeasurements:f,...it}};import Zs from"classnames";import{isDataLoading as js}from"@vuu-ui/vuu-utils";import{jsx as ke,jsxs as hn}from"react/jsx-runtime";var de="vuuTable",Cd=({allowConfigEditing:e=!1,className:t,config:o,dataSource:n,headerHeight:r=25,height:l,id:s,onConfigChange:i,onFeatureEnabled:a,onFeatureInvocation:c,onSelect:u,onSelectionChange:d,onShowConfigEditor:m,renderBufferSize:b=0,rowHeight:y=20,selectionModel:h="extended",style:T,width:x,...v})=>{let C=Ys(s),{containerMeasurements:{containerRef:D,innerSize:w,outerSize:p},containerProps:f,dispatchColumnAction:M,draggable:P,draggedItemIndex:g,handleContextMenuAction:E,scrollProps:S,viewportMeasurements:H,...N}=gn({config:o,dataSource:n,renderBufferSize:b,headerHeight:r,height:l,onConfigChange:i,onFeatureEnabled:a,onFeatureInvocation:c,onSelectionChange:d,rowHeight:y,selectionModel:h,width:x});console.log({tableProps:N});let J={...p,"--content-height":`${H.contentHeight}px`,"--horizontal-scrollbar-height":`${H.horizontalScrollbarHeight}px`,"--content-width":`${H.contentWidth}px`,"--pinned-width-left":`${H.pinnedWidthLeft}px`,"--pinned-width-right":`${H.pinnedWidthRight}px`,"--header-height":`${r}px`,"--row-height":`${y}px`,"--table-height":`${w==null?void 0:w.height}px`,"--table-width":`${w==null?void 0:w.width}px`,"--total-header-height":`${H.totalHeaderHeight}px`,"--vertical-scrollbar-width":`${H.verticalScrollbarWidth}px`,"--viewport-body-height":`${H.viewportBodyHeight}px`},ae=Zs(de,t,{[`${de}-zebra`]:o.zebraStripes,[`${de}-loading`]:js(N.columns)});return ke(Xs,{menuActionHandler:E,menuBuilder:Ue(n),children:hn("div",{...v,...f,className:ae,id:C,ref:D,style:J,tabIndex:-1,children:[w?ke("div",{className:`${de}-scrollbarContainer`,ref:S.scrollbarContainerRef,children:ke("div",{className:`${de}-scrollbarContent`})}):null,w?hn("div",{className:`${de}-contentContainer`,ref:S.contentContainerRef,children:[ke(zo,{...N,headerHeight:r,tableId:C}),P]}):null,e&&w?ke(Qs,{className:`${de}-settings`,"data-icon":"settings",onClick:m,variant:"secondary"}):null]})})};import qs from"classnames";import{isJsonAttribute as ei,metadataKeys as ti,registerComponent as oi}from"@vuu-ui/vuu-utils";import{jsx as Ft,jsxs as ii}from"react/jsx-runtime";var Ne="vuuJsonCell",{IS_EXPANDED:ni,KEY:ri}=ti,li=e=>{let t=e.lastIndexOf("|");return t===-1?"":e.slice(t+1)},si=({column:e,row:t})=>{let{key:o}=e,n=t[o],r=!1;ei(n)&&(n=n.slice(0,-1),r=!0);let l=li(t[ri]),s=qs({[`${Ne}-name`]:l===n,[`${Ne}-value`]:l!==n,[`${Ne}-group`]:r});if(r){let i=t[ni]?"minus-box":"plus-box";return ii("span",{className:s,children:[Ft("span",{className:`${Ne}-value`,children:n}),Ft("span",{className:`${Ne}-toggle`,"data-icon":i})]})}else return n?Ft("span",{className:s,children:n}):null};console.log("register JsonCell");oi("json",si,"cell-renderer",{description:"JSON formatter",label:"JSON formatter",serverDataType:"json"});import Ef from"classnames";import{useRef as Af}from"react";import{useCallback as Ot,useRef as ai}from"react";import{jsx as ui}from"react/jsx-runtime";var vn=()=>{},ci="vuuColumnResizerNext",ze=({onDrag:e,onDragEnd:t=vn,onDragStart:o=vn})=>{let n=ai(0),r=Ot(i=>{i.stopPropagation&&i.stopPropagation(),i.preventDefault&&i.preventDefault();let a=Math.round(i.clientX),c=a-n.current;n.current=a,c!==0&&e(i,c)},[e]),l=Ot(i=>{window.removeEventListener("mouseup",l),window.removeEventListener("mousemove",r),t(i)},[t,r]),s=Ot(i=>{o(i),n.current=Math.round(i.clientX),window.addEventListener("mouseup",l),window.addEventListener("mousemove",r),i.stopPropagation&&i.stopPropagation(),i.preventDefault&&i.preventDefault()},[o,r,l]);return ui("div",{className:ci,onMouseDown:s})};import{useCallback as Gt,useRef as mi,useState as pi}from"react";var Ie=({column:e,onResize:t,rootRef:o})=>{let n=mi(0),[r,l]=pi(!1),{name:s}=e,i=Gt(()=>{if(console.log("onResizeStart"),t&&o.current){console.log("handleResizeStart");let{width:u}=o.current.getBoundingClientRect();n.current=Math.round(u),l(!0),t==null||t("begin",s)}},[s,t,o]),a=Gt((u,d)=>{if(o.current&&t){let{width:m}=o.current.getBoundingClientRect(),b=Math.round(m)+d;b!==n.current&&b>0&&(t("resize",s,b),n.current=b)}},[s,t,o]),c=Gt(()=>{t&&(t("end",s,n.current),setTimeout(()=>{l(!1)},80))},[s,t]);return{isResizing:r,onDrag:a,onDragStart:i,onDragEnd:c}};import{getColumnStyle as di}from"@vuu-ui/vuu-utils";import fi from"classnames";import{useMemo as Ci}from"react";var ee=(e,t,o)=>Ci(()=>{let n=fi(t,{vuuPinFloating:e.pin==="floating",vuuPinLeft:e.pin==="left",vuuPinRight:e.pin==="right",vuuEndPin:o&&e.endPin,[`${t}-editable`]:e.editable,[`${t}-right`]:e.align==="right"}),r=di(e);return{className:n,style:r}},[e,t,o]);import bi from"classnames";import{useCallback as gi}from"react";import{jsx as hi,jsxs as vi}from"react/jsx-runtime";var yn="vuuColumnHeaderPill",fe=({children:e,className:t,column:o,onRemove:n,removable:r,...l})=>{if(r&&typeof n!="function")throw Error("ColumnHeaderPill onRemove prop must be provided if Pill is removable");let s=gi(i=>{i.preventDefault(),i.stopPropagation(),n==null||n(o)},[o,n]);return vi("div",{...l,className:bi(yn,t),children:[e,r?hi("span",{className:`${yn}-removeButton`,role:"button","data-icon":"cross",onClick:s}):null]})};import{jsx as Wt,jsxs as yi}from"react/jsx-runtime";var Bt=({column:e,...t})=>{let{name:o,sorted:n}=e,r=typeof n=="number"?n<0?"arrow-down":"arrow-up":n==="A"?"arrow-up":n==="D"?"arrow-down":void 0;return yi(fe,{...t,column:e,children:[Wt("span",{className:"vuuGroupColumnPill-label",children:o}),r!==void 0?Wt("span",{"data-icon":r}):null,typeof n=="number"?Wt("span",{className:"vuuSortPosition",children:Math.abs(n)}):null]})};import{jsx as Tn,jsxs as Ti}from"react/jsx-runtime";var wn=({column:e})=>{if(!e.sorted)return null;let t=typeof e.sorted=="number"?e.sorted<0?"arrow-down":"arrow-up":e.sorted==="A"?"arrow-up":"arrow-down";return Ti(fe,{column:e,children:[Tn("span",{"data-icon":t}),typeof e.sorted=="number"?Tn("span",{className:"vuuSortPosition",children:Math.abs(e.sorted)}):null]})};import{jsx as Vf,jsxs as $f}from"react/jsx-runtime";import{createElement as If}from"react";import wi from"classnames";import{useCallback as Di,useRef as Mi,useState as Ri}from"react";import{OverflowContainer as xi,useLayoutEffectSkipFirst as Pi}from"@vuu-ui/vuu-layout";import{jsx as _t,jsxs as Si}from"react/jsx-runtime";import{createElement as Ei}from"react";var Ut="vuuTableNextGroupHeaderCell",Hi=(e,t)=>e===t?e:t,et=({column:e,className:t,onRemoveColumn:o,onResize:n,...r})=>{let l=Mi(null),{isResizing:s,...i}=Ie({column:e,onResize:n,rootRef:l}),[a,c]=Ri(e.columns),{className:u,style:d}=ee(e,Ut,!0),m=a.length>1?{removable:!0,onRemove:o}:void 0,b=Di((y,h)=>{c(T=>{let x=T.slice(),[v]=x.splice(y,1);return h===-1?x.concat(v):(x.splice(h,0,v),x)})},[]);return Pi(()=>{c(y=>Hi(y,e.columns))},[e.columns]),Si("div",{...r,className:wi(u,"vuuTableNextHeaderCell",t,{[`${Ut}-pending`]:e.groupConfirmed===!1}),ref:l,role:"columnheader",style:d,children:[_t(xi,{allowDragDrop:!0,className:`${Ut}-inner`,height:24,onMoveItem:b,overflowPosition:"start",children:a.map(y=>Ei(Bt,{...m,column:y,key:y.key}))}),_t(fe,{column:e,removable:!0,onRemove:o}),e.resizeable!==!1?_t(ze,{...i}):null]})};import{useCallback as Ii,useRef as Vi}from"react";import{useContextMenu as Ai}from"@vuu-ui/vuu-popups";import Li from"classnames";import{useCallback as Dn,useRef as Ki,useState as ki}from"react";import{jsx as zi}from"react/jsx-runtime";var Ni=e=>{if(e){let{bottom:t,left:o}=e.getBoundingClientRect();return{x:o,y:t+6}}},Mn=({className:e,column:t,...o})=>{let n=Ki(null),[r,l]=ki(!1),[s]=Ai(),i=Dn(()=>{l(!1)},[]),a=Dn(c=>{l(!0),s(c,"column-menu",{column:t,ContextMenuProps:{onClose:i,position:Ni(n.current)}})},[t,i,s]);return zi("span",{...o,className:Li("vuuTable-columnMenu",e,{"vuuTable-columnMenu-open":r}),"data-icon":"more-vert",onClick:a,ref:n})};import $i from"classnames";import{jsx as tt,jsxs as Fi}from"react/jsx-runtime";var Jt="vuuTableNextHeaderCell",Rn=({className:e,column:t,onClick:o,onResize:n,...r})=>{var h;let l=Vi(null),{isResizing:s,...i}=Ie({column:t,onResize:n,rootRef:l}),a=Ii(T=>{console.log(`click isResizing ${s}`),!s&&(o==null||o(T))},[s,o]),{className:c,style:u}=ee(t,Jt,!0),d=tt(Mn,{column:t}),m=tt("div",{className:`${Jt}-label`,children:(h=t.label)!=null?h:t.name}),b=tt(wn,{column:t}),y=t.align==="right"?[b,m,d]:[d,m,b];return Fi("div",{...r,className:$i(c,e,{[`${Jt}-resizing`]:s}),onClick:a,ref:l,role:"columnheader",style:u,children:[...y,t.resizeable!==!1?tt(ze,{...i}):null]})};import{ContextMenuProvider as Mc}from"@vuu-ui/vuu-popups";import{isGroupColumn as Rc,metadataKeys as xc,notHidden as Pc}from"@vuu-ui/vuu-utils";import rr from"classnames";import{forwardRef as Hc,useRef as Ec}from"react";import{isGroupColumn as Sn,isJsonColumn as Yi,isJsonGroup as Zi,metadataKeys as ji,notHidden as qi,RowSelected as ea}from"@vuu-ui/vuu-utils";import ta from"classnames";import{memo as oa,useCallback as An}from"react";import{metadataKeys as Oi}from"@vuu-ui/vuu-utils";import{useCallback as xn}from"react";import{jsx as Pn}from"react/jsx-runtime";var{IDX:Gi}=Oi,Wi="vuuTableNextCell",Hn=({column:e,columnMap:t,onClick:o,onDataEdited:n,row:r})=>{let{className:l,style:s}=ee(e,Wi),{CellRenderer:i,name:a,valueFormatter:c}=e,u=t[a],d=xn(b=>(n==null||n(r[Gi],a,b),!0),[a,n,r]),m=xn(b=>{o==null||o(b,e)},[e,o]);return Pn("div",{className:l,onClick:o?m:void 0,role:"cell",style:s,children:i?Pn(i,{column:e,columnMap:t,onCommit:d,row:r}):c(r[u])})};import{getGroupValueAndOffset as Bi,metadataKeys as Ui}from"@vuu-ui/vuu-utils";import{useCallback as _i}from"react";import Ji from"classnames";import{jsx as Qt,jsxs as Qi}from"react/jsx-runtime";var{IS_LEAF:Xi}=Ui,Xt="vuuTableNextGroupCell",En=({column:e,onClick:t,row:o})=>{let{columns:n}=e,[r,l]=Bi(n,o),{className:s,style:i}=ee(e,Xt),a=_i(d=>{t==null||t(d,e)},[e,t]),c=o[Xi],u=Array(l).fill(0).map((d,m)=>Qt("span",{className:`${Xt}-spacer`},m));return Qi("div",{className:Ji(s,"vuuTableNextCell"),role:"cell",style:i,onClick:c?void 0:a,children:[u,c?null:Qt("span",{className:`${Xt}-toggle`,"data-icon":"triangle-right"}),Qt("span",{children:r})]})};import{jsx as Yt}from"react/jsx-runtime";import{createElement as sa}from"react";var{IDX:na,IS_EXPANDED:ra,SELECTED:la}=ji,le="vuuTableNextRow",Zt=oa(({className:e,columnMap:t,columns:o,row:n,offset:r,onClick:l,onDataEdited:s,onToggleGroup:i,zebraStripes:a=!1,...c})=>{let{[na]:u,[ra]:d,[la]:m}=n,b=An(D=>{let w=D.shiftKey,p=D.ctrlKey||D.metaKey;l==null||l(n,w,p)},[l,n]),{True:y,First:h,Last:T}=ea,x=ta(le,e,{[`${le}-even`]:a&&u%2===0,[`${le}-expanded`]:d,[`${le}-selected`]:m&y,[`${le}-selectedStart`]:m&h,[`${le}-selectedEnd`]:m&T}),v={transform:`translate3d(0px, ${r}px, 0px)`},C=An((D,w)=>{(Sn(w)||Zi(w,n))&&(D.stopPropagation(),i==null||i(n,w))},[i,n]);return sa("div",{...c,"aria-rowindex":n[0],key:`row-${n[0]}`,role:"row",className:x,onClick:b,style:v},Yt("span",{className:`${le}-selectionDecorator vuuStickyLeft`}),o.filter(qi).map(D=>{let w=Sn(D),p=Yi(D);return Yt(w?En:Hn,{column:D,columnMap:t,onClick:w||p?C:void 0,onDataEdited:s,row:n},D.key)}),Yt("span",{className:`${le}-selectionDecorator vuuStickyRight`}))});Zt.displayName="Row";import{useLayoutEffectSkipFirst as pc}from"@vuu-ui/vuu-layout";import{useTableAndColumnSettings as dc}from"@vuu-ui/vuu-table-extras";import{useDragDropNext as fc}from"@vuu-ui/vuu-ui-controls";import{useCallback as se,useEffect as aa,useMemo as ca,useRef as eo}from"react";var jt=e=>`.vuuTableNext-col-headers .vuuTableNextHeaderCell:nth-child(${e})`,qt=(e,t)=>`.vuuTableNext-body > [aria-rowindex='${e}'] > [role='cell']:nth-child(${t+1})`,Ln=(e,[t,o])=>{var l;let n=t===-1?jt(o):qt(t,o),r=(l=e.current)==null?void 0:l.querySelector(n);return ia(r)&&r.querySelector("button")||r},ia=e=>e.classList.contains("vuuTableNextCell-editable"),Kn=e=>e.querySelector(".vuuTableInputCell")!==null;var ua=new Set(["Home","End","PageUp","PageDown","ArrowDown","ArrowLeft","ArrowRight","ArrowUp"]),ma=e=>ua.has(e),pa=["Home","End","PageUp","PageDown"],da=e=>pa.includes(e),fa=[-1,-1],Ca=[void 0,void 0],ba=e=>{var o,n;let t=(o=e.closest(".vuuTableNext"))==null?void 0:o.querySelector(".vuuTableNext-scrollbarContainer");if(t){let r=t==null?void 0:t.getBoundingClientRect(),l=(n=e.closest(".vuuTableNextCell"))==null?void 0:n.getBoundingClientRect();if(l)return l.bottom>r.bottom?["down",l.bottom-r.bottom]:l.top<r.top?["up",l.top-r.top]:l.right<r.right?["right",l.right-r.right]:l.left<r.left?["left",l.left-r.left]:Ca;throw Error("Whats going on, cell not found")}else throw Error("Whats going on, scrollbar container not found")};function ga(e,[t,o],n,r){return e==="ArrowUp"?t>-1?[t-1,o]:[t,o]:e==="ArrowDown"?t===-1?[0,o]:t===r-1?[t,o]:[t+1,o]:e==="ArrowRight"?o<n-1?[t,o+1]:[t,o]:e==="ArrowLeft"?o>1?[t,o-1]:[t,o]:[t,o]}var kn=({columnCount:e=0,containerRef:t,disableHighlightOnFocus:o,requestScroll:n,rowCount:r=0,viewportRowCount:l})=>{var w;let s=eo([-1,-1]),i=eo(),a=eo([-1,0]),c=p=>p==null?void 0:p.closest("[role='columnHeader'],[role='cell']"),u=p=>{var f,M;if(p.role==="columnHeader")return[-1,parseInt((f=p.dataset.idx)!=null?f:"-1",10)];{let P=p.closest("[role='row']");if(P){let g=parseInt((M=P.ariaRowIndex)!=null?M:"-1",10),E=Array.from(P.childNodes).indexOf(p);return[g,E]}}return fa},d=se(p=>{var f;if(t.current){let M=Ln(t,p);if(M){M!==i.current&&((f=i.current)==null||f.removeAttribute("tabindex"),i.current=M,M.setAttribute("tabindex","0"));let[P,g]=ba(M);P&&g&&(n==null||n({type:"scroll-distance",distance:g,direction:P})),M.focus()}}},[t,n]),m=se((p,f,M=!1)=>{let P=[p,f];a.current=P,d(P),M&&(s.current=P)},[d]),b=se((p,[f,M])=>new Promise(P=>{let g=f;switch(p){case"PageDown":g=Math.min(r-1,f+l),n==null||n({type:"scroll-page",direction:"down"});break;case"PageUp":g=Math.max(0,f-l),n==null||n({type:"scroll-page",direction:"up"});break;case"Home":g=0,n==null||n({type:"scroll-end",direction:"home"});break;case"End":g=r-1,n==null||n({type:"scroll-end",direction:"end"});break}setTimeout(()=>{P([g,M])},90)}),[n,r,l]),y=se(()=>{var p;if(o!==!0&&(p=t.current)!=null&&p.contains(document.activeElement)){let f=c(document.activeElement);f&&(console.log({focusedCell:f}),s.current=u(f))}},[o,t]),h=se(async p=>{console.log(`navigate child items ${p}`);let[f,M]=da(p)?await b(p,a.current):ga(p,a.current,e,r);console.log(`nextRowIdx ${f} nextColIdx ${M}`);let[P,g]=a.current;(f!==P||M!==g)&&m(f,M,!0)},[e,b,r,m]),T=se(p=>{r>0&&ma(p.key)&&(p.preventDefault(),p.stopPropagation(),h(p.key))},[r,h]),x=se(p=>{let f=p.target,M=c(f);if(M){let[P,g]=u(M);m(P,g)}},[m]),v=se(()=>{h("ArrowDown")},[h]),C=ca(()=>({navigate:v,onClick:x,onFocus:y,onKeyDown:T}),[x,y,T,v]),D=((w=t.current)==null?void 0:w.firstChild)!=null;return aa(()=>{if(D&&i.current===void 0){let{current:p}=t,f=(p==null?void 0:p.querySelector(jt(0)))||(p==null?void 0:p.querySelector(qt(0,0)));f&&(f.setAttribute("tabindex","0"),i.current=f)}},[t,D]),C};import{applySort as Cc,buildColumnMap as bc,isGroupColumn as gc,isJsonGroup as hc,isValidNumber as qn,metadataKeys as vc,updateColumn as yc,visibleColumnAtIndex as Tc}from"@vuu-ui/vuu-utils";import{useCallback as I,useEffect as er,useMemo as lo,useState as so}from"react";var to=(e,t)=>{switch(t.type){case"col-size":return{...e,columns:e.columns.map(o=>o.name===t.column.name?{...o,width:t.width}:o)};case"column-prop":return{...e,columns:e.columns.map(o=>o.name===t.column.name?{...o,[t.property]:t.value}:o)};default:return e}};import{isVuuFeatureAction as Ta,isVuuFeatureInvocation as wa}from"@vuu-ui/vuu-data-react/src";import{getFullRange as oo,NULL_RANGE as Nn}from"@vuu-ui/vuu-utils";import{useCallback as no,useEffect as zn,useMemo as Da,useRef as nt,useState as Ma}from"react";import{metadataKeys as ha,WindowRange as va}from"@vuu-ui/vuu-utils";var{SELECTED:ya}=ha,ot=class{constructor({from:t,to:o}){this.rowCount=0;this.setRowCount=t=>{t<this.data.length&&(this.data.length=t),this.rowCount=t};this.range=new va(t,o),this.data=new Array(o-t),this.rowCount=0}add(t){let[o]=t;if(this.isWithinRange(o)){let n=o-this.range.from;this.data[n]=t}}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:o}){if(t!==this.range.from||o!==this.range.to){let[n,r]=this.range.overlap(t,o),l=new Array(Math.max(0,o-t));for(let s=n;s<r;s++){let i=this.getAtIndex(s);if(i){let a=s-t;l[a]=i}}this.data=l,this.range.from=t,this.range.to=o}}getSelectedRows(){return this.data.filter(t=>t[ya]!==0)}};var In=({dataSource:e,onFeatureEnabled:t,onFeatureInvocation:o,onSizeChange:n,onSubscribed:r,range:l=Nn,renderBufferSize:s=0})=>{let[,i]=Ma(null),a=nt([]),c=nt(!0),u=nt(!1),d=nt(Nn),m=Da(()=>new ot(oo(l,s)),[]),b=no(T=>{for(let x of T)m.add(x);a.current=m.data,c.current&&i({})},[m]),y=no(T=>{T.type==="subscribed"?r==null||r(T):T.type==="viewport-update"?(typeof T.size=="number"&&(n==null||n(T.size),m.setRowCount(T.size)),T.rows?b(T.rows):typeof T.size=="number"&&(a.current=m.data,u.current=!0)):Ta(T)?t==null||t(T):wa(T)?o==null||o(T):console.log(`useDataSource unexpected message ${T.type}`)},[m,t,o,n,r,b]);zn(()=>()=>{c.current=!0,c.current=!1},[]),zn(()=>{e==null||e.subscribe({range:oo(l,s)},y)},[e,y,l,s]);let h=no(T=>{let x=oo(T,s);m.setRange(x),e.range=d.current=x,e.emit("range",T)},[e,m,s]);return{data:a.current,range:d.current,setRange:h}};import{useMemo as Ra,useRef as xa}from"react";var Vn=e=>{let t=xa(e);return Ra(()=>t.current,[])};import{buildColumnMap as Pa}from"@vuu-ui/vuu-utils";import{useCallback as Ha}from"react";import{useContextMenu as Ea}from"@vuu-ui/vuu-popups";var $n=({columns:e,data:t})=>{let[o]=Ea();return Ha(r=>{var a;let l=r.target,s=l==null?void 0:l.closest("div[role='cell']"),i=l==null?void 0:l.closest("div[role='row']");if(s&&i){let c=Pa(e),u=parseInt((a=i.ariaRowIndex)!=null?a:"-1"),d=Array.from(i.childNodes).indexOf(s),m=t.find(([y])=>y===u),b=e[d];o(r,"grid",{columnMap:c,columnName:b,row:m})}},[e,t,o])};import{isCharacterKey as Sa}from"@vuu-ui/vuu-utils";import{useCallback as rt}from"react";var Fn=({navigate:e})=>{let t=rt(()=>{e()},[e]),o=rt(l=>{let s=l.target,i=s.querySelector("input");i&&(i.focus(),i.select()),s.addEventListener("vuu-commit",t,!0)},[t]),n=rt(l=>{let s=l.target,i=s.querySelector("input");i&&(i.focus(),i.select()),s.addEventListener("vuu-commit",t,!0)},[t]);return{onKeyDown:rt(l=>{Kn(l.target)&&(Sa(l.key)?o(l):l.key==="Enter"&&n(l))},[o,n])}};import{applyFilterToColumns as Aa,applyGroupByToColumns as La,applySortToColumns as Ka,getCellRenderer as ka,getTableHeadings as Na,getValueFormatter as za,hasValidationRules as Ia,isFilteredColumn as Va,isGroupColumn as $a,isPinned as Fa,isTypeDescriptor as Oa,logger as Ga,metadataKeys as Wa,moveItem as Ba,sortPinnedColumns as On,stripFilterFromColumns as Ua,subscribedOnly as _a}from"@vuu-ui/vuu-utils";import{buildValidationChecker as Ja}from"@vuu-ui/vuu-ui-controls";import{useReducer as Xa}from"react";var{info:ro}=Ga("useTableModel"),Qa=100,Ya=Wa.count,Za=({serverDataType:e})=>e===void 0,ja=e=>{var t;if(Oa(e.type))return ka((t=e.type)==null?void 0:t.renderer)},qa=(e,t)=>{var n;let o=t.columns.find(({name:r})=>r===e.name);return o?o.serverDataType:(n=e.serverDataType)!=null?n:"string"},ec=["int","long","double"],Gn=e=>e===void 0?void 0:ec.includes(e)?"right":"left",Wn=e=>e.type==="columnSettings",Bn=e=>e.type==="tableSettings",tc=(e,t)=>{switch(ro==null||ro(`TableModelReducer ${t.type}`),console.log(`TableModelReducer ${t.type}`),t.type){case"init":return console.log({init:t}),_n(t);case"moveColumn":return nc(e,t);case"resizeColumn":return sc(e,t);case"setTableSchema":return ic(e,t);case"hideColumns":return rc(e,t);case"showColumns":return lc(e,t);case"pinColumn":return ac(e,t);case"updateColumnProp":return Te(e,t);case"tableConfig":return Xn(e,t);default:return console.log(`unhandled action ${t.type}`),e}},Un=(e,t)=>{let[o,n]=Xa(tc,{tableConfig:e,dataSourceConfig:t},_n),{columns:r,headings:l,tableConfig:s,...i}=o;return{columns:r,dispatchColumnAction:n,headings:l,tableAttributes:i,tableConfig:s}};function _n({dataSourceConfig:e,tableConfig:t}){let{columns:o,...n}=t,r=o.filter(_a(e==null?void 0:e.columns)).map(Jn(n)),l=r.some(Fa)?On(r):r,s={columns:l,headings:Na(l),tableConfig:t,...n};if(e){let{columns:i,...a}=e;s=Xn(s,{type:"tableConfig",...a})}return s}var oc=(e,t)=>t==="uppercase"?e.toUpperCase():t==="capitalize"?e[0].toUpperCase()+e.slice(1).toLowerCase():e,Jn=e=>(t,o)=>{let{columnDefaultWidth:n=Qa,columnFormatHeader:r}=e,{align:l=Gn(t.serverDataType),key:s,name:i,label:a=i,width:c=n,...u}=t,d={...u,align:l,CellRenderer:ja(t),clientSideEditValidationCheck:Ia(t.type)?Ja(t.type.renderer.rules):void 0,label:oc(a,r),key:s!=null?s:o+Ya,name:i,originalIdx:o,valueFormatter:za(t),width:c};return $a(d)&&(d.columns=d.columns.map(m=>Jn(e)(m,m.key))),d};function nc(e,{column:t,moveBy:o,moveTo:n}){let{columns:r}=e;if(typeof o=="number"){let l=r.indexOf(t),s=r.slice(),[i]=s.splice(l,1);return s.splice(l+o,0,i),{...e,columns:s}}else if(typeof n=="number"){let l=r.indexOf(t);return{...e,columns:Ba(r,l,n)}}return e}function rc(e,{columns:t}){return t.some(o=>o.hidden!==!0)?t.reduce((o,n)=>n.hidden!==!0?Te(o,{type:"updateColumnProp",column:n,hidden:!0}):o,e):e}function lc(e,{columns:t}){return t.some(o=>o.hidden)?t.reduce((o,n)=>n.hidden?Te(o,{type:"updateColumnProp",column:n,hidden:!1}):o,e):e}function sc(e,{column:t,phase:o,width:n}){let r="updateColumnProp",l=o!=="end";switch(o){case"begin":return Te(e,{type:r,column:t,resizing:l});case"end":return Te(e,{type:r,column:t,resizing:l,width:n});case"resize":return Te(e,{type:r,column:t,width:n});default:throw Error(`useTableModel.resizeColumn, invalid resizePhase ${o}`)}}function ic(e,{tableSchema:t}){let{columns:o}=e;if(o.some(Za)){let n=o.map(r=>{var s;let l=qa(r,t);return{...r,align:(s=r.align)!=null?s:Gn(l),serverDataType:l}});return{...e,columns:n}}else return e}function ac(e,t){let{columns:o}=e,{column:n,pin:r}=t,l=o.find(s=>s.name===n.name);return l?(o=ye(o,{...l,pin:r}),o=On(o),{...e,columns:o}):e}function Te(e,t){let{columns:o}=e,{align:n,column:r,hidden:l,label:s,resizing:i,width:a}=t,c=o.find(u=>u.name===r.name);return c&&((n==="left"||n==="right")&&(o=ye(o,{...c,align:n})),typeof s=="string"&&(o=ye(o,{...c,label:s})),typeof i=="boolean"&&(o=ye(o,{...c,resizing:i})),typeof l=="boolean"&&(o=ye(o,{...c,hidden:l})),typeof a=="number"&&(o=ye(o,{...c,width:a}))),{...e,columns:o}}function Xn(e,{confirmed:t,filter:o,groupBy:n,sort:r}){let l=n!==void 0,s=typeof(o==null?void 0:o.filter)=="string",i=r&&r.sortDefs.length>0,a=e;return l&&(a={...e,columns:La(a.columns,n,t)}),i&&(a={...e,columns:Ka(a.columns,r)}),s?a={...e,columns:Aa(a.columns,o)}:a.columns.some(Va)&&(a={...e,columns:Ua(a.columns)}),a}function ye(e,t){return e.map(o=>o.name===t.name?t:o)}import{useCallback as ie,useRef as Ve}from"react";var Qn=e=>{let{scrollLeft:t,scrollTop:o}=e,{clientHeight:n,clientWidth:r,scrollHeight:l,scrollWidth:s}=e,i=t/(s-r),a=o/(l-n);return[i,a]},Yn=({onAttach:e,onDetach:t})=>{let o=Ve(null);return ie(r=>{if(r)o.current=r,e==null||e(r);else if(o.current){let{current:l}=o;o.current=r,t==null||t(l)}},[e,t])},Zn=({maxScrollLeft:e,maxScrollTop:t,onHorizontalScroll:o,onVerticalScroll:n,rowHeight:r,viewportRowCount:l})=>{let s=Ve(!1),i=Ve({scrollTop:0,scrollLeft:0}),a=Ve(null),c=Ve(null),u=ie(()=>{let{current:C}=c,{current:D}=a,{current:w}=s;if(w)s.current=!1;else if(C&&D){let[p,f]=Qn(D),M=Math.round(p*e),P=Math.round(f*t);C.scrollTo({left:M,top:P,behavior:"auto"})}},[e,t]),d=ie(()=>{let{current:C}=c,{current:D}=a,{current:w}=i;if(C&&D){let{scrollLeft:p,scrollTop:f}=C,[M,P]=Qn(C);s.current=!0,D.scrollLeft=Math.round(M*e),D.scrollTop=Math.round(P*t),w.scrollTop!==f&&(w.scrollTop=f,n==null||n(f,P)),w.scrollLeft!==p&&(w.scrollLeft=p,o==null||o(p))}},[e,t,o,n]),m=ie(C=>{a.current=C,C.addEventListener("scroll",u,{passive:!0})},[u]),b=ie(C=>{a.current=null,C.removeEventListener("scroll",u)},[u]),y=ie(C=>{c.current=C,C.addEventListener("scroll",d,{passive:!0})},[d]),h=ie(C=>{c.current=null,C.removeEventListener("scroll",d)},[d]),T=Yn({onAttach:y,onDetach:h}),x=Yn({onAttach:m,onDetach:b}),v=ie(C=>{let{current:D}=c;if(D){let{scrollLeft:w,scrollTop:p}=D;if(s.current=!1,C.type==="scroll-distance"){let f=w,M=p;C.direction==="up"||C.direction==="down"?M=Math.min(Math.max(0,p+C.distance),t):f=Math.min(Math.max(0,w+C.distance),e),D.scrollTo({top:M,left:f,behavior:"auto"})}else if(C.type==="scroll-page"){let{direction:f}=C,M=l*(f==="down"?r:-r),P=Math.min(Math.max(0,p+M),t);D.scrollTo({top:P,left:w,behavior:"auto"})}else if(C.type==="scroll-end"){let{direction:f}=C,M=f==="end"?t:0;D.scrollTo({top:M,left:D.scrollLeft,behavior:"auto"})}}},[e,t,r,l]);return{scrollbarContainerRef:x,contentContainerRef:T,requestScroll:v}};import{useCallback as cc,useEffect as uc,useRef as mc}from"react";var jn=({columns:e,getRowAtPosition:t,setRange:o,viewportMeasurements:n})=>{let r=mc(0),{contentWidth:l,rowCount:s}=n,i=cc(a=>{let c=t(a);c!==r.current&&(r.current=c,o({from:c,to:c+s}))},[t,o,s]);return uc(()=>{let{current:a}=r,c={from:a,to:a+s};o(c)},[o,s]),{onVerticalScroll:i}};var{KEY:wc,IS_EXPANDED:tr,IS_LEAF:or}=vc,Dc=(e,t)=>({...e,columns:e.columns.concat(t)}),nr=({availableColumns:e,config:t,containerRef:o,dataSource:n,headerHeight:r=25,onAvailableColumnsChange:l,onConfigChange:s,onFeatureEnabled:i,onFeatureInvocation:a,onRowClick:c,onSelect:u,onSelectionChange:d,renderBufferSize:m=0,rowHeight:b=20,selectionModel:y})=>{let[h,T]=so(n.size);if(n===void 0)throw Error("no data source provided to Vuu Table");let[x,v]=so(),C=I(R=>{v(R)},[]),D=lo(()=>Ue(n),[n]),w=I(R=>{T(R)},[]),{columns:p,dispatchColumnAction:f,headings:M,tableAttributes:P,tableConfig:g}=Un(t,n.config);pc(()=>{f({type:"init",dataSourceConfig:n.config,tableConfig:g})},[g,n.config,f]);let[E,S]=so(),[H,N]=lo(()=>{let R=(L,K)=>{let W=yc(p,L,{width:K});S(W)};return[E!=null?E:p,R]},[p,E]),J=lo(()=>bc(n.columns),[n.columns]),{getRowAtPosition:ae,getRowOffset:$e,setPctScrollTop:Fe,...B}=qe({columns:H,headerHeight:r,headings:M,rowCount:h,rowHeight:b,size:x}),we=Vn({from:0,to:B.rowCount}),ce=I(({tableSchema:R})=>{R||console.log("usbscription message with no schema")},[]),{data:X,range:F,setRange:De}=In({dataSource:n,onFeatureEnabled:i,onFeatureInvocation:a,renderBufferSize:m,onSizeChange:w,onSubscribed:ce,range:we}),Me=I(R=>{f({type:"init",tableConfig:R,dataSourceConfig:n.config}),s==null||s(R)},[n.config,f,s]),Re=I(R=>{n.config={...n.config,...R}},[n]),V=I(R=>{n.columns=n.columns.concat(R.name);let L=Dc(g,R);f({type:"init",tableConfig:L,dataSourceConfig:n.config}),s==null||s(L)},[n,f,s,g]);er(()=>{n.on("config",(R,L)=>{f({type:"tableConfig",...R,confirmed:L})})},[n,f]);let{showColumnSettingsPanel:Q,showTableSettingsPanel:Oe}=dc({availableColumns:e!=null?e:g.columns.map(({name:R,serverDataType:L="string"})=>({name:R,serverDataType:L})),onAvailableColumnsChange:l,onConfigChange:Me,onCreateCalculatedColumn:V,onDataSourceConfigChange:Re,tableConfig:g}),st=I(R=>{Wn(R)?Q(R):Bn(R)?Oe():f(R)},[f,Q,Oe]),it=_e({dataSource:n,onPersistentColumnOperation:st}),xe=I((R,L=!1,K)=>{n&&(n.sort=Cc(n.sort,R,L,K))},[n]),at=I((R,L,K)=>{let W=H.find(Z=>Z.name===L);if(W)R==="resize"?qn(K)&&N(L,K):R==="end"?qn(K)&&(f({type:"resizeColumn",phase:R,column:W,width:K}),s==null||s(to(g,{type:"col-size",column:W,width:K}))):(S(void 0),f({type:"resizeColumn",phase:R,column:W,width:K}));else throw Error(`useDataTable.handleColumnResize, column ${L} not found`)},[H,g,f,s,N]),Ge=I((R,L)=>{let K=hc(L,R),W=R[wc];if(R[tr]){if(n.closeTreeNode(W,!0),K){let Z=H.indexOf(L);n.getRowsAtDepth(Z+1).some(j=>j[tr]||j[or])||f({type:"hideColumns",columns:H.slice(Z+2)})}}else if(n.openTreeNode(W),K){let Z=n.getChildRows(W),He=H.indexOf(L)+1,j=[H[He]];Z.some(Ct=>Ct[or])&&j.push(H[He+1]),j.some(Ct=>Ct.hidden)&&f({type:"showColumns",columns:j})}},[H,n,f]),{onVerticalScroll:Pe}=jn({columns:H,getRowAtPosition:ae,setRange:De,viewportMeasurements:B}),A=I(R=>{Pe(R)},[Pe]),{requestScroll:k,...$}=Zn({maxScrollLeft:B.maxScrollContainerScrollHorizontal,maxScrollTop:B.maxScrollContainerScrollVertical,rowHeight:b,onVerticalScroll:A,viewportRowCount:B.rowCount}),{navigate:z,onKeyDown:O,...Y}=kn({columnCount:H.filter(R=>R.hidden!==!0).length,containerRef:o,requestScroll:k,rowCount:n==null?void 0:n.size,viewportRange:F,viewportRowCount:B.rowCount}),{onKeyDown:G}=Fn({navigate:z}),te=I(R=>{O(R),R.defaultPrevented||G(R)},[O,G]),ct=$n({columns:H,data:X}),ut=I(R=>{var j;let K=R.target.closest(".vuuTableNextHeaderCell"),W=parseInt((j=K==null?void 0:K.dataset.index)!=null?j:"-1"),Z=Tc(H,W),He=R.shiftKey;Z&&xe(Z,He)},[H,xe]),mt=I(R=>{gc(R)?n.groupBy=[]:n&&n.groupBy.includes(R.name)&&(n.groupBy=n.groupBy.filter(L=>L!==R.name))},[n]),pt=I(R=>{n.select(R),d==null||d(R)},[n,d]),We=Ze({onSelect:u,onSelectionChange:pt,selectionModel:y}),dt=I((R,L,K)=>{We(R,L,K),c==null||c(R)},[c,We]);er(()=>{n.on("config",(R,L)=>{f({type:"tableConfig",...R,confirmed:L})})},[n,f]);let ft=I((R,L)=>{let K=H[R];f({type:"moveColumn",column:K,moveTo:L})},[H,f]),sr=I((R,L,K)=>n.applyEdit(R,L,K),[n]),{onMouseDown:ir,...ar}=fc({allowDragDrop:!0,containerRef:o,draggableClassName:"vuuTableNext",onDrop:ft,orientation:"horizontal",itemQuery:".vuuTableNextHeaderCell"});return{...Y,onKeyDown:te,columnMap:J,columns:H,data:X,handleContextMenuAction:it,headerProps:{onClick:ut,onMouseDown:ir,onResize:at},menuBuilder:D,onContextMenu:ct,onDataEdited:sr,onRemoveGroupColumn:mt,onResize:C,onRowClick:dt,onToggleGroup:Ge,scrollProps:$,tableAttributes:P,viewportMeasurements:B,dragDropHook:ar}};import{MeasuredContainer as Sc,useId as Ac}from"@vuu-ui/vuu-layout";import{useForkRef as Lc}from"@salt-ds/core";import{jsx as Ce,jsxs as io}from"react/jsx-runtime";import{createElement as lr}from"react";var _="vuuTableNext",{IDX:Kc,RENDER_IDX:kc}=xc,Nc=Hc(function({Row:t=Zt,availableColumns:o,className:n,config:r,dataSource:l,id:s,onAvailableColumnsChange:i,onConfigChange:a,onFeatureEnabled:c,onFeatureInvocation:u,onRowClick:d,onSelect:m,onSelectionChange:b,onShowConfigEditor:y,renderBufferSize:h=0,rowHeight:T=20,selectionModel:x="extended",showColumnHeaders:v=!0,headerHeight:C=v?25:0,style:D,...w},p){let f=Ac(s),M=Ec(null),{columnMap:P,columns:g,data:E,dragDropHook:S,handleContextMenuAction:H,headerProps:N,onDataEdited:J,onRemoveGroupColumn:ae,onResize:$e,onRowClick:Fe,onToggleGroup:B,menuBuilder:we,scrollProps:ce,tableAttributes:X,viewportMeasurements:F,...De}=nr({availableColumns:o,config:r,containerRef:M,dataSource:l,headerHeight:C,onAvailableColumnsChange:i,onConfigChange:a,onFeatureEnabled:c,onFeatureInvocation:u,onRowClick:d,onSelect:m,onSelectionChange:b,renderBufferSize:h,rowHeight:T,selectionModel:x}),Me=()=>({...D,"--content-height":`${F.contentHeight}px`,"--horizontal-scrollbar-height":`${F.horizontalScrollbarHeight}px`,"--content-width":`${F.contentWidth}px`,"--pinned-width-left":`${F.pinnedWidthLeft}px`,"--pinned-width-right":`${F.pinnedWidthRight}px`,"--header-height":`${C}px`,"--row-height":`${T}px`,"--total-header-height":`${F.totalHeaderHeight}px`,"--vertical-scrollbar-width":`${F.verticalScrollbarWidth}px`,"--viewport-body-height":`${F.viewportBodyHeight}px`}),Re=rr(_,n,{[`${_}-colLines`]:X.columnSeparators,[`${_}-rowLines`]:X.rowSeparators,[`${_}-zebra`]:X.zebraStripes});return Ce(Mc,{menuActionHandler:H,menuBuilder:we,children:io(Sc,{...w,className:Re,onResize:$e,ref:Lc(M,p),style:Me(),children:[Ce("div",{className:`${_}-scrollbarContainer`,ref:ce.scrollbarContainerRef,children:Ce("div",{className:`${_}-scrollbarContent`})}),Ce("div",{className:`${_}-contentContainer`,ref:ce.contentContainerRef,children:io("div",{...De,className:`${_}-table`,tabIndex:-1,children:[v?Ce("div",{className:`${_}-col-headings`,children:io("div",{className:`${_}-col-headers`,role:"row",children:[g.filter(Pc).map((V,Q)=>Rc(V)?lr(et,{...N,column:V,"data-index":Q,key:V.name,onRemoveColumn:ae}):lr(Rn,{...N,className:rr({"vuuDraggable-dragAway":Q===S.draggedItemIndex}),column:V,"data-index":Q,id:`${f}-col-${Q}`,key:V.name})),S.draggable]})}):null,Ce("div",{className:`${_}-body`,children:E.map(V=>Ce(t,{columnMap:P,columns:g,onClick:Fe,onDataEdited:J,row:V,offset:T*V[Kc]+C,onToggleGroup:B,zebraStripes:X.zebraStripes},V[kc]))})]})})]})})});import{Dropdown as zc}from"@vuu-ui/vuu-ui-controls";import{isColumnTypeRenderer as Ic,isTypeDescriptor as Vc,registerComponent as $c}from"@vuu-ui/vuu-utils";import{useCallback as Fc,useState as Oc}from"react";import{jsx as Uc}from"react/jsx-runtime";var Gc="vuuTableDropdownCell",Wc=["Enter"," "],Bc=({column:e,columnMap:t,row:o})=>{var a,c,u;let n=Vc(e.type)&&Ic((a=e.type)==null?void 0:a.renderer)?(u=(c=e.type)==null?void 0:c.renderer)==null?void 0:u.values:[],r=t[e.name],[l,s]=Oc(o[r]),i=Fc((d,m)=>{m&&s(m)},[]);return Uc(zc,{className:Gc,onSelectionChange:i,openKeys:Wc,selected:l,source:n,width:e.width-17})};$c("dropdown-cell",Bc,"cell-renderer",{});import{registerComponent as _c}from"@vuu-ui/vuu-utils";import{Input as Jc}from"@salt-ds/core";import{useEditableText as Xc}from"@vuu-ui/vuu-ui-controls";import Qc from"classnames";import{jsx as ao}from"react/jsx-runtime";var lt="vuuTableInputCell",Yc=()=>(console.warn("onCommit handler has not been provided to InputCell cell renderer"),!0),Zc=({column:e,columnMap:t,onCommit:o=Yc,row:n})=>{let r=t[e.name],{align:l="left",clientSideEditValidationCheck:s,valueFormatter:i}=e,{warningMessage:a,...c}=Xc({initialValue:i(n[r]),onCommit:o,clientSideEditValidationCheck:s}),u=a&&l==="left"?ao("span",{className:`${lt}-icon`,"data-icon":"error"}):void 0,d=a&&l==="right"?ao("span",{className:`${lt}-icon`,"data-icon":"error"}):void 0;return ao(Jc,{...c,className:Qc(lt,{[`${lt}-error`]:a!==void 0}),endAdornment:u,startAdornment:d})};_c("input-cell",Zc,"cell-renderer",{});export{Be as ColumnResizer,et as GroupHeaderCellNext,Cd as Table,Nc as TableNext,Ue as buildContextMenuDescriptors,Mp as isShowColumnSettings,Rp as isShowTableSettings,to as updateTableConfig,Zo as useMeasuredContainer,Ze as useSelection,Xe as useTableColumnResize,_e as useTableContextMenu,rn as useTableModel,qe as useTableViewport};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|