@vuu-ui/vuu-table 0.8.24 → 0.8.25

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/esm/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{OverflowContainer as Tn}from"@vuu-ui/vuu-ui-controls";import{useLayoutEffectSkipFirst as Rn}from"@vuu-ui/vuu-utils";import yn from"clsx";import{useCallback as Dn,useRef as Mn,useState as Hn}from"react";import an from"clsx";import{useCallback as un}from"react";import{jsx as cn,jsxs as mn}from"react/jsx-runtime";var xo="vuuColumnHeaderPill",ge=({children:e,className:o,column:t,onRemove:r,removable:n,...l})=>{if(n&&typeof r!="function")throw Error("ColumnHeaderPill onRemove prop must be provided if Pill is removable");let s=un(i=>{i.preventDefault(),i.stopPropagation(),r==null||r(t)},[t,r]);return mn("div",{...l,className:an(xo,o),children:[e,n?cn("span",{className:`${xo}-removeButton`,role:"button","data-icon":"cross",onClick:s}):null]})};import{jsx as Fe,jsxs as pn}from"react/jsx-runtime";var To=({column:e,...o})=>{let{name:t,sorted:r}=e,n=typeof r=="number"?r<0?"arrow-down":"arrow-up":r==="A"?"arrow-up":r==="D"?"arrow-down":void 0;return pn(ge,{...o,column:e,children:[Fe("span",{className:"vuuGroupColumnPill-label",children:t}),n!==void 0?Fe("span",{"data-icon":n}):null,typeof r=="number"?Fe("span",{className:"vuuSortPosition",children:Math.abs(r)}):null]})};import{jsx as Ro,jsxs as dn}from"react/jsx-runtime";var yo=({column:e})=>{if(!e.sorted)return null;let o=typeof e.sorted=="number"?e.sorted<0?"arrow-down":"arrow-up":e.sorted==="A"?"arrow-up":"arrow-down";return dn(ge,{column:e,children:[Ro("span",{"data-icon":o}),typeof e.sorted=="number"?Ro("span",{className:"vuuSortPosition",children:Math.abs(e.sorted)}):null]})};import{useCallback as Ge,useRef as bn}from"react";import{jsx as gn}from"react/jsx-runtime";var Do=()=>{},fn="vuuColumnResizerNext",ye=({onDrag:e,onDragEnd:o=Do,onDragStart:t=Do})=>{let r=bn({start:0,now:0}),n=Ge(i=>{i.stopPropagation&&i.stopPropagation(),i.preventDefault&&i.preventDefault();let{current:a}=r,u=Math.round(i.clientX),p=u-a.now,m=a.now-a.start;r.current.now=u,p!==0&&e(i,p,m)},[e]),l=Ge(i=>{window.removeEventListener("mouseup",l),window.removeEventListener("mousemove",n);let{current:a}=r,u=a.now-a.start;o(i,u)},[o,n]),s=Ge(i=>{let{current:a}=r;t(i),a.now=a.start=Math.round(i.clientX),window.addEventListener("mouseup",l),window.addEventListener("mousemove",n),i.stopPropagation&&i.stopPropagation(),i.preventDefault&&i.preventDefault()},[t,n,l]);return gn("div",{className:fn,onMouseDown:s})};import{useCallback as Ke,useRef as Cn,useState as vn}from"react";var De=({column:e,onResize:o,rootRef:t})=>{let r=Cn({start:0,now:0}),[n,l]=vn(!1),{name:s}=e,i=Ke(()=>{if(o&&t.current){let{current:p}=r,{width:m}=t.current.getBoundingClientRect();p.start=p.now=Math.round(m),l(!0),o==null||o("begin",s)}},[s,o,t]),a=Ke((p,m,b)=>{if(t.current&&o){let{current:C}=r,h=C.start+b;h!==C.now&&h>0&&(o("resize",s,h),C.now=h)}},[s,o,t]),u=Ke(()=>{if(o){let{current:p}=r;o("end",s,p.now),setTimeout(()=>{l(!1)},80)}},[s,o]);return{isResizing:n,onDrag:a,onDragStart:i,onDragEnd:u}};import{getColumnStyle as hn}from"@vuu-ui/vuu-utils";import wn from"clsx";import{useMemo as xn}from"react";var ae=(e,o,t)=>xn(()=>{let r=wn(o,{vuuPinFloating:e.pin==="floating",vuuPinLeft:e.pin==="left",vuuPinRight:e.pin==="right",vuuEndPin:t&&e.endPin,[`${o}-editable`]:e.editable,[`${o}-right`]:e.align==="right"}),n=hn(e);return{className:r,style:n}},[e,o,t]);import{jsx as $e,jsxs as kn}from"react/jsx-runtime";import{createElement as En}from"react";var Oe="vuuTableGroupHeaderCell",Pn=(e,o)=>e===o?e:o,Be=({column:e,className:o,onMoveColumn:t,onRemoveColumn:r,onResize:n,...l})=>{let s=Mn(null),{isResizing:i,...a}=De({column:e,onResize:n,rootRef:s}),[u,p]=Hn(e.columns),{className:m,style:b}=ae(e,Oe,!0),C=u.length>1?{removable:!0,onRemove:r}:void 0,h=Dn((x,c)=>{p(v=>{let T=v.slice(),[H]=T.splice(x,1);if(c===-1){let R=T.concat(H);return t==null||t(R),R}else return T.splice(c,0,H),t==null||t(T),T})},[t]);return Rn(()=>{p(x=>Pn(x,e.columns))},[e.columns]),kn("div",{...l,className:yn(m,o,{[`${Oe}-pending`]:e.groupConfirmed===!1}),ref:s,role:"columnheader",style:b,children:[$e(Tn,{allowDragDrop:!0,className:`${Oe}-inner`,height:24,onMoveItem:h,overflowPosition:"start",children:u.map(x=>En(To,{...C,column:x,key:x.name}))}),$e(ge,{column:e,removable:!0,onRemove:r}),e.resizeable!==!1?$e(ye,{...a}):null]})};import Fn from"clsx";import{useCallback as Gn,useRef as Kn}from"react";import{useContextMenu as Sn}from"@vuu-ui/vuu-popups";import Ln from"clsx";import{useCallback as Mo,useRef as An,useState as In}from"react";import{jsx as Nn}from"react/jsx-runtime";var zn=e=>{if(e){let{bottom:o,left:t}=e.getBoundingClientRect();return{x:t,y:o+6}}},Ho=({className:e,column:o,...t})=>{let r=An(null),[n,l]=In(!1),[s]=Sn(),i=Mo(()=>{l(!1)},[]),a=Mo(u=>{l(!0),s(u,"column-menu",{column:o,ContextMenuProps:{onClose:i,position:zn(r.current)}})},[o,i,s]);return Nn("span",{...t,className:Ln("vuuTable-columnMenu",e,{"vuuTable-columnMenu-open":n}),"data-icon":"more-vert",onClick:a,ref:r})};import{jsx as Ce,jsxs as On}from"react/jsx-runtime";var Me="vuuTableHeaderCell",Po=({className:e,column:o,onClick:t,onResize:r,...n})=>{var T;let{HeaderCellContentRenderer:l,HeaderCellLabelRenderer:s}=o,i=Kn(null),{isResizing:a,...u}=De({column:o,onResize:r,rootRef:i}),p=Gn(H=>{!a&&(t==null||t(H))},[a,t]),{className:m,style:b}=ae(o,Me,!0),C=Ce(Ho,{column:o}),h=s?Ce(s,{className:`${Me}-label`,column:o}):Ce("div",{className:`${Me}-label`,children:(T=o.label)!=null?T:o.name}),x=l?[Ce(l,{column:o},"content")]:[],c=Ce(yo,{column:o}),v=o.align==="right"?[c,h].concat(x).concat(C):[C,h,c].concat(x);return On("div",{...n,className:Fn(m,e,{[`${Me}-resizing`]:a}),onClick:p,ref:i,role:"columnheader",style:b,children:[...v,o.resizeable!==!1?Ce(ye,{...u}):null]})};import{ContextMenuProvider as Ti}from"@vuu-ui/vuu-popups";import{MeasuredContainer as Ri}from"@vuu-ui/vuu-ui-controls";import{metadataKeys as yi,useId as Di}from"@vuu-ui/vuu-utils";import{useForkRef as Mi}from"@salt-ds/core";import At from"clsx";import{forwardRef as Hi,useRef as Pi,useState as Ei}from"react";import{isGroupColumn as Ao,isJsonColumn as Jn,isJsonGroup as Zn,metadataKeys as Yn,isNotHidden as jn,RowSelected as qn}from"@vuu-ui/vuu-utils";import zo from"clsx";import{forwardRef as er,memo as or,useCallback as Io}from"react";import{isNumericColumn as $n}from"@vuu-ui/vuu-utils";import{useCallback as Eo}from"react";import{jsx as ko}from"react/jsx-runtime";var Bn="vuuTableCell",So=({column:e,columnMap:o,onClick:t,onDataEdited:r,row:n})=>{let{className:l,style:s}=ae(e,Bn),{CellRenderer:i,index:a,name:u,valueFormatter:p}=e,m=o[u],b=Eo(h=>{if(r){let x=h;return $n(e)&&typeof h=="string"&&(x=e.serverDataType==="double"?parseFloat(h):parseInt(h)),r==null?void 0:r(n,u,x)}else throw Error("TableCell onDataEdited prop not supplied for an editable cell")},[e,u,r,n]),C=Eo(h=>{t==null||t(h,e)},[e,t]);return ko("div",{"aria-colindex":a,className:l,onClick:t?C:void 0,role:"cell",style:s,children:i?ko(i,{column:e,columnMap:o,onCommit:b,row:n}):p(n[m])})};import{getGroupValueAndOffset as Vn,metadataKeys as Wn}from"@vuu-ui/vuu-utils";import{useCallback as Un}from"react";import _n from"clsx";import{jsx as We,jsxs as Qn}from"react/jsx-runtime";var{IS_LEAF:Xn}=Wn,Ve="vuuTableGroupCell",Lo=({column:e,columnMap:o,onClick:t,row:r})=>{let{columns:n}=e,[l,s]=Vn(n,r,o),{className:i,style:a}=ae(e,Ve),u=Un(b=>{t==null||t(b,e)},[e,t]),p=r[Xn],m=Array(s).fill(0).map((b,C)=>We("span",{className:`${Ve}-spacer`},C));return Qn("div",{className:_n(i,"vuuTableCell"),role:"cell",style:a,onClick:p?void 0:u,children:[m,p?null:We("span",{className:`${Ve}-toggle`,"data-icon":"triangle-right"}),We("span",{children:l})]})};import{jsx as xe,jsxs as lr}from"react/jsx-runtime";var{IDX:tr,IS_EXPANDED:nr,SELECTED:rr}=Yn,ne="vuuTableRow",No=er(function({height:o},t){return xe("div",{"aria-hidden":!0,className:zo(ne,`${ne}-proxy`),ref:t,style:{height:o}})}),Ue=or(({className:e,classNameGenerator:o,columnMap:t,columns:r,highlighted:n,row:l,offset:s,onClick:i,onDataEdited:a,onToggleGroup:u,virtualColSpan:p=0,zebraStripes:m=!1,...b})=>{let{[tr]:C,[nr]:h,[rr]:x}=l,c=Io(M=>{let L=M.shiftKey,z=M.ctrlKey||M.metaKey;i==null||i(l,L,z)},[i,l]),{True:v,First:T,Last:H}=qn,R=zo(ne,e,o==null?void 0:o(l,t),{[`${ne}-even`]:m&&C%2===0,[`${ne}-expanded`]:h,[`${ne}-highlighted`]:n,[`${ne}-selected`]:x&v,[`${ne}-selectedStart`]:x&T,[`${ne}-selectedEnd`]:x&H}),E={transform:`translate3d(0px, ${s}px, 0px)`},I=Io((M,L)=>{(Ao(L)||Zn(L,l,t))&&(M.stopPropagation(),u==null||u(l,L))},[t,u,l]);return lr("div",{...b,role:"row",className:R,onClick:c,style:E,children:[xe("span",{className:`${ne}-selectionDecorator vuuStickyLeft`}),p>0?xe("div",{className:"vuuTableCell",style:{width:p}}):null,r.filter(jn).map(M=>{let L=Ao(M),z=Jn(M);return xe(L?Lo:So,{column:M,columnMap:t,onClick:L||z?I:void 0,onDataEdited:a,row:l},M.name)}),xe("span",{className:`${ne}-selectionDecorator vuuStickyRight`})]})});Ue.displayName="Row";import{isGroupColumn as ar,isNotHidden as ur}from"@vuu-ui/vuu-utils";import cr from"clsx";import{memo as mr}from"react";import{useDragDrop as ir}from"@vuu-ui/vuu-ui-controls";import{moveColumnTo as _e,visibleColumnAtIndex as sr}from"@vuu-ui/vuu-utils";import{useCallback as Xe,useRef as Fo}from"react";var Go=({columns:e,onMoveColumn:o,onSortColumn:t,tableConfig:r})=>{let n=Fo(null),l=Fo(null),s=Xe(b=>{n.current=b,b?l.current=b.closest(".vuuTable-contentContainer"):l.current=null},[]),i=Xe(({fromIndex:b,toIndex:C})=>{let h=e[b],x=_e(e,h,C),c=({name:R})=>E=>E.name===R,v=x.findIndex(c(h)),T=x[v+1],H=T?r.columns.findIndex(c(T)):-1;C>b&&H!==-1?o(_e(r.columns,h,H-1)):o(_e(r.columns,h,H))},[e,o,r.columns]),a=Xe(b=>{var T;let h=b.target.closest(".vuuTableHeaderCell"),x=parseInt((T=h==null?void 0:h.dataset.index)!=null?T:"-1"),c=sr(e,x),v=b.shiftKey;c&&t(c,v)},[e,t]),{onMouseDown:u,draggable:p,...m}=ir({allowDragDrop:!0,containerRef:n,draggableClassName:"vuuTable",itemQuery:".vuuTableHeaderCell",onDrop:i,orientation:"horizontal",scrollingContainerRef:l});return{draggableColumn:p,draggedColumnIndex:m.draggedItemIndex,onClick:a,onMouseDown:u,setContainerRef:s}};import{jsx as Te,jsxs as Ko}from"react/jsx-runtime";var Qe=mr(({classBase:e="vuuTable",columns:o,headings:t,onMoveColumn:r,onMoveGroupColumn:n,onRemoveGroupColumn:l,onResizeColumn:s,onSortColumn:i,tableConfig:a,tableId:u,virtualColSpan:p=0})=>{let{draggableColumn:m,draggedColumnIndex:b,onClick:C,onMouseDown:h,setContainerRef:x}=Go({columns:o,onMoveColumn:r,onSortColumn:i,tableConfig:a});return Ko("div",{className:`${e}-col-headings`,ref:x,children:[t.map((c,v)=>Te("div",{className:"vuuTable-heading",children:c.map(({label:T,width:H},R)=>Te("div",{className:"vuuTable-headingCell",style:{width:H},children:T},R))},v)),Ko("div",{className:`${e}-col-headers`,role:"row",children:[p>0?Te("div",{role:"cell",className:"vuuTableCell",style:{width:p}}):null,o.filter(ur).map((c,v)=>ar(c)?Te(Be,{"aria-colindex":c.index,column:c,"data-index":v,onMoveColumn:n,onRemoveColumn:l,onResize:s},c.name):Te(Po,{"aria-colindex":c.index,className:cr({"vuuDraggable-dragAway":v===b}),column:c,"data-index":v,id:`${u}-col-${v}`,onClick:C,onMouseDown:h,onResize:s},c.name)),m]})]})});Qe.displayName="TableHeader";import{useDragDrop as ei}from"@vuu-ui/vuu-ui-controls";import{applySort as oi,buildColumnMap as ti,getIndexFromRowElement as ni,isGroupColumn as ri,isJsonGroup as li,isValidNumber as ii,metadataKeys as si,updateColumn as ai,useLayoutEffectSkipFirst as ui}from"@vuu-ui/vuu-utils";import{useCallback as F,useEffect as ci,useMemo as Pt,useRef as mi,useState as pi}from"react";import{isNumericColumn as pr}from"@vuu-ui/vuu-utils";var Oo=e=>(o,t)=>{let r=[];return e===void 0||(o==="header"||o==="column-menu")&&(r.push(...dr(t,e)),r.push(...gr(t,e)),r.push(...br(t,e)),r.push(...fr(t)),r.push({action:"column-settings",icon:"cog",label:"Column Settings",options:t}),r.push({action:"table-settings",icon:"cog",label:"DataGrid Settings",options:t})),r};function dr(e,{sort:{sortDefs:o}}){let{column:t}=e,r=[];if(t===void 0)return r;let n=o.length>0;return t.sorted==="A"?r.push({label:"Reverse Sort (DSC)",action:"sort-dsc",options:e}):t.sorted==="D"?r.push({label:"Reverse Sort (ASC)",action:"sort-asc",options:e}):typeof t.sorted=="number"?(t.sorted>0?r.push({label:"Reverse Sort (DSC)",action:"sort-add-dsc",options:e}):r.push({label:"Reverse Sort (ASC)",action:"sort-add-asc",options:e}),n&&Math.abs(t.sorted)<o.length&&r.push({label:"Remove from sort",action:"sort-remove",options:e}),r.push({label:"New Sort",children:[{label:"Ascending",action:"sort-asc",options:e},{label:"Descending",action:"sort-dsc",options:e}]})):n?(r.push({label:"Add to sort",children:[{label:"Ascending",action:"sort-add-asc",options:e},{label:"Descending",action:"sort-add-dsc",options:e}]}),r.push({label:"New Sort",children:[{label:"Ascending",action:"sort-asc",options:e},{label:"Descending",action:"sort-dsc",options:e}]})):r.push({label:"Sort",children:[{label:"Ascending",action:"sort-asc",options:e},{label:"Descending",action:"sort-dsc",options:e}]}),r}function br(e,o){let{column:t}=e;if(t===void 0||o.groupBy.length===0)return[];let{name:r,label:n=r}=t;return[{label:`Aggregate ${n}`,children:[{label:"Count",action:"agg-count",options:e},{label:"Distinct",action:"agg-distinct",options:e}].concat(pr(t)?[{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 je=(e,o)=>({label:`Pin ${o}`,action:`column-pin-${o}`,options:e}),Je=e=>je(e,"left"),Ze=e=>je(e,"floating"),Ye=e=>je(e,"right");function fr(e){let{column:o}=e;if(o===void 0)return[];let{pin:t}=o,r=[{label:"Hide column",action:"column-hide",options:e},{label:"Remove column",action:"column-remove",options:e}];return t===void 0?r.push({label:"Pin column",children:[Je(e),Ze(e),Ye(e)]}):t==="left"?r.push({label:"Unpin column",action:"column-unpin",options:e},{label:"Pin column",children:[Ze(e),Ye(e)]}):t==="right"?r.push({label:"Unpin column",action:"column-unpin",options:e},{label:"Pin column",children:[Je(e),Ze(e)]}):t==="floating"&&r.push({label:"Unpin column",action:"column-unpin",options:e},{label:"Pin column",children:[Je(e),Ye(e)]}),r}function gr(e,{groupBy:o}){let{column:t}=e,r=[];if(t===void 0)return r;let{name:n,label:l=n}=t;return o.length===0?r.push({label:`Group by ${l}`,action:"group",options:e}):r.push({label:`Add ${l} to group by`,action:"group-add",options:e}),r}import{removeColumnFromFilter as Cr}from"@vuu-ui/vuu-utils";import{addGroupColumn as $o,addSortColumn as Bo,AggregationType as vr,setAggregations as ve,setSortColumn as Vo}from"@vuu-ui/vuu-utils";var hr=(e,o)=>{if(e.filterStruct&&o){let[t,r]=Cr(o,e.filterStruct);return{filter:r,filterStruct:t}}else return e},{Average:wr,Count:xr,Distinct:Tr,High:Rr,Low:yr,Sum:Dr}=vr,Wo=({dataSource:e,onPersistentColumnOperation:o})=>r=>{let n=r.options;if(n.column&&e){let{column:l}=n;switch(r.menuId){case"sort-asc":return e.sort=Vo(e.sort,l,"A"),!0;case"sort-dsc":return e.sort=Vo(e.sort,l,"D"),!0;case"sort-add-asc":return e.sort=Bo(e.sort,l,"A"),!0;case"sort-add-dsc":return e.sort=Bo(e.sort,l,"D"),!0;case"group":return e.groupBy=$o(e.groupBy,l),!0;case"group-add":return e.groupBy=$o(e.groupBy,l),!0;case"column-hide":return o({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=hr(e.filter,l),!0;case"remove-filters":return e.filter={filter:""},!0;case"agg-avg":return e.aggregations=ve(e.aggregations,l,wr),!0;case"agg-high":return e.aggregations=ve(e.aggregations,l,Rr),!0;case"agg-low":return e.aggregations=ve(e.aggregations,l,yr),!0;case"agg-count":return e.aggregations=ve(e.aggregations,l,xr),!0;case"agg-distinct":return e.aggregations=ve(e.aggregations,l,Tr),!0;case"agg-sum":return e.aggregations=ve(e.aggregations,l,Dr),!0;case"column-pin-floating":return o({type:"pinColumn",column:l,pin:"floating"}),!0;case"column-pin-left":return o({type:"pinColumn",column:l,pin:"left"}),!0;case"column-pin-right":return o({type:"pinColumn",column:l,pin:"right"}),!0;case"column-unpin":return o({type:"pinColumn",column:l,pin:void 0}),!0;case"column-settings":return o({type:"columnSettings",column:l}),!0;case"table-settings":return o({type:"tableSettings"}),!0;default:}}return!1};var Uo=(e,o)=>{switch(o.type){case"col-size":return{...e,columns:e.columns.map(t=>t.name===o.column.name?{...t,width:o.width}:t)};case"column-prop":return{...e,columns:e.columns.map(t=>t.name===o.column.name?{...t,[o.property]:o.value}:t)};default:return e}};import{isCharacterKey as kr}from"@vuu-ui/vuu-utils";import{useCallback as pe}from"react";var qe=e=>`.vuuTable-col-headers .vuuTableHeaderCell:nth-child(${e})`,eo=(e,o)=>`.vuuTable-body > [aria-rowindex='${e+1}'] > [role='cell']:nth-child(${o+1})`,_o=(e,[o,t])=>{var l;let r=o===-1?qe(t):eo(o,t),n=(l=e.current)==null?void 0:l.querySelector(r);return Mr(n)&&n.querySelector("button")||n},Mr=e=>e==null?void 0:e.classList.contains("vuuTableCell-editable"),Xo=e=>e.querySelector(".vuuTableInputCell")!==null;function Hr(e){if(e){let o=e.ariaRowIndex;if(o!==null)return parseInt(o,10)-1}return-1}var Pr=e=>e.closest('[role="row"]'),Qo=e=>Hr(Pr(e)),Er=[void 0,void 0],Jo=(e,o,t=e.closest(".vuuTable-contentContainer"))=>{if(t){let r=t==null?void 0:t.getBoundingClientRect(),n=r.top+o,l=e.getBoundingClientRect();if(l)return l.bottom>r.bottom?["down",l.bottom-r.bottom]:l.top<n?["up",l.top-n]:Er;throw Error("Whats going on, row not found")}else throw Error("Whats going on, scrollbar container not found")};var Zo=({navigate:e})=>{let o=pe(()=>{e()},[e]),t=pe(a=>{let u=a.target,p=u.matches("input")?u:u.querySelector("input");p&&(p.focus(),p.select())},[]),r=pe(a=>{let p=a.target.querySelector("input");p&&(p.focus(),p.select())},[]),n=pe(a=>{let u=a.target;Xo(u)&&(kr(a.key)?t(a):a.key==="Enter"&&r(a))},[t,r]),l=pe(a=>{let u=a.target;(u.matches("input")||u.querySelector("input"))&&(t(a),a.stopPropagation())},[t]),s=pe(a=>{a.target.removeEventListener("vuu-commit",o,!0)},[o]),i=pe(a=>{a.target.addEventListener("vuu-commit",o,!0)},[o]);return{onBlur:s,onDoubleClick:l,onFocus:i,onKeyDown:n}};import{getFullRange as to,NULL_RANGE as Ir,rangesAreSame as zr}from"@vuu-ui/vuu-utils";import{useCallback as Pe,useEffect as Yo,useMemo as Nr,useRef as Ee,useState as Fr}from"react";import{isRowSelectedLast as Sr,metadataKeys as Lr,WindowRange as Ar}from"@vuu-ui/vuu-utils";var{SELECTED:oo}=Lr,He=class{constructor({from:o,to:t}){this.rowCount=0;this.setRowCount=o=>{o<this.data.length&&(this.data.length=o),this.rowCount=o};this.range=new Ar(o,t),this.data=new Array(Math.max(0,t-o)),this.rowCount=0}add(o){let[t]=o;if(this.isWithinRange(t)){let r=t-this.range.from;if(this.data[r]=o,o[oo]){let n=this.data[r-1];Sr(n)&&(this.data[r-1]=n.slice(),this.data[r-1][oo]-=4)}}}getAtIndex(o){return this.range.isWithin(o)&&this.data[o-this.range.from]!=null?this.data[o-this.range.from]:void 0}isWithinRange(o){return this.range.isWithin(o)}setRange({from:o,to:t}){if(o!==this.range.from||t!==this.range.to){let[r,n]=this.range.overlap(o,t),l=new Array(Math.max(0,t-o));for(let s=r;s<n;s++){let i=this.getAtIndex(s);if(i){let a=s-o;l[a]=i}}this.data=l,this.range.from=o,this.range.to=t}}getSelectedRows(){return this.data.filter(o=>o[oo]!==0)}};var Gr=e=>e.type==="vuu-link-created"||e.type==="vuu-link-removed",jo=({dataSource:e,onFeatureInvocation:o,onSizeChange:t,onSubscribed:r,range:n=Ir,renderBufferSize:l=0})=>{let[,s]=Fr(null),i=Ee([]),a=Ee(!0),u=Ee(!1),p=Ee(n),m=Nr(()=>new He(to(n,l)),[]),b=Pe(c=>{for(let v of c)m.add(v);i.current=m.data,a.current&&s({})},[m]),C=Pe(c=>{c.type==="subscribed"?r==null||r(c):c.type==="viewport-update"?(typeof c.size=="number"&&(t==null||t(c.size),m.setRowCount(c.size)),c.rows?b(c.rows):typeof c.size=="number"&&(i.current=m.data,u.current=!0)):Gr(c)?o==null||o(c):console.log(`useDataSource unexpected message ${c.type}`)},[m,o,t,r,b]),h=Pe(()=>m.getSelectedRows(),[m]);Yo(()=>{var c;return a.current=!0,(c=e.resume)==null||c.call(e),()=>{var v;a.current=!1,(v=e.suspend)==null||v.call(e)}},[e]),Yo(()=>{var c;e.status==="disabled"?(c=e.enable)==null||c.call(e,C):e==null||e.subscribe({range:to(n,l)},C)},[e,C,n,l]);let x=Pe(c=>{if(!zr(c,p.current)){let v=to(c,l);m.setRange(v),e.range=p.current=v,e.emit("range",c)}},[e,m,l]);return{data:i.current,dataRef:i,getSelectedRows:h,range:p.current,setRange:x}};import{useMemo as Kr,useRef as Or}from"react";var qo=e=>{let o=Or(e);return Kr(()=>o.current,[])};import{getIndexFromRowElement as $r}from"@vuu-ui/vuu-utils";import{useControlled as Br}from"@salt-ds/core";import{useCallback as j,useEffect as et,useRef as ke}from"react";var nt=new Set(["Home","End","PageUp","PageDown","ArrowDown","ArrowUp"]),no=new Set(nt);no.add("ArrowLeft");no.add("ArrowRight");var Vr=(e,o)=>{switch(o){case"cell":return no.has(e);case"row":return nt.has(e);default:return!1}},Wr=["Home","End","PageUp","PageDown"],ot=e=>Wr.includes(e),Ur=[-1,-1];function tt(e,[o,t],r,n){return e==="ArrowUp"?o>-1?[o-1,t]:[o,t]:e==="ArrowDown"?o===-1?[0,t]:o===n-1?[o,t]:[o+1,t]:e==="ArrowRight"?t<r?[o,t+1]:[o,t]:e==="ArrowLeft"?t>1?[o,t-1]:[o,t]:[o,t]}var rt=({columnCount:e=0,containerRef:o,disableFocus:t=!1,defaultHighlightedIndex:r,disableHighlightOnFocus:n,highlightedIndex:l,navigationStyle:s,requestScroll:i,onHighlight:a,rowCount:u=0,viewportRowCount:p})=>{var re;let m=ke([-1,-1]),b=ke(),C=ke([-1,0]),h=ke(),[x,c]=Br({controlled:l,default:r,name:"UseKeyboardNavigation"});h.current=x;let v=j((f,w=!1)=>{a==null||a(f),c(f)},[a,c]),T=f=>f==null?void 0:f.closest("[role='columnHeader'],[role='cell']"),H=f=>{var w;if(f.role==="columnHeader")return[-1,parseInt((w=f.dataset.idx)!=null?w:"-1",10)];{let y=f.closest("[role='row']");if(y){let O=$r(y),g=Array.from(y.childNodes).indexOf(f);return[O,g]}}return Ur},R=j(f=>{var w;if(o.current){let y=_o(o,f);y&&(y!==b.current&&((w=b.current)==null||w.removeAttribute("tabindex"),b.current=y,y.setAttribute("tabindex","0")),i==null||i({type:"scroll-row",rowIndex:f[0]}),y.focus({preventScroll:!0}))}},[o,i]),E=j((f,w,y=!1)=>{let O=[f,w];C.current=O,s==="row"?c(f):R(O),y&&(m.current=O)},[R,s,c]),I=j((f,[w,y])=>new Promise(O=>{let g=w;switch(f){case"PageDown":{g=Math.min(u-1,w+p),g!==w&&(i==null||i({type:"scroll-page",direction:"down"}));break}case"PageUp":{g=Math.max(0,w-p),g!==w&&(i==null||i({type:"scroll-page",direction:"up"}));break}case"Home":{g=0,g!==w&&(i==null||i({type:"scroll-end",direction:"home"}));break}case"End":{g=u-1,g!==w&&(i==null||i({type:"scroll-end",direction:"end"}));break}}setTimeout(()=>{O([g,y])},35)}),[i,u,p]),M=j(()=>{var f;if(n!==!0&&(f=o.current)!=null&&f.contains(document.activeElement)){let w=T(document.activeElement);w&&(m.current=H(w),s==="row"&&c(m.current[0]))}},[n,o,s,c]),L=j(async f=>{let[w,y]=ot(f)?await I(f,C.current):tt(f,C.current,e,u),[O,g]=C.current;(w!==O||y!==g)&&E(w,y,!0)},[e,I,u,E]),z=j(f=>{i==null||i({type:"scroll-row",rowIndex:f})},[i]),V=j(async f=>{let{current:w}=h,[y]=ot(f)?await I(f,[w!=null?w:-1,0]):tt(f,[w!=null?w:-1,0],e,u);y!==w&&(v(y),z(y))},[e,I,u,z,v]);et(()=>{l!==void 0&&l!==-1&&z(l)},[l,z]);let Q=j(f=>{u>0&&Vr(f.key,s)&&(f.preventDefault(),f.stopPropagation(),s==="row"?V(f.key):L(f.key))},[u,s,V,L]),J=j(f=>{let w=f.target,y=T(w);if(y){let[O,g]=H(y);E(O,g)}},[E]),W=j(()=>{v(-1)},[v]),N=j(f=>{let w=Qo(f.target);w!==-1&&w!==h.current&&v(w)},[v]),P=j(()=>{L("ArrowDown")},[L]),q=((re=o.current)==null?void 0:re.firstChild)!=null;return et(()=>{if(q&&b.current===void 0&&!t){let{current:f}=o,w=(f==null?void 0:f.querySelector(qe(0)))||(f==null?void 0:f.querySelector(eo(0,0)));w&&(w.setAttribute("tabindex","0"),b.current=w)}},[o,t,q]),{highlightedIndexRef:h,navigate:P,onClick:J,onFocus:M,onKeyDown:Q,onMouseLeave:s==="row"?W:void 0,onMouseMove:s==="row"?N:void 0}};import{deselectItem as _r,dispatchMouseEvent as Xr,isRowSelected as Qr,metadataKeys as Jr,selectItem as Zr}from"@vuu-ui/vuu-utils";import{useCallback as ro,useRef as lt}from"react";var{IDX:Yr}=Jr,jr=[],qr=["Enter"," "],it=({highlightedIndexRef:e,selectionKeys:o=qr,selectionModel:t,onSelect:r,onSelectionChange:n})=>{let l=lt(-1),s=lt(jr),i=ro(p=>o.includes(p.key),[o]),a=ro((p,m,b)=>{let{[Yr]:C}=p,{current:h}=l,{current:x}=s,v=(Qr(p)?_r:Zr)(t,x,C,m,b,h);s.current=v,l.current=C,r==null||r(p),n==null||n(v)},[r,n,t]);return{onKeyDown:ro(p=>{if(i(p)){let{current:m}=e;if(m!==void 0&&m!==-1){let b=p.target.querySelector(`[aria-rowindex="${m}"]`);b&&Xr(b,"click")}}},[e,i]),onRowClick:a}};import{useContextMenu as el}from"@vuu-ui/vuu-popups";import{buildColumnMap as ol,getIndexFromRowElement as tl}from"@vuu-ui/vuu-utils";import{useCallback as nl}from"react";var rl=[],st=({columns:e,data:o,dataSource:t,getSelectedRows:r})=>{let[n]=el();return nl(s=>{let i=s.target,a=i==null?void 0:i.closest("div[role='cell']"),u=i==null?void 0:i.closest("div[role='row']");if(a&&u){let{selectedRowsCount:p}=t,m=ol(e),b=tl(u),C=Array.from(u.childNodes).indexOf(a),h=o.find(([c])=>c===b),x=e[C];n(s,"grid",{columnMap:m,columnName:x,row:h,selectedRows:p===0?rl:r(),viewport:t.viewport})}},[e,o,t,r,n])};import{applyFilterToColumns as ll,applyGroupByToColumns as il,applySortToColumns as sl,getCellRenderer as al,getColumnHeaderContentRenderer as ul,getColumnHeaderLabelRenderer as cl,getColumnLabel as ml,getTableHeadings as pl,getValueFormatter as dl,hasValidationRules as bl,isFilteredColumn as fl,isGroupColumn as gl,isPinned as Cl,logger as vl,replaceColumn as de,sortPinnedColumns as at,stripFilterFromColumns as hl,subscribedOnly as wl}from"@vuu-ui/vuu-utils";import{buildValidationChecker as xl}from"@vuu-ui/vuu-ui-controls";import{useReducer as Tl}from"react";var{info:lo}=vl("useTableModel"),Rl=100,yl=({serverDataType:e})=>e===void 0,ut=(e,o)=>{let t=o==null?void 0:o.columns.find(({name:r})=>r===e.name);return t?t.serverDataType:e.serverDataType},Dl=["int","long","double"],ct=e=>e===void 0?void 0:Dl.includes(e)?"right":"left",mt=e=>e.type==="columnSettings",pt=e=>e.type==="tableSettings",Ml=(e,o)=>{switch(lo==null||lo(`TableModelReducer ${o.type}`),o.type){case"init":return bt(o);case"moveColumn":return Pl(e,o);case"resizeColumn":return Sl(e,o);case"setTableSchema":return Ll(e,o);case"hideColumns":return El(e,o);case"showColumns":return kl(e,o);case"pinColumn":return Al(e,o);case"updateColumnProp":return he(e,o);case"tableConfig":return gt(e,o);default:return console.log(`unhandled action ${o.type}`),e}},dt=(e,o)=>{let[t,r]=Tl(Ml,{tableConfig:e,dataSource:o},bt),{columns:n,headings:l,tableConfig:s,...i}=t;return{columns:n,dispatchTableModelAction:r,headings:l,tableAttributes:i,tableConfig:s}};function bt({dataSource:e,tableConfig:o}){let{columns:t,...r}=o,{config:n,tableSchema:l}=e,s=t.filter(wl(n==null?void 0:n.columns)).map(ft(r,l)),i=s.some(Cl)?at(s):s,a={columns:i,headings:pl(i),tableConfig:o,...r};if(n){let{columns:u,...p}=n;a=gt(a,{type:"tableConfig",...p})}return a}var Hl=(e,o)=>o==="uppercase"?e.toUpperCase():o==="capitalize"?e[0].toUpperCase()+e.slice(1).toLowerCase():e,ft=(e,o)=>(t,r)=>{let{columnDefaultWidth:n=Rl,columnFormatHeader:l}=e,s=ut(t,o),{align:i=ct(s),name:a,label:u=ml(t),width:p=n,...m}=t,b={...m,align:i,CellRenderer:al(t),HeaderCellContentRenderer:ul(t),HeaderCellLabelRenderer:cl(t),clientSideEditValidationCheck:bl(t.type)?xl(t.type.renderer.rules):void 0,index:r+1,label:Hl(u,l),name:a,originalIdx:r,serverDataType:s,valueFormatter:dl(t,s),width:p};return gl(b)&&(b.columns=b.columns.map(C=>ft(e)(C,r))),b};function Pl(e,{column:o,moveBy:t}){let{columns:r}=e;if(typeof t=="number"){let n=r.indexOf(o),l=r.slice(),[s]=l.splice(n,1);return l.splice(n+t,0,s),{...e,columns:l}}return e}function El(e,{columns:o}){return o.some(t=>t.hidden!==!0)?o.reduce((t,r)=>r.hidden!==!0?he(t,{type:"updateColumnProp",column:r,hidden:!0}):t,e):e}function kl(e,{columns:o}){return o.some(t=>t.hidden)?o.reduce((t,r)=>r.hidden?he(t,{type:"updateColumnProp",column:r,hidden:!1}):t,e):e}function Sl(e,{column:o,phase:t,width:r}){let n="updateColumnProp",l=t!=="end";switch(t){case"begin":return he(e,{type:n,column:o,resizing:l});case"end":return he(e,{type:n,column:o,resizing:l,width:r});case"resize":return he(e,{type:n,column:o,width:r});default:throw Error(`useTableModel.resizeColumn, invalid resizePhase ${t}`)}}function Ll(e,{tableSchema:o}){let{columns:t}=e;if(t.some(yl)){let r=t.map(n=>{var s;let l=ut(n,o);return{...n,align:(s=n.align)!=null?s:ct(l),serverDataType:l}});return{...e,columns:r}}else return e}function Al(e,o){let{columns:t}=e,{column:r,pin:n}=o,l=t.find(s=>s.name===r.name);return l?(t=de(t,{...l,pin:n}),t=at(t),{...e,columns:t}):e}function he(e,o){let{columns:t,tableConfig:r}=e,{align:n,column:l,hidden:s,label:i,resizing:a,width:u}=o,p=t.find(m=>m.name===l.name);if(p&&((n==="left"||n==="right")&&(t=de(t,{...p,align:n})),typeof i=="string"&&(t=de(t,{...p,label:i})),typeof a=="boolean"&&(t=de(t,{...p,resizing:a})),typeof s=="boolean"&&(t=de(t,{...p,hidden:s})),typeof u=="number")){t=de(t,{...p,width:u});let m=r.columns.find(b=>b.name===l.name);m&&(r={...r,columns:de(r.columns,{...m,width:u})})}return{...e,columns:t,tableConfig:r}}function gt(e,{confirmed:o,filter:t,groupBy:r,sort:n}){let l=r!==void 0,s=typeof(t==null?void 0:t.filter)=="string",i=n&&n.sortDefs.length>0,a=e;return l&&(a={...e,columns:il(a.columns,r,o)}),i&&(a={...e,columns:sl(a.columns,n)}),s?a={...e,columns:ll(a.columns,t)}:a.columns.some(fl)&&(a={...e,columns:hl(a.columns)}),a}import{getColumnsInViewport as Ct,getRowElementAtIndex as Il,itemsChanged as zl}from"@vuu-ui/vuu-utils";import{useCallback as le,useEffect as Nl,useImperativeHandle as Fl,useMemo as vt,useRef as oe,useState as Gl}from"react";var Kl=100,ht=200,wt=e=>{let{clientHeight:o,clientWidth:t,scrollHeight:r,scrollWidth:n}=e;return[n-t,r-o]},Ol=(e,o)=>{if(e!==void 0){let{scrollTop:t}=e;return o>t?"fwd":"bwd"}},xt=(e,o)=>{let{clientHeight:t,clientWidth:r,scrollHeight:n,scrollLeft:l,scrollTop:s,scrollWidth:i}=e,a=i-r,u=l/(i-r),p=n-t,m=s/(n-t),b=Ol(o,s);return b==="fwd"&&m>.99?m=1:b==="bwd"&&m<.02&&(m=0),[l,u,a,s,m,p]},$l={scrollToIndex:()=>{},scrollToKey:()=>{}},Tt=({onAttach:e,onDetach:o})=>{let t=oe(null);return le(n=>{if(n)t.current=n,e==null||e(n);else if(t.current){let{current:l}=t;t.current=n,o==null||o(l)}},[e,o])},Rt=({columns:e,getRowAtPosition:o,onHorizontalScroll:t,onVerticalScroll:r,onVerticalScrollInSitu:n,rowHeight:l,scrollingApiRef:s,setRange:i,viewportMeasurements:a})=>{let u=oe(0),p=oe(l),m=oe(!1),b=oe({scrollTop:0,scrollLeft:0}),C=oe(!1),h=oe({scrollTop:0,scrollLeft:0}),x=oe(null),c=oe(null),v=oe(0),{appliedPageSize:T,isVirtualScroll:H,rowCount:R,totalHeaderHeight:E,viewportWidth:I}=a,M=oe([]),[,L]=Gl({}),z=oe(0);vt(()=>{let[g,D]=Ct(e,b.current.scrollLeft,b.current.scrollLeft+I+ht);z.current=D,M.current=g},[I,e]);let V=le(g=>{if(b.current.scrollLeft=g,t==null||t(g),Math.abs(g-v.current)>Kl){v.current=g;let[D,$]=Ct(e,g,g+I+ht);zl(M.current,D)&&(z.current=$,M.current=D,L({}))}},[e,t,I]),Q=le((g,D)=>{b.current.scrollTop=g,r==null||r(g,D);let $=o(g);$!==u.current&&(u.current=$,i({from:$,to:$+R})),n==null||n(0)},[o,r,n,i,R]),J=le(()=>{let{current:g}=c,{current:D}=x,{current:$}=m,{current:X}=h;if($)m.current=!1;else if(g&&D){C.current=!0;let[U,te,,B,S]=xt(D,X);X.scrollLeft=U,X.scrollTop=B;let[G,Z]=wt(D),K=Math.round(te*G),ce=S*Z;g.scrollTo({left:K,top:ce,behavior:"auto"})}n==null||n(0)},[n]),W=le(()=>{let{current:g}=C,{current:D}=c,{current:$}=x,{current:X}=b;if(D&&$){let[U,te,B,S,G,Z]=xt(D);m.current=!0,g?C.current=!1:($.scrollLeft=Math.round(te*B),$.scrollTop=G*Z),X.scrollTop!==S&&Q(S,G),X.scrollLeft!==U&&V(U)}},[Q,V]),N=le(g=>{x.current=g,g.addEventListener("scroll",J,{passive:!0})},[J]),P=le(g=>{x.current=null,g.removeEventListener("scroll",J)},[J]),q=le(g=>{c.current=g,g.addEventListener("scroll",W,{passive:!0})},[W]),re=le(g=>{c.current=null,g.removeEventListener("scroll",W)},[W]),f=Tt({onAttach:q,onDetach:re}),w=Tt({onAttach:N,onDetach:P}),y=le(g=>{let{current:D}=c;if(D){let[$,X]=wt(D),{scrollLeft:U,scrollTop:te}=D;if(m.current=!1,g.type==="scroll-row"){let B=Il(D,g.rowIndex);if(B!==null){let[S,G]=Jo(B,E);if(S&&G)if(H){let Z=S==="down"?1:-1;n==null||n(Z);let K=u.current+Z;u.current=K,i({from:K,to:K+R})}else{let Z=U,K=te;S==="up"||S==="down"?K=Math.min(Math.max(0,te+G),X):Z=Math.min(Math.max(0,U+G),$),D.scrollTo({top:K,left:Z,behavior:"smooth"})}}}else if(g.type==="scroll-page"){let{direction:B}=g;if(H){let S=B==="down"?R:-R;n==null||n(S);let G=u.current+S;u.current=G,i({from:G,to:G+R})}else{let S=B==="down"?T:-T,G=Math.min(Math.max(0,te+S),X);D.scrollTo({top:G,left:U,behavior:"auto"})}}else if(g.type==="scroll-end"){let{direction:B}=g,S=B==="end"?X:0;D.scrollTo({top:S,left:D.scrollLeft,behavior:"auto"})}}},[T,H,n,i,E,R]),O=vt(()=>({scrollToIndex:g=>{if(x.current){let D=(g-30)*20;x.current.scrollTop=D}},scrollToKey:g=>{console.log(`scrollToKey ${g}`)}}),[]);return Fl(s,()=>x.current?O:$l,[O]),Nl(()=>{if(l!==p.current)p.current=l,b.current.scrollTop>0&&c.current&&(c.current.scrollTop=0);else{let{current:g}=u,D={from:g,to:g+R};i(D)}},[l,i,R]),{columnsWithinViewport:M.current,scrollbarContainerRef:w,contentContainerRef:f,requestScroll:y,virtualColSpan:z.current}};import{actualRowPositioning as Bl,measurePinnedColumns as Vl,virtualRowPositioning as Wl}from"@vuu-ui/vuu-utils";import{useCallback as yt,useMemo as Se,useRef as io}from"react";var Ul=1e7,_l={appliedPageSize:0,contentHeight:0,contentWidth:0,getRowAtPosition:()=>-1,getRowOffset:()=>-1,horizontalScrollbarHeight:0,isVirtualScroll:!1,pinnedWidthLeft:0,pinnedWidthRight:0,rowCount:0,setInSituRowOffset:()=>{},setScrollTop:()=>{},totalHeaderHeight:0,verticalScrollbarWidth:0,viewportBodyHeight:0,viewportWidth:0},Dt=({columns:e,headerHeight:o,headings:t,rowCount:r,rowHeight:n,selectionEndSize:l=4,size:s})=>{let i=io(0),a=io(0),u=Math.min(n*r,Ul),p=r*n,m=p-u,{pinnedWidthLeft:b,pinnedWidthRight:C,unpinnedWidth:h}=Se(()=>Vl(e,l),[e,l]),x=io(o);Se(()=>{x.current=o*(1+t.length)},[o,t.length]);let[c,v,T]=Se(()=>{if(m){let[E,I,M]=Wl(n,m,a);return[z=>E(z,i.current),I,M]}else return Bl(n)},[m,n]),H=yt((E,I)=>{a.current=I},[]),R=yt(E=>{E===0?i.current=0:i.current=Math.max(0,i.current+E)},[]);return Se(()=>{if(s){let{current:E}=x,I=15,M=b+h+C,L=M>s.width?I:0,z=(s.height-o)/n,V=Number.isInteger(z)?z:Math.ceil(z),Q=s.height-E,J=u>Q?I:0,W=V*n*(u/p),N=s.width;return{appliedPageSize:W,contentHeight:u,contentWidth:M,getRowAtPosition:v,getRowOffset:c,isVirtualScroll:T,horizontalScrollbarHeight:L,pinnedWidthLeft:b,pinnedWidthRight:C,rowCount:V,setInSituRowOffset:R,setScrollTop:H,totalHeaderHeight:E,verticalScrollbarWidth:J,viewportBodyHeight:Q,viewportWidth:N}}else return _l},[v,c,o,T,b,h,C,u,n,R,H,s,p])};import{useLayoutProviderDispatch as Xl}from"@vuu-ui/vuu-layout";import{getCalculatedColumnType as Ql}from"@vuu-ui/vuu-utils";import{useCallback as be,useRef as Jl,useState as Zl}from"react";var Mt=({availableColumns:e,onAvailableColumnsChange:o,onConfigChange:t,onCreateCalculatedColumn:r,onDataSourceConfigChange:n,tableConfig:l})=>{let s=Xl(),i=Jl(),[a,u]=Zl(e),p=be((c,v,T)=>{s({type:"set-props",path:"#context-panel",props:{expanded:!0,content:{type:c,props:T},title:v}})},[s]),m=be(()=>{requestAnimationFrame(()=>{var c;(c=i.current)==null||c.call(i)})},[]),b=be(c=>{let v=a.concat({name:c.name,serverDataType:Ql(c)});u(v),o==null||o(v),requestAnimationFrame(()=>{var T;(T=i.current)==null||T.call(i)}),r(c)},[a,o,r]),C=be(c=>{p("ColumnSettings","Column Settings",{column:c.column,onCancelCreateColumn:m,onConfigChange:t,onCreateCalculatedColumn:b,tableConfig:l,vuuTable:c.vuuTable})},[m,b,t,p,l]),h=be(()=>{C({column:{name:"::",serverDataType:"string"},type:"columnSettings",vuuTable:{module:"SIMUL",table:"instruments"}})},[C]),x=be(c=>{let v=l.columns.find(T=>T.name===c);v&&C({type:"columnSettings",column:v,vuuTable:{module:"SIMUL",table:"instruments"}})},[C,l.columns]);return i.current=be(()=>{p("TableSettings","DataGrid Settings",{availableColumns:a!=null?a:l.columns.map(({name:c,serverDataType:v})=>({name:c,serverDataType:v})),onAddCalculatedColumn:h,onConfigChange:t,onDataSourceConfigChange:n,onNavigateToColumn:x,tableConfig:l})},[a,h,x,t,n,p,l]),{showColumnSettingsPanel:C,showTableSettingsPanel:i.current}};import{getRowClassNameGenerator as Yl}from"@vuu-ui/vuu-utils";import{useMemo as jl}from"react";var ql=e=>{let o=[];return e==null||e.forEach(t=>{let r=Yl(t);r&&o.push(r.fn)}),(t,r)=>{let n=[];return o==null||o.forEach(l=>{let s=l(t,r);s&&n.push(s)}),n.join(" ")}},Ht=({rowClassNameGenerators:e})=>jl(()=>ql(e),[e]);var Le=e=>e,{KEY:di,IS_EXPANDED:Et,IS_LEAF:kt}=si,bi={draggable:void 0,onMouseDown:void 0},fi=()=>bi,gi=(e,o)=>({...e,columns:e.columns.concat(o)}),St=({allowDragDrop:e=!1,availableColumns:o,config:t,containerRef:r,dataSource:n,disableFocus:l,headerHeight:s=25,highlightedIndex:i,id:a,navigationStyle:u="cell",onAvailableColumnsChange:p,onConfigChange:m,onDragStart:b,onDrop:C,onFeatureInvocation:h,onHighlight:x,onRowClick:c,onSelect:v,onSelectionChange:T,renderBufferSize:H=0,rowHeight:R=20,scrollingApiRef:E,selectionModel:I,size:M})=>{let[L,z]=pi(n.size);if(n===void 0)throw Error("no data source provided to Vuu Table");let V=Ht(t),Q=e?ei:fi,J=Pt(()=>Oo(n),[n]),W=F(d=>{z(d)},[]),{columns:N,dispatchTableModelAction:P,headings:q,tableAttributes:re,tableConfig:f}=dt(t,n);ui(()=>{P({type:"init",tableConfig:t,dataSource:n})},[t,n,P]);let w=F(d=>{P({type:"init",tableConfig:d,dataSource:n}),m==null||m(Le(d))},[n,P,m]),y=Pt(()=>ti(n.columns),[n.columns]),O=F(({tableSchema:d})=>{d?P({type:"setTableSchema",tableSchema:d}):console.log("subscription message with no schema")},[P]),{getRowAtPosition:g,getRowOffset:D,setInSituRowOffset:$,setScrollTop:X,...U}=Dt({columns:N,headerHeight:s,headings:q,rowCount:L,rowHeight:R,size:M}),te=qo({from:0,to:U.rowCount}),{data:B,dataRef:S,getSelectedRows:G,range:Z,setRange:K}=jo({dataSource:n,onFeatureInvocation:h,renderBufferSize:H,onSizeChange:W,onSubscribed:O,range:te}),{requestScroll:ce,...Ie}=Rt({columns:N,getRowAtPosition:g,rowHeight:R,scrollingApiRef:E,setRange:K,onVerticalScroll:X,onVerticalScrollInSitu:$,viewportMeasurements:U}),Re=F(d=>{P({type:"init",tableConfig:d,dataSource:n}),m==null||m(Le(d))},[n,P,m]),me=F(d=>{n.config={...n.config,...d}},[n]);ci(()=>{n.on("config",(d,k,A)=>{((A==null?void 0:A.filterChanged)||(A==null?void 0:A.groupByChanged))&&n.range.from>0&&ce({type:"scroll-end",direction:"home"}),P({type:"tableConfig",...d,confirmed:k})})},[n,P,ce]);let Gt=F(d=>{n.columns=n.columns.concat(d.name),w(gi(f,d))},[n,f,w]),uo=F(d=>{let{columns:k}=d,A=k.map(Y=>Y.name),_={...f,columns:f.columns.map(Y=>A.includes(Y.name)?{...Y,hidden:!0}:Y)};w(_)},[f,w]),co=F(d=>{w({...f,columns:ai(f.columns,{...d.column,pin:d.pin})})},[f,w]),{showColumnSettingsPanel:mo,showTableSettingsPanel:po}=Mt({availableColumns:o!=null?o:f.columns.map(({name:d,serverDataType:k="string"})=>({name:d,serverDataType:k})),onAvailableColumnsChange:p,onConfigChange:Re,onCreateCalculatedColumn:Gt,onDataSourceConfigChange:me,tableConfig:f}),Kt=F(d=>{if(mt(d))mo(d);else if(pt(d))po();else switch(d.type){case"hideColumns":return uo(d);case"pinColumn":return co(d);default:P(d)}},[P,uo,co,mo,po]),Ot=Wo({dataSource:n,onPersistentColumnOperation:Kt}),$t=F((d,k=!1,A)=>{n&&(n.sort=oi(n.sort,d,k,A))},[n]),ze=mi(),Bt=F((d,k,A)=>{var Y,we,se;let _=N.find(ee=>ee.name===k);if(_)if(d==="resize")(Y=ze.current)==null||Y.forEach(ee=>{ee.style.width=`${A}px`});else if(d==="end")ze.current=void 0,ii(A)&&(P({type:"resizeColumn",phase:d,column:_,width:A}),m==null||m(Le(Uo(f,{type:"col-size",column:_,width:A}))));else{let ee=`[aria-colindex='${_.index}']`;ze.current=Array.from((se=(we=r.current)==null?void 0:we.querySelectorAll(`.vuuTableCell${ee},.vuuTableHeaderCell${ee}`))!=null?se:[]),P({type:"resizeColumn",phase:d,column:_,width:A})}else throw Error(`useDataTable.handleColumnResize, column ${k} not found`)},[N,P,m,f,r]),Vt=F((d,k)=>{var Y,we;let A=li(k,d,y),_=d[di];if(d[Et]){if(n.closeTreeNode(_,!0),A){let se=N.indexOf(k),ee=(Y=n.getRowsAtDepth)==null?void 0:Y.call(n,se+1);ee&&!ee.some(fe=>fe[Et]||fe[kt])&&P({type:"hideColumns",columns:N.slice(se+2)})}}else if(n.openTreeNode(_),A){let se=(we=n.getChildRows)==null?void 0:we.call(n,_),ee=N.indexOf(k)+1,fe=[N[ee]];se&&se.some(Ne=>Ne[kt])&&fe.push(N[ee+1]),fe.some(Ne=>Ne.hidden)&&P({type:"showColumns",columns:fe})}},[y,N,n,P]),{highlightedIndexRef:bo,navigate:Wt,onFocus:fo,onKeyDown:go,...Ut}=rt({columnCount:N.filter(d=>d.hidden!==!0).length,containerRef:r,disableFocus:l,highlightedIndex:i,navigationStyle:u,requestScroll:ce,rowCount:n==null?void 0:n.size,onHighlight:x,viewportRange:Z,viewportRowCount:U.rowCount}),{onBlur:_t,onDoubleClick:Xt,onKeyDown:Co,onFocus:vo}=Zo({navigate:Wt}),Qt=F(d=>{fo(),d.defaultPrevented||vo(d)},[vo,fo]),Jt=st({columns:N,data:B,dataSource:n,getSelectedRows:G}),Zt=F(d=>{n.groupBy=d.map(k=>k.name)},[n]),Yt=F(d=>{ri(d)?n.groupBy=[]:n&&n.groupBy.includes(d.name)&&(n.groupBy=n.groupBy.filter(k=>k!==d.name))},[n]),jt=F(d=>{n.select(d),T==null||T(d)},[n,T]),{onKeyDown:ho,onRowClick:wo}=it({highlightedIndexRef:bo,onSelect:v,onSelectionChange:jt,selectionModel:I}),qt=F(d=>{go(d),d.defaultPrevented||Co(d),d.defaultPrevented||ho(d)},[go,Co,ho]),en=F((d,k,A)=>{wo(d,k,A),c==null||c(d)},[c,wo]),on=F(d=>{let k={...f,columns:d};P({type:"init",tableConfig:k,dataSource:n}),m==null||m(Le(k))},[n,P,m,f]),tn=F(d=>{C==null||C(d)},[C]),nn=F(async(d,k,A)=>n.applyEdit(d,k,A),[n]),rn=F(d=>{let{initialDragElement:k}=d,A=ni(k),_=S.current.find(Y=>Y[0]===A);_&&d.setPayload(_),b==null||b(d)},[S,b]),{onMouseDown:ln,draggable:sn}=Q({allowDragDrop:e,containerRef:r,draggableClassName:"vuuTable",id:a,onDragStart:rn,onDrop:tn,orientation:"vertical",itemQuery:".vuuTableRow"});return{...Ut,"aria-rowcount":n.size,rowClassNameGenerator:V,draggableRow:sn,onBlur:_t,onDoubleClick:Xt,onFocus:Qt,onKeyDown:qt,onMouseDown:ln,columnMap:y,columns:N,data:B,getRowOffset:D,handleContextMenuAction:Ot,headings:q,highlightedIndex:bo.current,menuBuilder:J,onContextMenu:Jt,onDataEdited:nn,onMoveColumn:on,onMoveGroupColumn:Zt,onRemoveGroupColumn:Yt,onRowClick:en,onSortColumn:$t,onResizeColumn:Bt,onToggleGroup:Vt,scrollProps:Ie,tableAttributes:re,tableConfig:f,viewportMeasurements:U}};import{isValidNumber as Ci}from"@vuu-ui/vuu-utils";import{useCallback as vi,useMemo as hi,useRef as wi,useState as xi}from"react";var Lt=({rowHeight:e=0})=>{let[o,t]=xi(e),r=wi(o),n=hi(()=>new ResizeObserver(s=>{for(let i of s){let{height:a}=i.contentRect,u=Math.round(a);Ci(u)&&r.current!==u&&(r.current=u,t(u))}}),[]),l=vi(s=>{if(s){if(e===0){let{height:i}=s.getBoundingClientRect();console.log(`measured rowHeight = ${i}`),n.observe(s),t(i)}}else n.disconnect()},[n,e]);return{rowHeight:o,rowRef:l}};import{jsx as ue,jsxs as so}from"react/jsx-runtime";var ie="vuuTable",{IDX:ki,RENDER_IDX:Si}=yi,Li=({Row:e=Ue,allowDragDrop:o,availableColumns:t,config:r,containerRef:n,dataSource:l,disableFocus:s=!1,highlightedIndex:i,id:a,navigationStyle:u="cell",onAvailableColumnsChange:p,onConfigChange:m,onDragStart:b,onDrop:C,onFeatureInvocation:h,onHighlight:x,onRowClick:c,onSelect:v,onSelectionChange:T,renderBufferSize:H=5,rowHeight:R,scrollingApiRef:E,selectionModel:I="extended",showColumnHeaders:M=!0,headerHeight:L=M?R*1.25:0,size:z})=>{let V=Di(a),{columnMap:Q,columns:J,data:W,draggableRow:N,getRowOffset:P,handleContextMenuAction:q,headings:re,highlightedIndex:f,menuBuilder:w,onDataEdited:y,onMoveColumn:O,onMoveGroupColumn:g,onRemoveGroupColumn:D,onResizeColumn:$,onRowClick:X,onSortColumn:U,onToggleGroup:te,rowClassNameGenerator:B,scrollProps:S,tableAttributes:G,tableConfig:Z,viewportMeasurements:K,...ce}=St({allowDragDrop:o,availableColumns:t,config:r,containerRef:n,dataSource:l,disableFocus:s,headerHeight:L,highlightedIndex:i,id:V,navigationStyle:u,onAvailableColumnsChange:p,onConfigChange:m,onDragStart:b,onDrop:C,onFeatureInvocation:h,onHighlight:x,onRowClick:c,onSelect:v,onSelectionChange:T,renderBufferSize:H,rowHeight:R,scrollingApiRef:E,selectionModel:I,size:z}),Ie=At(`${ie}-contentContainer`,{[`${ie}-colLines`]:G.columnSeparators,[`${ie}-rowLines`]:G.rowSeparators,[`${ie}-zebra`]:G.zebraStripes}),Re={"--content-height":`${K.contentHeight}px`,"--content-width":`${K.contentWidth}px`,"--horizontal-scrollbar-height":`${K.horizontalScrollbarHeight}px`,"--pinned-width-left":`${K.pinnedWidthLeft}px`,"--pinned-width-right":`${K.pinnedWidthRight}px`,"--header-height":`${L}px`,"--row-height-prop":`${R}px`,"--total-header-height":`${K.totalHeaderHeight}px`,"--vertical-scrollbar-width":`${K.verticalScrollbarWidth}px`,"--viewport-body-height":`${K.viewportBodyHeight}px`};return so(Ti,{menuActionHandler:q,menuBuilder:w,children:[ue("div",{className:`${ie}-scrollbarContainer`,ref:S.scrollbarContainerRef,style:Re,children:ue("div",{className:`${ie}-scrollbarContent`})}),ue("div",{className:Ie,ref:S.contentContainerRef,style:Re,children:so("div",{...ce,className:`${ie}-table`,role:"table",tabIndex:s?void 0:-1,children:[M?ue(Qe,{columns:S.columnsWithinViewport,headings:re,onMoveColumn:O,onMoveGroupColumn:g,onRemoveGroupColumn:D,onResizeColumn:$,onSortColumn:U,tableConfig:Z,tableId:V,virtualColSpan:S.virtualColSpan}):null,ue("div",{className:`${ie}-body`,children:W.map(me=>ue(e,{"aria-rowindex":me[0]+1,classNameGenerator:B,columnMap:Q,columns:S.columnsWithinViewport,highlighted:f===me[ki],onClick:X,onDataEdited:y,row:me,offset:P(me),onToggleGroup:te,virtualColSpan:S.virtualColSpan,zebraStripes:G.zebraStripes},me[Si]))})]})}),N]})},_m=Hi(function({Row:o,allowDragDrop:t,availableColumns:r,className:n,config:l,dataSource:s,disableFocus:i,highlightedIndex:a,id:u,navigationStyle:p,onAvailableColumnsChange:m,onConfigChange:b,onDragStart:C,onDrop:h,onFeatureInvocation:x,onHighlight:c,onRowClick:v,onSelect:T,onSelectionChange:H,renderBufferSize:R,rowHeight:E,scrollingApiRef:I,selectionModel:M,showColumnHeaders:L,headerHeight:z,style:V,...Q},J){let W=Pi(null),[N,P]=Ei(),{rowHeight:q,rowRef:re}=Lt({rowHeight:E});if(l===void 0)throw Error("vuu Table requires config prop. Minimum config is list of Column Descriptors");if(s===void 0)throw Error("vuu Table requires dataSource prop");return so(Ri,{...Q,className:At(ie,n),id:u,onResize:P,ref:Mi(W,J),children:[ue(No,{ref:re,height:E}),N&&q?ue(Li,{Row:o,allowDragDrop:t,availableColumns:r,config:l,containerRef:W,dataSource:s,disableFocus:i,headerHeight:z,highlightedIndex:a,id:u,navigationStyle:p,onAvailableColumnsChange:m,onConfigChange:b,onDragStart:C,onDrop:h,onFeatureInvocation:x,onHighlight:c,onRowClick:v,onSelect:T,onSelectionChange:H,renderBufferSize:R,rowHeight:q,scrollingApiRef:I,selectionModel:M,showColumnHeaders:L,size:N}):null]})});import{memo as Ai,useCallback as Ii}from"react";import{CheckboxIcon as zi,WarnCommit as Ni}from"@vuu-ui/vuu-ui-controls";import{Checkbox as Fi}from"@salt-ds/core";import{dataColumnAndKeyUnchanged as Gi,dispatchCustomEvent as Ki,registerComponent as Oi}from"@vuu-ui/vuu-utils";import{jsx as It}from"react/jsx-runtime";var zt=Ai(({column:e,columnMap:o,onCommit:t=Ni,row:r})=>{let n=o[e.name],l=!!r[n],s=Ii(i=>async a=>{let u=await t(i);return u===!0&&Ki(a.target,"vuu-commit"),u},[t]);return e.editable?It(Fi,{checked:l,onClick:s(!l)}):It(zi,{checked:l,disabled:!0})},Gi);zt.displayName="CheckboxCell";Oi("checkbox-cell",zt,"cell-renderer",{serverDataType:"boolean"});import{registerComponent as $i}from"@vuu-ui/vuu-utils";import{Input as Bi}from"@salt-ds/core";import{useEditableText as Vi}from"@vuu-ui/vuu-ui-controls";import Wi from"clsx";import{jsx as ao}from"react/jsx-runtime";var Ae="vuuTableInputCell",Ui=()=>(console.warn("onCommit handler has not been provided to InputCell cell renderer"),Promise.resolve(!0)),_i=({column:e,columnMap:o,onCommit:t=Ui,row:r})=>{let n=o[e.name],l=r[n],{align:s="left",clientSideEditValidationCheck:i}=e,{warningMessage:a,...u}=Vi({initialValue:l,onCommit:t,clientSideEditValidationCheck:i}),p=a&&s==="left"?ao("span",{className:`${Ae}-icon`,"data-icon":"error"}):void 0,m=a&&s==="right"?ao("span",{className:`${Ae}-icon`,"data-icon":"error"}):void 0;return ao(Bi,{...u,className:Wi(Ae,{[`${Ae}-error`]:a!==void 0}),endAdornment:p,startAdornment:m})};$i("input-cell",_i,"cell-renderer",{userCanAssign:!1});import{WarnCommit as Xi}from"@vuu-ui/vuu-ui-controls";import{dataColumnAndKeyUnchanged as Qi,dispatchCustomEvent as Ji,isTypeDescriptor as Zi,isValueListRenderer as Yi,registerComponent as ji}from"@vuu-ui/vuu-utils";import qi from"clsx";import{memo as es,useCallback as os}from"react";import{CycleStateButton as ts}from"@vuu-ui/vuu-ui-controls";import{jsx as ls}from"react/jsx-runtime";var Nt="vuuTableToggleCell",ns=({name:e,type:o})=>{if(Zi(o)&&Yi(o.renderer))return o.renderer.values;throw Error(`useLookupValues column ${e} has not been configured with a values list`)},rs=es(function({column:o,columnMap:t,onCommit:r=Xi,row:n}){let l=ns(o),s=t[o.name],i=n[s],a=os((u,p)=>r(p).then(m=>(m===!0&&Ji(u.target,"vuu-commit"),m)),[r]);return ls(ts,{className:qi(Nt,`${Nt}-${o.name}`),onCommit:a,value:i,values:l,variant:"cta",children:i})},Qi);ji("toggle-cell",rs,"cell-renderer",{userCanAssign:!1});import{useStateRef as is}from"@vuu-ui/vuu-ui-controls";import{dispatchMouseEvent as ss}from"@vuu-ui/vuu-utils";import{useCallback as Ft,useRef as as}from"react";var Np=(e,o)=>{let t=as(null),[r,n]=is(e),l=Ft(i=>{var a;if(i.key==="ArrowDown")n((u=-1)=>Math.min(o-1,u+1));else if(i.key==="ArrowUp")n((u=-1)=>Math.max(0,u-1));else if(i.key==="Enter"||i.key===" "){let{current:u}=r,p=(a=t.current)==null?void 0:a.querySelector(`[aria-rowindex="${u}"]`);p&&ss(p,"click")}},[r,o,n]),s=Ft(i=>{n(i)},[n]);return{highlightedIndexRef:r,onHighlight:s,onKeyDown:l,tableRef:t}};export{zt as CheckboxCell,Be as GroupHeaderCellNext,Po as HeaderCell,_i as InputCell,_m as Table,So as TableCell,Lo as TableGroupCell,rs as ToggleCell,mt as isShowColumnSettings,pt as isShowTableSettings,$l as noScrolling,Uo as updateTableConfig,Np as useControlledTableNavigation,dt as useTableModel,Rt as useTableScroll,Dt as useTableViewport};
1
+ import{OverflowContainer as Rn}from"@vuu-ui/vuu-ui-controls";import{useLayoutEffectSkipFirst as yn}from"@vuu-ui/vuu-utils";import Dn from"clsx";import{useCallback as Hn,useRef as Mn,useState as Pn}from"react";import un from"clsx";import{useCallback as cn}from"react";import{jsx as mn,jsxs as dn}from"react/jsx-runtime";var xo="vuuColumnHeaderPill",ge=({children:e,className:o,column:t,onRemove:r,removable:n,...l})=>{if(n&&typeof r!="function")throw Error("ColumnHeaderPill onRemove prop must be provided if Pill is removable");let a=cn(i=>{i.preventDefault(),i.stopPropagation(),r==null||r(t)},[t,r]);return dn("div",{...l,className:un(xo,o),children:[e,n?mn("span",{className:`${xo}-removeButton`,role:"button","data-icon":"cross",onClick:a}):null]})};import{jsx as Fe,jsxs as pn}from"react/jsx-runtime";var To=({column:e,...o})=>{let{name:t,sorted:r}=e,n=typeof r=="number"?r<0?"arrow-down":"arrow-up":r==="A"?"arrow-up":r==="D"?"arrow-down":void 0;return pn(ge,{...o,column:e,children:[Fe("span",{className:"vuuGroupColumnPill-label",children:t}),n!==void 0?Fe("span",{"data-icon":n}):null,typeof r=="number"?Fe("span",{className:"vuuSortPosition",children:Math.abs(r)}):null]})};import{jsx as Ro,jsxs as bn}from"react/jsx-runtime";var yo=({column:e})=>{if(!e.sorted)return null;let o=typeof e.sorted=="number"?e.sorted<0?"arrow-down":"arrow-up":e.sorted==="A"?"arrow-up":"arrow-down";return bn(ge,{column:e,children:[Ro("span",{"data-icon":o}),typeof e.sorted=="number"?Ro("span",{className:"vuuSortPosition",children:Math.abs(e.sorted)}):null]})};import{useCallback as Ge,useRef as fn}from"react";import{jsx as Cn}from"react/jsx-runtime";var Do=()=>{},gn="vuuColumnResizerNext",ye=({onDrag:e,onDragEnd:o=Do,onDragStart:t=Do})=>{let r=fn({start:0,now:0}),n=Ge(i=>{i.stopPropagation&&i.stopPropagation(),i.preventDefault&&i.preventDefault();let{current:s}=r,u=Math.round(i.clientX),d=u-s.now,m=s.now-s.start;r.current.now=u,d!==0&&e(i,d,m)},[e]),l=Ge(i=>{window.removeEventListener("mouseup",l),window.removeEventListener("mousemove",n);let{current:s}=r,u=s.now-s.start;o(i,u)},[o,n]),a=Ge(i=>{let{current:s}=r;t(i),s.now=s.start=Math.round(i.clientX),window.addEventListener("mouseup",l),window.addEventListener("mousemove",n),i.stopPropagation&&i.stopPropagation(),i.preventDefault&&i.preventDefault()},[t,n,l]);return Cn("div",{className:gn,onMouseDown:a})};import{useCallback as Ke,useRef as vn,useState as hn}from"react";var De=({column:e,onResize:o,rootRef:t})=>{let r=vn({start:0,now:0}),[n,l]=hn(!1),{name:a}=e,i=Ke(()=>{if(o&&t.current){let{current:d}=r,{width:m}=t.current.getBoundingClientRect();d.start=d.now=Math.round(m),l(!0),o==null||o("begin",a)}},[a,o,t]),s=Ke((d,m,b)=>{if(t.current&&o){let{current:C}=r,h=C.start+b;h!==C.now&&h>0&&(o("resize",a,h),C.now=h)}},[a,o,t]),u=Ke(()=>{if(o){let{current:d}=r;o("end",a,d.now),setTimeout(()=>{l(!1)},80)}},[a,o]);return{isResizing:n,onDrag:s,onDragStart:i,onDragEnd:u}};import{getColumnStyle as wn}from"@vuu-ui/vuu-utils";import xn from"clsx";import{useMemo as Tn}from"react";var se=(e,o,t)=>Tn(()=>{let r=xn(o,{vuuPinFloating:e.pin==="floating",vuuPinLeft:e.pin==="left",vuuPinRight:e.pin==="right",vuuEndPin:t&&e.endPin,[`${o}-editable`]:e.editable,[`${o}-right`]:e.align==="right"}),n=wn(e);return{className:r,style:n}},[e,o,t]);import{jsx as $e,jsxs as kn}from"react/jsx-runtime";import{createElement as Sn}from"react";var Oe="vuuTableGroupHeaderCell",En=(e,o)=>e===o?e:o,Be=({column:e,className:o,onMoveColumn:t,onRemoveColumn:r,onResize:n,...l})=>{let a=Mn(null),{isResizing:i,...s}=De({column:e,onResize:n,rootRef:a}),[u,d]=Pn(e.columns),{className:m,style:b}=se(e,Oe,!0),C=u.length>1?{removable:!0,onRemove:r}:void 0,h=Hn((x,c)=>{d(v=>{let T=v.slice(),[M]=T.splice(x,1);if(c===-1){let y=T.concat(M);return t==null||t(y),y}else return T.splice(c,0,M),t==null||t(T),T})},[t]);return yn(()=>{d(x=>En(x,e.columns))},[e.columns]),kn("div",{...l,className:Dn(m,o,{[`${Oe}-pending`]:e.groupConfirmed===!1}),ref:a,role:"columnheader",style:b,children:[$e(Rn,{allowDragDrop:!0,className:`${Oe}-inner`,onMoveItem:h,overflowPosition:"start",children:u.map(x=>Sn(To,{...C,column:x,key:x.name}))}),$e(ge,{column:e,removable:!0,onRemove:r}),e.resizeable!==!1?$e(ye,{...s}):null]})};import Nn from"clsx";import{useCallback as Fn,useRef as Gn}from"react";import{PopupMenu as Ln}from"@vuu-ui/vuu-popups";import An from"clsx";import{jsx as zn}from"react/jsx-runtime";var In="vuuColumnMenu",Ho=({className:e,column:o})=>zn(Ln,{className:An(In,e),"data-embedded":!0,menuLocation:"column-menu",menuOptions:{column:o}});import{jsx as Ce,jsxs as Kn}from"react/jsx-runtime";var He="vuuTableHeaderCell",Mo=({className:e,column:o,onClick:t,onResize:r,...n})=>{var T;let{HeaderCellContentRenderer:l,HeaderCellLabelRenderer:a}=o,i=Gn(null),{isResizing:s,...u}=De({column:o,onResize:r,rootRef:i}),d=Fn(M=>{!s&&(t==null||t(M))},[s,t]),{className:m,style:b}=se(o,He,!0),C=Ce(Ho,{column:o}),h=a?Ce(a,{className:`${He}-label`,column:o}):Ce("div",{className:`${He}-label`,children:(T=o.label)!=null?T:o.name}),x=l?[Ce(l,{column:o},"content")]:[],c=Ce(yo,{column:o}),v=o.align==="right"?[c,h].concat(x).concat(C):[C,h,c].concat(x);return Kn("div",{...n,className:Nn(m,e,{[`${He}-resizing`]:s}),onClick:d,ref:i,role:"columnheader",style:b,children:[...v,o.resizeable!==!1?Ce(ye,{...u}):null]})};import{ContextMenuProvider as xi}from"@vuu-ui/vuu-popups";import{MeasuredContainer as Ti}from"@vuu-ui/vuu-ui-controls";import{metadataKeys as Ri,useId as yi}from"@vuu-ui/vuu-utils";import{useForkRef as Di}from"@salt-ds/core";import At from"clsx";import{forwardRef as Hi,useRef as Mi,useState as Pi}from"react";import{isGroupColumn as Lo,isJsonColumn as Qn,isJsonGroup as Jn,metadataKeys as Zn,isNotHidden as Yn,RowSelected as jn}from"@vuu-ui/vuu-utils";import Io from"clsx";import{forwardRef as qn,memo as er,useCallback as Ao}from"react";import{isNumericColumn as On}from"@vuu-ui/vuu-utils";import{useCallback as Po}from"react";import{jsx as Eo}from"react/jsx-runtime";var $n="vuuTableCell",So=({column:e,columnMap:o,onClick:t,onDataEdited:r,row:n})=>{let{className:l,style:a}=se(e,$n),{CellRenderer:i,index:s,name:u,valueFormatter:d}=e,m=o[u],b=Po(h=>{if(r){let x=h;return On(e)&&typeof h=="string"&&(x=e.serverDataType==="double"?parseFloat(h):parseInt(h)),r==null?void 0:r(n,u,x)}else throw Error("TableCell onDataEdited prop not supplied for an editable cell")},[e,u,r,n]),C=Po(h=>{t==null||t(h,e)},[e,t]);return Eo("div",{"aria-colindex":s,className:l,onClick:t?C:void 0,role:"cell",style:a,children:i?Eo(i,{column:e,columnMap:o,onCommit:b,row:n}):d(n[m])})};import{getGroupValueAndOffset as Bn,metadataKeys as Vn}from"@vuu-ui/vuu-utils";import{useCallback as Wn}from"react";import Un from"clsx";import{jsx as We,jsxs as Xn}from"react/jsx-runtime";var{IS_LEAF:_n}=Vn,Ve="vuuTableGroupCell",ko=({column:e,columnMap:o,onClick:t,row:r})=>{let{columns:n}=e,[l,a]=Bn(n,r,o),{className:i,style:s}=se(e,Ve),u=Wn(b=>{t==null||t(b,e)},[e,t]),d=r[_n],m=Array(a).fill(0).map((b,C)=>We("span",{className:`${Ve}-spacer`},C));return Xn("div",{className:Un(i,"vuuTableCell"),role:"cell",style:s,onClick:d?void 0:u,children:[m,d?null:We("span",{className:`${Ve}-toggle`,"data-icon":"triangle-right"}),We("span",{children:l})]})};import{jsx as xe,jsxs as rr}from"react/jsx-runtime";var{IDX:or,IS_EXPANDED:tr,SELECTED:nr}=Zn,ne="vuuTableRow",zo=qn(function({height:o},t){return xe("div",{"aria-hidden":!0,className:Io(ne,`${ne}-proxy`),ref:t,style:{height:o}})}),Ue=er(({className:e,classNameGenerator:o,columnMap:t,columns:r,highlighted:n,row:l,offset:a,onClick:i,onDataEdited:s,onToggleGroup:u,virtualColSpan:d=0,zebraStripes:m=!1,...b})=>{let{[or]:C,[tr]:h,[nr]:x}=l,c=Ao(D=>{let L=D.shiftKey,z=D.ctrlKey||D.metaKey;i==null||i(D,l,L,z)},[i,l]),{True:v,First:T,Last:M}=jn,y=Io(ne,e,o==null?void 0:o(l,t),{[`${ne}-even`]:m&&C%2===0,[`${ne}-expanded`]:h,[`${ne}-highlighted`]:n,[`${ne}-selected`]:x&v,[`${ne}-selectedStart`]:x&T,[`${ne}-selectedEnd`]:x&M}),S={transform:`translate3d(0px, ${a}px, 0px)`},I=Ao((D,L)=>{(Lo(L)||Jn(L,l,t))&&(D.stopPropagation(),u==null||u(l,L))},[t,u,l]);return rr("div",{...b,role:"row",className:y,onClick:c,style:S,children:[xe("span",{className:`${ne}-selectionDecorator vuuStickyLeft`}),d>0?xe("div",{className:"vuuTableCell",style:{width:d}}):null,r.filter(Yn).map(D=>{let L=Lo(D),z=Qn(D);return xe(L?ko:So,{column:D,columnMap:t,onClick:L||z?I:void 0,onDataEdited:s,row:l},D.name)}),xe("span",{className:`${ne}-selectionDecorator vuuStickyRight`})]})});Ue.displayName="Row";import{isGroupColumn as ar,isNotHidden as sr}from"@vuu-ui/vuu-utils";import ur from"clsx";import{memo as cr}from"react";import{useDragDrop as lr}from"@vuu-ui/vuu-ui-controls";import{moveColumnTo as _e,visibleColumnAtIndex as ir}from"@vuu-ui/vuu-utils";import{useCallback as Xe,useRef as No}from"react";var Fo=({columns:e,onMoveColumn:o,onSortColumn:t,tableConfig:r})=>{let n=No(null),l=No(null),a=Xe(b=>{n.current=b,b?l.current=b.closest(".vuuTable-contentContainer"):l.current=null},[]),i=Xe(({fromIndex:b,toIndex:C})=>{let h=e[b],x=_e(e,h,C),c=({name:y})=>S=>S.name===y,v=x.findIndex(c(h)),T=x[v+1],M=T?r.columns.findIndex(c(T)):-1;C>b&&M!==-1?o(_e(r.columns,h,M-1)):o(_e(r.columns,h,M))},[e,o,r.columns]),s=Xe(b=>{var T;let h=b.target.closest(".vuuTableHeaderCell"),x=parseInt((T=h==null?void 0:h.dataset.index)!=null?T:"-1"),c=ir(e,x),v=b.shiftKey;c&&t(c,v)},[e,t]),{onMouseDown:u,draggable:d,...m}=lr({allowDragDrop:!0,containerRef:n,draggableClassName:"vuuTable",itemQuery:".vuuTableHeaderCell",onDrop:i,orientation:"horizontal",scrollingContainerRef:l});return{draggableColumn:d,draggedColumnIndex:m.draggedItemIndex,onClick:s,onMouseDown:u,setContainerRef:a}};import{jsx as Te,jsxs as Go}from"react/jsx-runtime";var Qe=cr(({classBase:e="vuuTable",columns:o,headings:t,onMoveColumn:r,onMoveGroupColumn:n,onRemoveGroupColumn:l,onResizeColumn:a,onSortColumn:i,tableConfig:s,tableId:u,virtualColSpan:d=0})=>{let{draggableColumn:m,draggedColumnIndex:b,onClick:C,onMouseDown:h,setContainerRef:x}=Fo({columns:o,onMoveColumn:r,onSortColumn:i,tableConfig:s});return Go("div",{className:`${e}-col-headings`,ref:x,children:[t.map((c,v)=>Te("div",{className:"vuuTable-heading",children:c.map(({label:T,width:M},y)=>Te("div",{className:"vuuTable-headingCell",style:{width:M},children:T},y))},v)),Go("div",{className:`${e}-col-headers`,role:"row",children:[d>0?Te("div",{role:"cell",className:"vuuTableCell",style:{width:d}}):null,o.filter(sr).map((c,v)=>ar(c)?Te(Be,{"aria-colindex":c.index,column:c,"data-index":v,onMoveColumn:n,onRemoveColumn:l,onResize:a},c.name):Te(Mo,{"aria-colindex":c.index,className:ur({"vuuDraggable-dragAway":v===b}),column:c,"data-index":v,id:`${u}-col-${v}`,onClick:C,onMouseDown:h,onResize:a},c.name)),m]})]})});Qe.displayName="TableHeader";import{useDragDrop as ql}from"@vuu-ui/vuu-ui-controls";import{applySort as ei,asDataSourceRowObject as Mt,buildColumnMap as oi,getIndexFromRowElement as ti,isGroupColumn as ni,isJsonGroup as ri,isValidNumber as li,metadataKeys as ii,updateColumn as ai,useLayoutEffectSkipFirst as si}from"@vuu-ui/vuu-utils";import{useCallback as F,useEffect as ui,useMemo as Pt,useRef as ci,useState as mi}from"react";import{isNumericColumn as mr}from"@vuu-ui/vuu-utils";var Ko=e=>(o,t)=>{let r=[];return e===void 0||(o==="header"||o==="column-menu")&&(r.push(...dr(t,e)),r.push(...fr(t,e)),r.push(...pr(t,e)),r.push(...br(t)),r.push({action:"column-settings",icon:"cog",label:"Column Settings",options:t}),r.push({action:"table-settings",icon:"cog",label:"DataGrid Settings",options:t})),r};function dr(e,{sort:{sortDefs:o}}){let{column:t}=e,r=[];if(t===void 0)return r;let n=o.length>0;return t.sorted==="A"?r.push({label:"Reverse Sort (DSC)",action:"sort-dsc",options:e}):t.sorted==="D"?r.push({label:"Reverse Sort (ASC)",action:"sort-asc",options:e}):typeof t.sorted=="number"?(t.sorted>0?r.push({label:"Reverse Sort (DSC)",action:"sort-add-dsc",options:e}):r.push({label:"Reverse Sort (ASC)",action:"sort-add-asc",options:e}),n&&Math.abs(t.sorted)<o.length&&r.push({label:"Remove from sort",action:"sort-remove",options:e}),r.push({label:"New Sort",children:[{label:"Ascending",action:"sort-asc",options:e},{label:"Descending",action:"sort-dsc",options:e}]})):n?(r.push({label:"Add to sort",children:[{label:"Ascending",action:"sort-add-asc",options:e},{label:"Descending",action:"sort-add-dsc",options:e}]}),r.push({label:"New Sort",children:[{label:"Ascending",action:"sort-asc",options:e},{label:"Descending",action:"sort-dsc",options:e}]})):r.push({label:"Sort",children:[{label:"Ascending",action:"sort-asc",options:e},{label:"Descending",action:"sort-dsc",options:e}]}),r}function pr(e,o){let{column:t}=e;if(t===void 0||o.groupBy.length===0)return[];let{name:r,label:n=r}=t;return[{label:`Aggregate ${n}`,children:[{label:"Count",action:"agg-count",options:e},{label:"Distinct",action:"agg-distinct",options:e}].concat(mr(t)?[{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 je=(e,o)=>({label:`Pin ${o}`,action:`column-pin-${o}`,options:e}),Je=e=>je(e,"left"),Ze=e=>je(e,"floating"),Ye=e=>je(e,"right");function br(e){let{column:o}=e;if(o===void 0)return[];let{pin:t}=o,r=[{label:"Hide column",action:"column-hide",options:e},{label:"Remove column",action:"column-remove",options:e}];return t===void 0?r.push({label:"Pin column",children:[Je(e),Ze(e),Ye(e)]}):t==="left"?r.push({label:"Unpin column",action:"column-unpin",options:e},{label:"Pin column",children:[Ze(e),Ye(e)]}):t==="right"?r.push({label:"Unpin column",action:"column-unpin",options:e},{label:"Pin column",children:[Je(e),Ze(e)]}):t==="floating"&&r.push({label:"Unpin column",action:"column-unpin",options:e},{label:"Pin column",children:[Je(e),Ye(e)]}),r}function fr(e,{groupBy:o}){let{column:t}=e,r=[];if(t===void 0)return r;let{name:n,label:l=n}=t;return o.length===0?r.push({label:`Group by ${l}`,action:"group",options:e}):r.push({label:`Add ${l} to group by`,action:"group-add",options:e}),r}import{removeColumnFromFilter as gr}from"@vuu-ui/vuu-utils";import{addGroupColumn as Oo,addSortColumn as $o,AggregationType as Cr,setAggregations as ve,setSortColumn as Bo}from"@vuu-ui/vuu-utils";var vr=(e,o)=>{if(e.filterStruct&&o){let[t,r]=gr(o,e.filterStruct);return{filter:r,filterStruct:t}}else return e},{Average:hr,Count:wr,Distinct:xr,High:Tr,Low:Rr,Sum:yr}=Cr,Vo=({dataSource:e,onPersistentColumnOperation:o})=>r=>{let n=r.options;if(n.column&&e){let{column:l}=n;switch(r.menuId){case"sort-asc":return e.sort=Bo(e.sort,l,"A"),!0;case"sort-dsc":return e.sort=Bo(e.sort,l,"D"),!0;case"sort-add-asc":return e.sort=$o(e.sort,l,"A"),!0;case"sort-add-dsc":return e.sort=$o(e.sort,l,"D"),!0;case"group":return e.groupBy=Oo(e.groupBy,l),!0;case"group-add":return e.groupBy=Oo(e.groupBy,l),!0;case"column-hide":return o({type:"hideColumns",columns:[l]}),!0;case"column-remove":return e.columns=e.columns.filter(a=>a!==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=ve(e.aggregations,l,hr),!0;case"agg-high":return e.aggregations=ve(e.aggregations,l,Tr),!0;case"agg-low":return e.aggregations=ve(e.aggregations,l,Rr),!0;case"agg-count":return e.aggregations=ve(e.aggregations,l,wr),!0;case"agg-distinct":return e.aggregations=ve(e.aggregations,l,xr),!0;case"agg-sum":return e.aggregations=ve(e.aggregations,l,yr),!0;case"column-pin-floating":return o({type:"pinColumn",column:l,pin:"floating"}),!0;case"column-pin-left":return o({type:"pinColumn",column:l,pin:"left"}),!0;case"column-pin-right":return o({type:"pinColumn",column:l,pin:"right"}),!0;case"column-unpin":return o({type:"pinColumn",column:l,pin:void 0}),!0;case"column-settings":return o({type:"columnSettings",column:l}),!0;case"table-settings":return o({type:"tableSettings"}),!0;default:}}return!1};var Wo=(e,o)=>{switch(o.type){case"col-size":return{...e,columns:e.columns.map(t=>t.name===o.column.name?{...t,width:o.width}:t)};case"column-prop":return{...e,columns:e.columns.map(t=>t.name===o.column.name?{...t,[o.property]:o.value}:t)};default:return e}};import{isCharacterKey as Er}from"@vuu-ui/vuu-utils";import{useCallback as de}from"react";var qe=e=>`.vuuTable-col-headers .vuuTableHeaderCell:nth-child(${e})`,eo=(e,o)=>`.vuuTable-body > [aria-rowindex='${e+1}'] > [role='cell']:nth-child(${o+1})`,Uo=(e,[o,t])=>{var l;let r=o===-1?qe(t):eo(o,t),n=(l=e.current)==null?void 0:l.querySelector(r);return Dr(n)&&n.querySelector("button")||n},Dr=e=>e==null?void 0:e.classList.contains("vuuTableCell-editable"),_o=e=>e.querySelector(".vuuTableInputCell")!==null;function Hr(e){if(e){let o=e.ariaRowIndex;if(o!==null)return parseInt(o,10)-1}return-1}var Mr=e=>e.closest('[role="row"]'),Xo=e=>Hr(Mr(e)),Pr=[void 0,void 0],Qo=(e,o,t=e.closest(".vuuTable-contentContainer"))=>{if(t){let r=t==null?void 0:t.getBoundingClientRect(),n=r.top+o,l=e.getBoundingClientRect();if(l)return l.bottom>r.bottom?["down",l.bottom-r.bottom]:l.top<n?["up",l.top-n]:Pr;throw Error("Whats going on, row not found")}else throw Error("Whats going on, scrollbar container not found")};var Jo=({navigate:e})=>{let o=de(()=>{e()},[e]),t=de(s=>{let u=s.target,d=u.matches("input")?u:u.querySelector("input");d&&(d.focus(),d.select())},[]),r=de(s=>{let d=s.target.querySelector("input");d&&(d.focus(),d.select())},[]),n=de(s=>{let u=s.target;_o(u)&&(Er(s.key)?t(s):s.key==="Enter"&&r(s))},[t,r]),l=de(s=>{let u=s.target;(u.matches("input")||u.querySelector("input"))&&(t(s),s.stopPropagation())},[t]),a=de(s=>{s.target.removeEventListener("vuu-commit",o,!0)},[o]),i=de(s=>{s.target.addEventListener("vuu-commit",o,!0)},[o]);return{onBlur:a,onDoubleClick:l,onFocus:i,onKeyDown:n}};import{getFullRange as to,NULL_RANGE as Ar,rangesAreSame as Ir}from"@vuu-ui/vuu-utils";import{useCallback as Pe,useEffect as Zo,useMemo as zr,useRef as Ee,useState as Nr}from"react";import{isRowSelectedLast as Sr,metadataKeys as kr,WindowRange as Lr}from"@vuu-ui/vuu-utils";var{SELECTED:oo}=kr,Me=class{constructor({from:o,to:t}){this.rowCount=0;this.setRowCount=o=>{o<this.data.length&&(this.data.length=o),this.rowCount=o};this.range=new Lr(o,t),this.data=new Array(Math.max(0,t-o)),this.rowCount=0}add(o){let[t]=o;if(this.isWithinRange(t)){let r=t-this.range.from;if(this.data[r]=o,o[oo]){let n=this.data[r-1];Sr(n)&&(this.data[r-1]=n.slice(),this.data[r-1][oo]-=4)}}}getAtIndex(o){return this.range.isWithin(o)&&this.data[o-this.range.from]!=null?this.data[o-this.range.from]:void 0}isWithinRange(o){return this.range.isWithin(o)}setRange({from:o,to:t}){if(o!==this.range.from||t!==this.range.to){let[r,n]=this.range.overlap(o,t),l=new Array(Math.max(0,t-o));for(let a=r;a<n;a++){let i=this.getAtIndex(a);if(i){let s=a-o;l[s]=i}}this.data=l,this.range.from=o,this.range.to=t}}getSelectedRows(){return this.data.filter(o=>o[oo]!==0)}};var Fr=e=>e.type==="vuu-link-created"||e.type==="vuu-link-removed",Yo=({dataSource:e,onFeatureInvocation:o,onSizeChange:t,onSubscribed:r,range:n=Ar,renderBufferSize:l=0})=>{let[,a]=Nr(null),i=Ee([]),s=Ee(!0),u=Ee(!1),d=Ee(n),m=zr(()=>new Me(to(n,l)),[]),b=Pe(c=>{for(let v of c)m.add(v);i.current=m.data,s.current&&a({})},[m]),C=Pe(c=>{c.type==="subscribed"?r==null||r(c):c.type==="viewport-update"?(typeof c.size=="number"&&(t==null||t(c.size),m.setRowCount(c.size)),c.rows?b(c.rows):typeof c.size=="number"&&(i.current=m.data,u.current=!0)):Fr(c)?o==null||o(c):console.log(`useDataSource unexpected message ${c.type}`)},[m,o,t,r,b]),h=Pe(()=>m.getSelectedRows(),[m]);Zo(()=>{var c;return s.current=!0,(c=e.resume)==null||c.call(e),()=>{var v;s.current=!1,(v=e.suspend)==null||v.call(e)}},[e]),Zo(()=>{var c;e.status==="disabled"?(c=e.enable)==null||c.call(e,C):e==null||e.subscribe({range:to(n,l)},C)},[e,C,n,l]);let x=Pe(c=>{if(!Ir(c,d.current)){let v=to(c,l);m.setRange(v),e.range=d.current=v,e.emit("range",c)}},[e,m,l]);return{data:i.current,dataRef:i,getSelectedRows:h,range:d.current,setRange:x}};import{useMemo as Gr,useRef as Kr}from"react";var jo=e=>{let o=Kr(e);return Gr(()=>o.current,[])};import{getIndexFromRowElement as Or}from"@vuu-ui/vuu-utils";import{useControlled as $r}from"@salt-ds/core";import{useCallback as q,useEffect as qo,useRef as Se}from"react";var tt=new Set(["Home","End","PageUp","PageDown","ArrowDown","ArrowUp"]),no=new Set(tt);no.add("ArrowLeft");no.add("ArrowRight");var Br=(e,o)=>{switch(o){case"cell":return no.has(e);case"row":return tt.has(e);default:return!1}},Vr=["Home","End","PageUp","PageDown"],et=e=>Vr.includes(e),Wr=[-1,-1];function ot(e,[o,t],r,n){return e==="ArrowUp"?o>-1?[o-1,t]:[o,t]:e==="ArrowDown"?o===-1?[0,t]:o===n-1?[o,t]:[o+1,t]:e==="ArrowRight"?t<r?[o,t+1]:[o,t]:e==="ArrowLeft"?t>1?[o,t-1]:[o,t]:[o,t]}var nt=({columnCount:e=0,containerRef:o,disableFocus:t=!1,defaultHighlightedIndex:r,disableHighlightOnFocus:n,highlightedIndex:l,navigationStyle:a,requestScroll:i,onHighlight:s,rowCount:u=0,viewportRowCount:d})=>{var re;let m=Se([-1,-1]),b=Se(),C=Se([-1,0]),h=Se(),[x,c]=$r({controlled:l,default:r,name:"UseKeyboardNavigation"});h.current=x;let v=q((f,w=!1)=>{s==null||s(f),c(f)},[s,c]),T=f=>f==null?void 0:f.closest("[role='columnHeader'],[role='cell']"),M=f=>{var w;if(f.role==="columnHeader")return[-1,parseInt((w=f.dataset.idx)!=null?w:"-1",10)];{let R=f.closest("[role='row']");if(R){let O=Or(R),g=Array.from(R.childNodes).indexOf(f);return[O,g]}}return Wr},y=q(f=>{var w;if(o.current){let R=Uo(o,f);R&&(R!==b.current&&((w=b.current)==null||w.removeAttribute("tabindex"),b.current=R,R.setAttribute("tabindex","0")),i==null||i({type:"scroll-row",rowIndex:f[0]}),R.focus({preventScroll:!0}))}},[o,i]),S=q((f,w,R=!1)=>{let O=[f,w];C.current=O,a==="row"?c(f):y(O),R&&(m.current=O)},[y,a,c]),I=q((f,[w,R])=>new Promise(O=>{let g=w;switch(f){case"PageDown":{g=Math.min(u-1,w+d),g!==w&&(i==null||i({type:"scroll-page",direction:"down"}));break}case"PageUp":{g=Math.max(0,w-d),g!==w&&(i==null||i({type:"scroll-page",direction:"up"}));break}case"Home":{g=0,g!==w&&(i==null||i({type:"scroll-end",direction:"home"}));break}case"End":{g=u-1,g!==w&&(i==null||i({type:"scroll-end",direction:"end"}));break}}setTimeout(()=>{O([g,R])},35)}),[i,u,d]),D=q(()=>{var f;if(n!==!0&&(f=o.current)!=null&&f.contains(document.activeElement)){let w=T(document.activeElement);w&&(m.current=M(w),a==="row"&&c(m.current[0]))}},[n,o,a,c]),L=q(async f=>{let[w,R]=et(f)?await I(f,C.current):ot(f,C.current,e,u),[O,g]=C.current;(w!==O||R!==g)&&S(w,R,!0)},[e,I,u,S]),z=q(f=>{i==null||i({type:"scroll-row",rowIndex:f})},[i]),W=q(async f=>{let{current:w}=h,[R]=et(f)?await I(f,[w!=null?w:-1,0]):ot(f,[w!=null?w:-1,0],e,u);R!==w&&(v(R),z(R))},[e,I,u,z,v]);qo(()=>{l!==void 0&&l!==-1&&z(l)},[l,z]);let Q=q(f=>{u>0&&Br(f.key,a)&&(f.preventDefault(),f.stopPropagation(),a==="row"?W(f.key):L(f.key))},[u,a,W,L]),J=q(f=>{let w=f.target,R=T(w);if(R){let[O,g]=M(R);S(O,g)}},[S]),U=q(()=>{v(-1)},[v]),N=q(f=>{let w=Xo(f.target);w!==-1&&w!==h.current&&v(w)},[v]),P=q(()=>{L("ArrowDown")},[L]),Z=((re=o.current)==null?void 0:re.firstChild)!=null;return qo(()=>{if(Z&&b.current===void 0&&!t){let{current:f}=o,w=(f==null?void 0:f.querySelector(qe(0)))||(f==null?void 0:f.querySelector(eo(0,0)));w&&(w.setAttribute("tabindex","0"),b.current=w)}},[o,t,Z]),{highlightedIndexRef:h,navigate:P,onClick:J,onFocus:D,onKeyDown:Q,onMouseLeave:a==="row"?U:void 0,onMouseMove:a==="row"?N:void 0}};import{deselectItem as Ur,dispatchMouseEvent as _r,isRowSelected as Xr,metadataKeys as Qr,selectItem as Jr}from"@vuu-ui/vuu-utils";import{useCallback as ro,useRef as rt}from"react";var{IDX:Zr}=Qr,Yr=[],jr=["Enter"," "],lt=({highlightedIndexRef:e,selectionKeys:o=jr,selectionModel:t,onSelect:r,onSelectionChange:n})=>{let l=rt(-1),a=rt(Yr),i=ro(d=>o.includes(d.key),[o]),s=ro((d,m,b,C)=>{let{[Zr]:h}=m,{current:x}=l,{current:c}=a,T=(Xr(m)?Ur:Jr)(t,c,h,b,C,x);a.current=T,l.current=h,r==null||r(m),n==null||n(T)},[r,n,t]);return{onKeyDown:ro(d=>{if(i(d)){let{current:m}=e;if(m!==void 0&&m!==-1){let b=d.target.querySelector(`[aria-rowindex="${m}"]`);b&&_r(b,"click")}}},[e,i]),onRowClick:s}};import{useContextMenu as qr}from"@vuu-ui/vuu-popups";import{buildColumnMap as el,getIndexFromRowElement as ol}from"@vuu-ui/vuu-utils";import{useCallback as tl}from"react";var nl=[],it=({columns:e,data:o,dataSource:t,getSelectedRows:r})=>{let[n]=qr();return tl(a=>{let i=a.target,s=i==null?void 0:i.closest("div[role='cell']"),u=i==null?void 0:i.closest("div[role='row']");if(s&&u){let{selectedRowsCount:d}=t,m=el(e),b=ol(u),C=Array.from(u.childNodes).indexOf(s),h=o.find(([c])=>c===b),x=e[C];n(a,"grid",{columnMap:m,columnName:x,row:h,selectedRows:d===0?nl:r(),viewport:t.viewport})}},[e,o,t,r,n])};import{applyFilterToColumns as rl,applyGroupByToColumns as ll,applySortToColumns as il,getCellRenderer as al,getColumnHeaderContentRenderer as sl,getColumnHeaderLabelRenderer as ul,getColumnLabel as cl,getTableHeadings as ml,getValueFormatter as dl,hasValidationRules as pl,isFilteredColumn as bl,isGroupColumn as fl,isPinned as gl,logger as Cl,replaceColumn as pe,sortPinnedColumns as at,stripFilterFromColumns as vl,subscribedOnly as hl}from"@vuu-ui/vuu-utils";import{buildValidationChecker as wl}from"@vuu-ui/vuu-ui-controls";import{useReducer as xl}from"react";var{info:lo}=Cl("useTableModel"),Tl=100,Rl=({serverDataType:e})=>e===void 0,st=(e,o)=>{let t=o==null?void 0:o.columns.find(({name:r})=>r===e.name);return t?t.serverDataType:e.serverDataType},yl=["int","long","double"],ut=e=>e===void 0?void 0:yl.includes(e)?"right":"left",ct=e=>e.type==="columnSettings",mt=e=>e.type==="tableSettings",Dl=(e,o)=>{switch(lo==null||lo(`TableModelReducer ${o.type}`),o.type){case"init":return pt(o);case"moveColumn":return Ml(e,o);case"resizeColumn":return Sl(e,o);case"setTableSchema":return kl(e,o);case"hideColumns":return Pl(e,o);case"showColumns":return El(e,o);case"pinColumn":return Ll(e,o);case"updateColumnProp":return he(e,o);case"tableConfig":return ft(e,o);default:return console.log(`unhandled action ${o.type}`),e}},dt=(e,o)=>{let[t,r]=xl(Dl,{tableConfig:e,dataSource:o},pt),{columns:n,headings:l,tableConfig:a,...i}=t;return{columns:n,dispatchTableModelAction:r,headings:l,tableAttributes:i,tableConfig:a}};function pt({dataSource:e,tableConfig:o}){let{columns:t,...r}=o,{config:n,tableSchema:l}=e,a=t.filter(hl(n==null?void 0:n.columns)).map(bt(r,l)),i=a.some(gl)?at(a):a,s={columns:i,headings:ml(i),tableConfig:o,...r};if(n){let{columns:u,...d}=n;s=ft(s,{type:"tableConfig",...d})}return s}var Hl=(e,o)=>o==="uppercase"?e.toUpperCase():o==="capitalize"?e[0].toUpperCase()+e.slice(1).toLowerCase():e,bt=(e,o)=>(t,r)=>{let{columnDefaultWidth:n=Tl,columnFormatHeader:l}=e,a=st(t,o),{align:i=ut(a),name:s,label:u=cl(t),width:d=n,...m}=t,b={...m,align:i,CellRenderer:al(t),HeaderCellContentRenderer:sl(t),HeaderCellLabelRenderer:ul(t),clientSideEditValidationCheck:pl(t.type)?wl(t.type.renderer.rules):void 0,index:r+1,label:Hl(u,l),name:s,originalIdx:r,serverDataType:a,valueFormatter:dl(t,a),width:d};return fl(b)&&(b.columns=b.columns.map(C=>bt(e)(C,r))),b};function Ml(e,{column:o,moveBy:t}){let{columns:r}=e;if(typeof t=="number"){let n=r.indexOf(o),l=r.slice(),[a]=l.splice(n,1);return l.splice(n+t,0,a),{...e,columns:l}}return e}function Pl(e,{columns:o}){return o.some(t=>t.hidden!==!0)?o.reduce((t,r)=>r.hidden!==!0?he(t,{type:"updateColumnProp",column:r,hidden:!0}):t,e):e}function El(e,{columns:o}){return o.some(t=>t.hidden)?o.reduce((t,r)=>r.hidden?he(t,{type:"updateColumnProp",column:r,hidden:!1}):t,e):e}function Sl(e,{column:o,phase:t,width:r}){let n="updateColumnProp",l=t!=="end";switch(t){case"begin":return he(e,{type:n,column:o,resizing:l});case"end":return he(e,{type:n,column:o,resizing:l,width:r});case"resize":return he(e,{type:n,column:o,width:r});default:throw Error(`useTableModel.resizeColumn, invalid resizePhase ${t}`)}}function kl(e,{tableSchema:o}){let{columns:t}=e;if(t.some(Rl)){let r=t.map(n=>{var a;let l=st(n,o);return{...n,align:(a=n.align)!=null?a:ut(l),serverDataType:l}});return{...e,columns:r}}else return e}function Ll(e,o){let{columns:t}=e,{column:r,pin:n}=o,l=t.find(a=>a.name===r.name);return l?(t=pe(t,{...l,pin:n}),t=at(t),{...e,columns:t}):e}function he(e,o){let{columns:t,tableConfig:r}=e,{align:n,column:l,hidden:a,label:i,resizing:s,width:u}=o,d=t.find(m=>m.name===l.name);if(d&&((n==="left"||n==="right")&&(t=pe(t,{...d,align:n})),typeof i=="string"&&(t=pe(t,{...d,label:i})),typeof s=="boolean"&&(t=pe(t,{...d,resizing:s})),typeof a=="boolean"&&(t=pe(t,{...d,hidden:a})),typeof u=="number")){t=pe(t,{...d,width:u});let m=r.columns.find(b=>b.name===l.name);m&&(r={...r,columns:pe(r.columns,{...m,width:u})})}return{...e,columns:t,tableConfig:r}}function ft(e,{confirmed:o,filter:t,groupBy:r,sort:n}){let l=r!==void 0,a=typeof(t==null?void 0:t.filter)=="string",i=n&&n.sortDefs.length>0,s=e;return l&&(s={...e,columns:ll(s.columns,r,o)}),i&&(s={...e,columns:il(s.columns,n)}),a?s={...e,columns:rl(s.columns,t)}:s.columns.some(bl)&&(s={...e,columns:vl(s.columns)}),s}import{getColumnsInViewport as gt,getRowElementAtIndex as Al,itemsChanged as Il}from"@vuu-ui/vuu-utils";import{useCallback as le,useEffect as zl,useImperativeHandle as Nl,useMemo as Ct,useRef as oe,useState as Fl}from"react";var Gl=100,vt=200,ht=e=>{let{clientHeight:o,clientWidth:t,scrollHeight:r,scrollWidth:n}=e;return[n-t,r-o]},Kl=(e,o)=>{if(e!==void 0){let{scrollTop:t}=e;return o>t?"fwd":"bwd"}},wt=(e,o)=>{let{clientHeight:t,clientWidth:r,scrollHeight:n,scrollLeft:l,scrollTop:a,scrollWidth:i}=e,s=i-r,u=l/(i-r),d=n-t,m=a/(n-t),b=Kl(o,a);return b==="fwd"&&m>.99?m=1:b==="bwd"&&m<.02&&(m=0),[l,u,s,a,m,d]},Ol={scrollToIndex:()=>{},scrollToKey:()=>{}},xt=({onAttach:e,onDetach:o})=>{let t=oe(null);return le(n=>{if(n)t.current=n,e==null||e(n);else if(t.current){let{current:l}=t;t.current=n,o==null||o(l)}},[e,o])},Tt=({columns:e,getRowAtPosition:o,onHorizontalScroll:t,onVerticalScroll:r,onVerticalScrollInSitu:n,rowHeight:l,scrollingApiRef:a,setRange:i,viewportMeasurements:s})=>{let u=oe(0),d=oe(l),m=oe(!1),b=oe({scrollTop:0,scrollLeft:0}),C=oe(!1),h=oe({scrollTop:0,scrollLeft:0}),x=oe(null),c=oe(null),v=oe(0),{appliedPageSize:T,isVirtualScroll:M,rowCount:y,totalHeaderHeight:S,viewportWidth:I}=s,D=oe([]),[,L]=Fl({}),z=oe(0);Ct(()=>{let[g,H]=gt(e,b.current.scrollLeft,b.current.scrollLeft+I+vt);z.current=H,D.current=g},[I,e]);let W=le(g=>{if(b.current.scrollLeft=g,t==null||t(g),Math.abs(g-v.current)>Gl){v.current=g;let[H,$]=gt(e,g,g+I+vt);Il(D.current,H)&&(z.current=$,D.current=H,L({}))}},[e,t,I]),Q=le((g,H)=>{b.current.scrollTop=g,r==null||r(g,H);let $=o(g);$!==u.current&&(u.current=$,i({from:$,to:$+y})),n==null||n(0)},[o,r,n,i,y]),J=le(()=>{let{current:g}=c,{current:H}=x,{current:$}=m,{current:X}=h;if($)m.current=!1;else if(g&&H){C.current=!0;let[_,te,,V,k]=wt(H,X);X.scrollLeft=_,X.scrollTop=V;let[G,Y]=ht(H),K=Math.round(te*G),ce=k*Y;g.scrollTo({left:K,top:ce,behavior:"auto"})}n==null||n(0)},[n]),U=le(()=>{let{current:g}=C,{current:H}=c,{current:$}=x,{current:X}=b;if(H&&$){let[_,te,V,k,G,Y]=wt(H);m.current=!0,g?C.current=!1:($.scrollLeft=Math.round(te*V),$.scrollTop=G*Y),X.scrollTop!==k&&Q(k,G),X.scrollLeft!==_&&W(_)}},[Q,W]),N=le(g=>{x.current=g,g.addEventListener("scroll",J,{passive:!0})},[J]),P=le(g=>{x.current=null,g.removeEventListener("scroll",J)},[J]),Z=le(g=>{c.current=g,g.addEventListener("scroll",U,{passive:!0})},[U]),re=le(g=>{c.current=null,g.removeEventListener("scroll",U)},[U]),f=xt({onAttach:Z,onDetach:re}),w=xt({onAttach:N,onDetach:P}),R=le(g=>{let{current:H}=c;if(H){let[$,X]=ht(H),{scrollLeft:_,scrollTop:te}=H;if(m.current=!1,g.type==="scroll-row"){let V=Al(H,g.rowIndex);if(V!==null){let[k,G]=Qo(V,S);if(console.log(`outside viewport ? ${k} ${G}`),k&&G)if(M){let Y=k==="down"?1:-1;n==null||n(Y);let K=u.current+Y;u.current=K,i({from:K,to:K+y})}else{let Y=_,K=te;k==="up"||k==="down"?K=Math.min(Math.max(0,te+G),X):Y=Math.min(Math.max(0,_+G),$),H.scrollTo({top:K,left:Y,behavior:"smooth"})}}}else if(g.type==="scroll-page"){let{direction:V}=g;if(M){let k=V==="down"?y:-y;n==null||n(k);let G=u.current+k;u.current=G,i({from:G,to:G+y})}else{let k=V==="down"?T:-T,G=Math.min(Math.max(0,te+k),X);H.scrollTo({top:G,left:_,behavior:"auto"})}}else if(g.type==="scroll-end"){let{direction:V}=g,k=V==="end"?X:0;H.scrollTo({top:k,left:H.scrollLeft,behavior:"auto"})}}},[T,M,n,i,S,y]),O=Ct(()=>({scrollToIndex:g=>{if(x.current){let H=(g-30)*20;x.current.scrollTop=H}},scrollToKey:g=>{console.log(`scrollToKey ${g}`)}}),[]);return Nl(a,()=>x.current?O:Ol,[O]),zl(()=>{if(l!==d.current)d.current=l,b.current.scrollTop>0&&c.current&&(c.current.scrollTop=0);else{let{current:g}=u,H={from:g,to:g+y};i(H)}},[l,i,y]),{columnsWithinViewport:D.current,scrollbarContainerRef:w,contentContainerRef:f,requestScroll:R,virtualColSpan:z.current}};import{actualRowPositioning as $l,measurePinnedColumns as Bl,virtualRowPositioning as Vl}from"@vuu-ui/vuu-utils";import{useCallback as Rt,useMemo as ke,useRef as io}from"react";var Wl=1e7,Ul={appliedPageSize:0,contentHeight:0,contentWidth:0,getRowAtPosition:()=>-1,getRowOffset:()=>-1,horizontalScrollbarHeight:0,isVirtualScroll:!1,pinnedWidthLeft:0,pinnedWidthRight:0,rowCount:0,setInSituRowOffset:()=>{},setScrollTop:()=>{},totalHeaderHeight:0,verticalScrollbarWidth:0,viewportBodyHeight:0,viewportWidth:0},yt=({columns:e,headerHeight:o,headings:t,rowCount:r,rowHeight:n,selectionEndSize:l=4,size:a})=>{let i=io(0),s=io(0),u=Math.min(n*r,Wl),d=r*n,m=d-u,{pinnedWidthLeft:b,pinnedWidthRight:C,unpinnedWidth:h}=ke(()=>Bl(e,l),[e,l]),x=io(o);ke(()=>{x.current=o*(1+t.length)},[o,t.length]);let[c,v,T]=ke(()=>{if(m){let[S,I,D]=Vl(n,m,s);return[z=>S(z,i.current),I,D]}else return $l(n)},[m,n]),M=Rt((S,I)=>{s.current=I},[]),y=Rt(S=>{S===0?i.current=0:i.current=Math.max(0,i.current+S)},[]);return ke(()=>{if(a){let{current:S}=x,I=15,D=b+h+C,L=D>a.width?I:0,z=(a.height-o)/n,W=Number.isInteger(z)?z:Math.ceil(z),Q=a.height-S,J=u>Q?I:0,U=W*n*(u/d),N=a.width;return{appliedPageSize:U,contentHeight:u,contentWidth:D,getRowAtPosition:v,getRowOffset:c,isVirtualScroll:T,horizontalScrollbarHeight:L,pinnedWidthLeft:b,pinnedWidthRight:C,rowCount:W,setInSituRowOffset:y,setScrollTop:M,totalHeaderHeight:S,verticalScrollbarWidth:J,viewportBodyHeight:Q,viewportWidth:N}}else return Ul},[v,c,o,T,b,h,C,u,n,y,M,a,d])};import{useLayoutProviderDispatch as _l}from"@vuu-ui/vuu-layout";import{getCalculatedColumnType as Xl}from"@vuu-ui/vuu-utils";import{useCallback as be,useRef as Ql,useState as Jl}from"react";var Dt=({availableColumns:e,onAvailableColumnsChange:o,onConfigChange:t,onCreateCalculatedColumn:r,onDataSourceConfigChange:n,tableConfig:l})=>{let a=_l(),i=Ql(),[s,u]=Jl(e),d=be((c,v,T)=>{a({type:"set-props",path:"#context-panel",props:{expanded:!0,content:{type:c,props:T},title:v}})},[a]),m=be(()=>{requestAnimationFrame(()=>{var c;(c=i.current)==null||c.call(i)})},[]),b=be(c=>{let v=s.concat({name:c.name,serverDataType:Xl(c)});u(v),o==null||o(v),requestAnimationFrame(()=>{var T;(T=i.current)==null||T.call(i)}),r(c)},[s,o,r]),C=be(c=>{d("ColumnSettings","Column Settings",{column:c.column,onCancelCreateColumn:m,onConfigChange:t,onCreateCalculatedColumn:b,tableConfig:l,vuuTable:c.vuuTable})},[m,b,t,d,l]),h=be(()=>{C({column:{name:"::",serverDataType:"string"},type:"columnSettings",vuuTable:{module:"SIMUL",table:"instruments"}})},[C]),x=be(c=>{let v=l.columns.find(T=>T.name===c);v&&C({type:"columnSettings",column:v,vuuTable:{module:"SIMUL",table:"instruments"}})},[C,l.columns]);return i.current=be(()=>{d("TableSettings","DataGrid Settings",{availableColumns:s!=null?s:l.columns.map(({name:c,serverDataType:v})=>({name:c,serverDataType:v})),onAddCalculatedColumn:h,onConfigChange:t,onDataSourceConfigChange:n,onNavigateToColumn:x,tableConfig:l})},[s,h,x,t,n,d,l]),{showColumnSettingsPanel:C,showTableSettingsPanel:i.current}};import{getRowClassNameGenerator as Zl}from"@vuu-ui/vuu-utils";import{useMemo as Yl}from"react";var jl=e=>{let o=[];return e==null||e.forEach(t=>{let r=Zl(t);r&&o.push(r.fn)}),(t,r)=>{let n=[];return o==null||o.forEach(l=>{let a=l(t,r);a&&n.push(a)}),n.join(" ")}},Ht=({rowClassNameGenerators:e})=>Yl(()=>jl(e),[e]);var Le=e=>e,{KEY:di,IS_EXPANDED:Et,IS_LEAF:St}=ii,pi={draggable:void 0,onMouseDown:void 0},bi=()=>pi,fi=(e,o)=>({...e,columns:e.columns.concat(o)}),kt=({allowDragDrop:e=!1,availableColumns:o,config:t,containerRef:r,dataSource:n,disableFocus:l,headerHeight:a=25,highlightedIndex:i,id:s,navigationStyle:u="cell",onAvailableColumnsChange:d,onConfigChange:m,onDragStart:b,onDrop:C,onFeatureInvocation:h,onHighlight:x,onRowClick:c,onSelect:v,onSelectionChange:T,renderBufferSize:M=0,rowHeight:y=20,scrollingApiRef:S,selectionModel:I,size:D})=>{let[L,z]=mi(n.size);if(n===void 0)throw Error("no data source provided to Vuu Table");let W=Ht(t),Q=e?ql:bi,J=Pt(()=>Ko(n),[n]),U=F(p=>{z(p)},[]),{columns:N,dispatchTableModelAction:P,headings:Z,tableAttributes:re,tableConfig:f}=dt(t,n);si(()=>{P({type:"init",tableConfig:t,dataSource:n})},[t,n,P]);let w=F(p=>{P({type:"init",tableConfig:p,dataSource:n}),m==null||m(Le(p))},[n,P,m]),R=Pt(()=>oi(n.columns),[n.columns]),O=F(({tableSchema:p})=>{p?P({type:"setTableSchema",tableSchema:p}):console.log("subscription message with no schema")},[P]),{getRowAtPosition:g,getRowOffset:H,setInSituRowOffset:$,setScrollTop:X,..._}=yt({columns:N,headerHeight:a,headings:Z,rowCount:L,rowHeight:y,size:D}),te=jo({from:0,to:_.rowCount}),{data:V,dataRef:k,getSelectedRows:G,range:Y,setRange:K}=Yo({dataSource:n,onFeatureInvocation:h,renderBufferSize:M,onSizeChange:U,onSubscribed:O,range:te}),{requestScroll:ce,...Ie}=Tt({columns:N,getRowAtPosition:g,rowHeight:y,scrollingApiRef:S,setRange:K,onVerticalScroll:X,onVerticalScrollInSitu:$,viewportMeasurements:_}),Re=F(p=>{P({type:"init",tableConfig:p,dataSource:n}),m==null||m(Le(p))},[n,P,m]),me=F(p=>{n.config={...n.config,...p}},[n]);ui(()=>{n.on("config",(p,E,A)=>{((A==null?void 0:A.filterChanged)||(A==null?void 0:A.groupByChanged))&&n.range.from>0&&ce({type:"scroll-end",direction:"home"}),P({type:"tableConfig",...p,confirmed:E})})},[n,P,ce]);let Gt=F(p=>{n.columns=n.columns.concat(p.name),w(fi(f,p))},[n,f,w]),uo=F(p=>{let{columns:E}=p,A=E.map(j=>j.name),B={...f,columns:f.columns.map(j=>A.includes(j.name)?{...j,hidden:!0}:j)};w(B)},[f,w]),co=F(p=>{w({...f,columns:ai(f.columns,{...p.column,pin:p.pin})})},[f,w]),{showColumnSettingsPanel:mo,showTableSettingsPanel:po}=Dt({availableColumns:o!=null?o:f.columns.map(({name:p,serverDataType:E="string"})=>({name:p,serverDataType:E})),onAvailableColumnsChange:d,onConfigChange:Re,onCreateCalculatedColumn:Gt,onDataSourceConfigChange:me,tableConfig:f}),Kt=F(p=>{if(ct(p))mo(p);else if(mt(p))po();else switch(p.type){case"hideColumns":return uo(p);case"pinColumn":return co(p);default:P(p)}},[P,uo,co,mo,po]),Ot=Vo({dataSource:n,onPersistentColumnOperation:Kt}),$t=F((p,E=!1,A)=>{n&&(n.sort=ei(n.sort,p,E,A))},[n]),ze=ci(),Bt=F((p,E,A)=>{var j,we,ae;let B=N.find(ee=>ee.name===E);if(B)if(p==="resize")(j=ze.current)==null||j.forEach(ee=>{ee.style.width=`${A}px`});else if(p==="end")ze.current=void 0,li(A)&&(P({type:"resizeColumn",phase:p,column:B,width:A}),m==null||m(Le(Wo(f,{type:"col-size",column:B,width:A}))));else{let ee=`[aria-colindex='${B.index}']`;ze.current=Array.from((ae=(we=r.current)==null?void 0:we.querySelectorAll(`.vuuTableCell${ee},.vuuTableHeaderCell${ee}`))!=null?ae:[]),P({type:"resizeColumn",phase:p,column:B,width:A})}else throw Error(`useDataTable.handleColumnResize, column ${E} not found`)},[N,P,m,f,r]),Vt=F((p,E)=>{var j,we;let A=ri(E,p,R),B=p[di];if(p[Et]){if(n.closeTreeNode(B,!0),A){let ae=N.indexOf(E),ee=(j=n.getRowsAtDepth)==null?void 0:j.call(n,ae+1);ee&&!ee.some(fe=>fe[Et]||fe[St])&&P({type:"hideColumns",columns:N.slice(ae+2)})}}else if(n.openTreeNode(B),A){let ae=(we=n.getChildRows)==null?void 0:we.call(n,B),ee=N.indexOf(E)+1,fe=[N[ee]];ae&&ae.some(Ne=>Ne[St])&&fe.push(N[ee+1]),fe.some(Ne=>Ne.hidden)&&P({type:"showColumns",columns:fe})}},[R,N,n,P]),{highlightedIndexRef:bo,navigate:Wt,onFocus:fo,onKeyDown:go,...Ut}=nt({columnCount:N.filter(p=>p.hidden!==!0).length,containerRef:r,disableFocus:l,highlightedIndex:i,navigationStyle:u,requestScroll:ce,rowCount:n==null?void 0:n.size,onHighlight:x,viewportRange:Y,viewportRowCount:_.rowCount}),{onBlur:_t,onDoubleClick:Xt,onKeyDown:Co,onFocus:vo}=Jo({navigate:Wt}),Qt=F(p=>{fo(),p.defaultPrevented||vo(p)},[vo,fo]),Jt=it({columns:N,data:V,dataSource:n,getSelectedRows:G}),Zt=F(p=>{n.groupBy=p.map(E=>E.name)},[n]),Yt=F(p=>{ni(p)?n.groupBy=[]:n&&n.groupBy.includes(p.name)&&(n.groupBy=n.groupBy.filter(E=>E!==p.name))},[n]),jt=F(p=>{n.select(p),T==null||T(p)},[n,T]),qt=F(p=>{v&&v(p===null?null:Mt(p,R))},[R,v]),{onKeyDown:ho,onRowClick:wo}=lt({highlightedIndexRef:bo,onSelect:qt,onSelectionChange:jt,selectionModel:I}),en=F((p,E,A,B)=>{wo(p,E,A,B),c==null||c(p,Mt(E,R))},[R,c,wo]),on=F(p=>{go(p),p.defaultPrevented||Co(p),p.defaultPrevented||ho(p)},[go,Co,ho]),tn=F(p=>{let E={...f,columns:p};P({type:"init",tableConfig:E,dataSource:n}),m==null||m(Le(E))},[n,P,m,f]),nn=F(p=>{C==null||C(p)},[C]),rn=F(async(p,E,A)=>n.applyEdit(p,E,A),[n]),ln=F(p=>{let{initialDragElement:E}=p,A=ti(E),B=k.current.find(j=>j[0]===A);B&&p.setPayload(B),b==null||b(p)},[k,b]),{onMouseDown:an,draggable:sn}=Q({allowDragDrop:e,containerRef:r,draggableClassName:"vuuTable",id:s,onDragStart:ln,onDrop:nn,orientation:"vertical",itemQuery:".vuuTableRow"});return{...Ut,"aria-rowcount":n.size,rowClassNameGenerator:W,draggableRow:sn,onBlur:_t,onDoubleClick:Xt,onFocus:Qt,onKeyDown:on,onMouseDown:an,columnMap:R,columns:N,data:V,getRowOffset:H,handleContextMenuAction:Ot,headings:Z,highlightedIndex:bo.current,menuBuilder:J,onContextMenu:Jt,onDataEdited:rn,onMoveColumn:tn,onMoveGroupColumn:Zt,onRemoveGroupColumn:Yt,onRowClick:en,onSortColumn:$t,onResizeColumn:Bt,onToggleGroup:Vt,scrollProps:Ie,tableAttributes:re,tableConfig:f,viewportMeasurements:_}};import{isValidNumber as gi}from"@vuu-ui/vuu-utils";import{useCallback as Ci,useMemo as vi,useRef as hi,useState as wi}from"react";var Lt=({rowHeight:e=0})=>{let[o,t]=wi(e),r=hi(o),n=vi(()=>new ResizeObserver(a=>{for(let i of a){let[{blockSize:s}]=i.borderBoxSize,u=Math.round(s);gi(u)&&r.current!==u&&(r.current=u,t(u))}}),[]),l=Ci(a=>{if(a){if(e===0){let{height:i}=a.getBoundingClientRect();console.log({boundingClientHeight:i}),console.log(`measured rowHeight = ${i} (${e})`),n.observe(a),t(i)}}else n.disconnect()},[n,e]);return{rowHeight:o,rowRef:l}};import{jsx as ue,jsxs as ao}from"react/jsx-runtime";var ie="vuuTable",{IDX:Ei,RENDER_IDX:Si}=Ri,ki=({Row:e=Ue,allowDragDrop:o,availableColumns:t,config:r,containerRef:n,dataSource:l,disableFocus:a=!1,highlightedIndex:i,id:s,navigationStyle:u="cell",onAvailableColumnsChange:d,onConfigChange:m,onDragStart:b,onDrop:C,onFeatureInvocation:h,onHighlight:x,onRowClick:c,onSelect:v,onSelectionChange:T,renderBufferSize:M=5,rowHeight:y,scrollingApiRef:S,selectionModel:I="extended",showColumnHeaders:D=!0,headerHeight:L=D?y*1.25:0,size:z})=>{let W=yi(s),{columnMap:Q,columns:J,data:U,draggableRow:N,getRowOffset:P,handleContextMenuAction:Z,headings:re,highlightedIndex:f,menuBuilder:w,onDataEdited:R,onMoveColumn:O,onMoveGroupColumn:g,onRemoveGroupColumn:H,onResizeColumn:$,onRowClick:X,onSortColumn:_,onToggleGroup:te,rowClassNameGenerator:V,scrollProps:k,tableAttributes:G,tableConfig:Y,viewportMeasurements:K,...ce}=kt({allowDragDrop:o,availableColumns:t,config:r,containerRef:n,dataSource:l,disableFocus:a,headerHeight:L,highlightedIndex:i,id:W,navigationStyle:u,onAvailableColumnsChange:d,onConfigChange:m,onDragStart:b,onDrop:C,onFeatureInvocation:h,onHighlight:x,onRowClick:c,onSelect:v,onSelectionChange:T,renderBufferSize:Math.max(5,M),rowHeight:y,scrollingApiRef:S,selectionModel:I,size:z}),Ie=At(`${ie}-contentContainer`,{[`${ie}-colLines`]:G.columnSeparators,[`${ie}-rowLines`]:G.rowSeparators,[`${ie}-zebra`]:G.zebraStripes}),Re={"--content-height":`${K.contentHeight}px`,"--content-width":`${K.contentWidth}px`,"--horizontal-scrollbar-height":`${K.horizontalScrollbarHeight}px`,"--pinned-width-left":`${K.pinnedWidthLeft}px`,"--pinned-width-right":`${K.pinnedWidthRight}px`,"--header-height":`${L}px`,"--row-height-prop":`${y}px`,"--total-header-height":`${K.totalHeaderHeight}px`,"--vertical-scrollbar-width":`${K.verticalScrollbarWidth}px`,"--viewport-body-height":`${K.viewportBodyHeight}px`};return ao(xi,{menuActionHandler:Z,menuBuilder:w,children:[ue("div",{className:`${ie}-scrollbarContainer`,ref:k.scrollbarContainerRef,style:Re,children:ue("div",{className:`${ie}-scrollbarContent`})}),ue("div",{className:Ie,ref:k.contentContainerRef,style:Re,children:ao("div",{...ce,className:`${ie}-table`,role:"table",tabIndex:a?void 0:-1,children:[D?ue(Qe,{columns:k.columnsWithinViewport,headings:re,onMoveColumn:O,onMoveGroupColumn:g,onRemoveGroupColumn:H,onResizeColumn:$,onSortColumn:_,tableConfig:Y,tableId:W,virtualColSpan:k.virtualColSpan}):null,ue("div",{className:`${ie}-body`,children:U.map(me=>ue(e,{"aria-rowindex":me[0]+1,classNameGenerator:V,columnMap:Q,columns:k.columnsWithinViewport,highlighted:f===me[Ei],onClick:X,onDataEdited:R,row:me,offset:P(me),onToggleGroup:te,virtualColSpan:k.virtualColSpan,zebraStripes:G.zebraStripes},me[Si]))})]})}),N]})},Bm=Hi(function({Row:o,allowDragDrop:t,availableColumns:r,className:n,config:l,dataSource:a,disableFocus:i,highlightedIndex:s,id:u,navigationStyle:d,onAvailableColumnsChange:m,onConfigChange:b,onDragStart:C,onDrop:h,onFeatureInvocation:x,onHighlight:c,onRowClick:v,onSelect:T,onSelectionChange:M,renderBufferSize:y,rowHeight:S,scrollingApiRef:I,selectionModel:D,showColumnHeaders:L,headerHeight:z,style:W,...Q},J){let U=Mi(null),[N,P]=Pi(),{rowHeight:Z,rowRef:re}=Lt({rowHeight:S});if(l===void 0)throw Error("vuu Table requires config prop. Minimum config is list of Column Descriptors");if(a===void 0)throw Error("vuu Table requires dataSource prop");return console.log({rowHeight:Z}),ao(Ti,{...Q,className:At(ie,n),id:u,onResize:P,ref:Di(U,J),children:[ue(zo,{ref:re,height:S}),N&&Z?ue(ki,{Row:o,allowDragDrop:t,availableColumns:r,config:l,containerRef:U,dataSource:a,disableFocus:i,headerHeight:z,highlightedIndex:s,id:u,navigationStyle:d,onAvailableColumnsChange:m,onConfigChange:b,onDragStart:C,onDrop:h,onFeatureInvocation:x,onHighlight:c,onRowClick:v,onSelect:T,onSelectionChange:M,renderBufferSize:y,rowHeight:Z,scrollingApiRef:I,selectionModel:D,showColumnHeaders:L,size:N}):null]})});import{memo as Li,useCallback as Ai}from"react";import{CheckboxIcon as Ii,WarnCommit as zi}from"@vuu-ui/vuu-ui-controls";import{Checkbox as Ni}from"@salt-ds/core";import{dataColumnAndKeyUnchanged as Fi,dispatchCustomEvent as Gi,registerComponent as Ki}from"@vuu-ui/vuu-utils";import{jsx as It}from"react/jsx-runtime";var zt=Li(({column:e,columnMap:o,onCommit:t=zi,row:r})=>{let n=o[e.name],l=!!r[n],a=Ai(i=>async s=>{let u=await t(i);return u===!0&&Gi(s.target,"vuu-commit"),u},[t]);return e.editable?It(Ni,{checked:l,onClick:a(!l)}):It(Ii,{checked:l,disabled:!0})},Fi);zt.displayName="CheckboxCell";Ki("checkbox-cell",zt,"cell-renderer",{serverDataType:"boolean"});import{registerComponent as Oi}from"@vuu-ui/vuu-utils";import{Input as $i}from"@salt-ds/core";import{useEditableText as Bi}from"@vuu-ui/vuu-ui-controls";import Vi from"clsx";import{jsx as so}from"react/jsx-runtime";var Ae="vuuTableInputCell",Wi=()=>(console.warn("onCommit handler has not been provided to InputCell cell renderer"),Promise.resolve(!0)),Ui=({column:e,columnMap:o,onCommit:t=Wi,row:r})=>{let n=o[e.name],l=r[n],{align:a="left",clientSideEditValidationCheck:i}=e,{warningMessage:s,...u}=Bi({initialValue:l,onCommit:t,clientSideEditValidationCheck:i}),d=s&&a==="left"?so("span",{className:`${Ae}-icon`,"data-icon":"error"}):void 0,m=s&&a==="right"?so("span",{className:`${Ae}-icon`,"data-icon":"error"}):void 0;return so($i,{...u,className:Vi(Ae,{[`${Ae}-error`]:s!==void 0}),endAdornment:d,startAdornment:m})};Oi("input-cell",Ui,"cell-renderer",{userCanAssign:!1});import{WarnCommit as _i}from"@vuu-ui/vuu-ui-controls";import{dataColumnAndKeyUnchanged as Xi,dispatchCustomEvent as Qi,isTypeDescriptor as Ji,isValueListRenderer as Zi,registerComponent as Yi}from"@vuu-ui/vuu-utils";import ji from"clsx";import{memo as qi,useCallback as ea}from"react";import{CycleStateButton as oa}from"@vuu-ui/vuu-ui-controls";import{jsx as ra}from"react/jsx-runtime";var Nt="vuuTableToggleCell",ta=({name:e,type:o})=>{if(Ji(o)&&Zi(o.renderer))return o.renderer.values;throw Error(`useLookupValues column ${e} has not been configured with a values list`)},na=qi(function({column:o,columnMap:t,onCommit:r=_i,row:n}){let l=ta(o),a=t[o.name],i=n[a],s=ea((u,d)=>r(d).then(m=>(m===!0&&Qi(u.target,"vuu-commit"),m)),[r]);return ra(oa,{className:ji(Nt,`${Nt}-${o.name}`),onCommit:s,value:i,values:l,variant:"cta",children:i})},Xi);Yi("toggle-cell",na,"cell-renderer",{userCanAssign:!1});import{useStateRef as la}from"@vuu-ui/vuu-ui-controls";import{dispatchMouseEvent as ia}from"@vuu-ui/vuu-utils";import{useCallback as Ft,useRef as aa}from"react";var zd=(e,o)=>{let t=aa(null),[r,n]=la(e),l=Ft(i=>{var s;if(i.key==="ArrowDown")n((u=-1)=>Math.min(o-1,u+1));else if(i.key==="ArrowUp")n((u=-1)=>Math.max(0,u-1));else if(i.key==="Enter"||i.key===" "){let{current:u}=r,d=(s=t.current)==null?void 0:s.querySelector(`[aria-rowindex="${u}"]`);d&&ia(d,"click")}},[r,o,n]),a=Ft(i=>{n(i)},[n]);return{highlightedIndexRef:r,onHighlight:a,onKeyDown:l,tableRef:t}};export{zt as CheckboxCell,Be as GroupHeaderCell,Be as GroupHeaderCellNext,Mo as HeaderCell,Ui as InputCell,Bm as Table,So as TableCell,ko as TableGroupCell,na as ToggleCell,ct as isShowColumnSettings,mt as isShowTableSettings,Ol as noScrolling,Wo as updateTableConfig,zd as useControlledTableNavigation,dt as useTableModel,Tt as useTableScroll,yt as useTableViewport};
2
2
  //# sourceMappingURL=index.js.map