@vuu-ui/vuu-utils 0.8.21 → 0.8.22-debug

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,8 +1,2683 @@
1
- var We=(e,t,n)=>{if(!t.has(e))throw TypeError("Cannot "+n)};var f=(e,t,n)=>(We(e,t,"read from private field"),n?n.call(e):t.get(e)),X=(e,t,n)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,n)};function $n(e,t,n=[],r=[]){for(let o=0,i=e.length;o<i;o++)(t(e[o],o)?n:r).push(e[o]);return[n,r]}function Nn(e,t,n){return e.length!==t.length?!0:n===void 0?!e.every(r=>t.includes(r)):e.some(r=>t.findIndex(o=>o[n]===r[n])===-1)}function Un(e,t,n){return e.length!==t.length?!0:n===void 0?e.some((r,o)=>t[o]!==r):e.some((r,o)=>t[o][n]!==r[n])}var Wn=(e,t,n)=>{let r=e.indexOf(t);if(r===n)return e;let o=e.slice();if(r===-1)throw Error("moveItem, item to be moved not found");if(o.splice(r,1),n===-1)o.push(t);else{let i=(n>r,0);o.splice(n+i,0,t)}return o},Y=(e,t,n)=>{if(t===n)return e;{let r=e.slice(),[o]=r.splice(t,1);if(n===-1)return r.concat(o);{let i=(n>t,0);return r.splice(n+i,0,o),r}}},jn=(e,t)=>{let n=r=>!(e!=null&&e.includes(r));return e===void 0?t:t.some(n)?t.filter(n):[]},Bn=(e,t,n)=>t.filter(r=>e.findIndex(o=>n(o)===r)===-1);function qn(e,t,n){if(e)return t>=e.left&&t<e.right&&n>=e.top&&n<e.bottom}var Q=new Set(["=","!=",">",">=","<","<=","starts","ends"]),Jn=e=>e==="in"||Q.has(e),Xn=e=>e!==void 0&&e.name!==void 0,Z=e=>e!==void 0&&Q.has(e.op),ee=e=>e!==void 0&&(Z(e)||te(e)),te=e=>e!==void 0&&e.op==="in",Yn=e=>e.op==="in",Qn=e=>e.op==="and",Zn=e=>e.op==="or",er=e=>Z(e)&&e.column!==void 0&&e.op!==void 0&&e.value!==void 0;function E(e){return e!==void 0&&(e.op==="and"||e.op==="or")}var je=e=>typeof e=="string"?`"${e}"`:e,Be=e=>typeof e=="string"?`"${e}"`:e,V=e=>E(e)?e.filters.map(t=>V(t)).join(` ${e.op} `):te(e)?`${e.column} ${e.op} [${e.values.map(Be).join(",")}]`:`${e.column} ${e.op} ${je(e.value)}`,tr=(e,t)=>{if(E(t)){let[n,r]=t.filters;if(n.column===e.name)return[r,V(r)];if(r.column===e.name)return[n,V(n)]}return[void 0,""]};var Ke="asc",ne=[],ir={Average:2,Count:3,Distinct:6,Sum:1,High:4,Low:5};function sr(e,t,n=0){return e.map(r=>{if(typeof r=="string")return[t[r]+n,"asc"];if(Array.isArray(r)){let[o,i]=r;return[t[o]+n,i||Ke]}else throw Error("columnUtils.mapSortCriteria invalid input")})}var qe=["int","long","double"],ur=e=>e===void 0?"left":qe.includes(e)?"right":"left",ze=e=>e==="left"||e==="right",ar=e=>ze(e)||e==="floating"||e==="",Je=e=>typeof e.key=="number",lr=e=>{switch(e){case"double":case"int":case"long":return"number";case"boolean":return"boolean";default:return"string"}},pr=({serverDataType:e,type:t})=>e==="int"||e==="long"||e==="double"?!0:typeof t=="string"?t==="number":typeof(t==null?void 0:t.name)=="string"?(t==null?void 0:t.name)==="number":!1,ie=e=>(g(e.type)?e.type.name:e.type)==="date/time",cr=e=>typeof e.pin=="string",Xe=e=>Array.isArray(e.heading)&&e.heading.length>0,mr=e=>e.resizing,fr=({serverDataType:e})=>e===void 0?!1:e==="char"||e==="string",dr=e=>({name:e}),g=e=>typeof e<"u"&&typeof e!="string",Ye={},A=e=>typeof(e==null?void 0:e.name)<"u",gr=e=>typeof(e==null?void 0:e.name)<"u"&&"lookup"in e,Cr=e=>typeof(e==null?void 0:e.name)<"u"&&Array.isArray(e.values),yr=e=>g(e)&&A(e.renderer)&&Array.isArray(e.renderer.rules)&&e.renderer.rules.length>0,se=e=>e!==void 0&&typeof(e==null?void 0:e.map)<"u";function hr(e){let t=C.count;return e?e.reduce((n,r,o)=>(typeof r=="string"?n[r]=t+o:Je(r)?n[r.name]=r.key:n[r.name]=t+o,n),{}):Ye}function xr(e){let t=[],n=C.count-2;for(let r=0;r<e.length;r+=3)t[r]=e[r]+n,t[r+1]=e[r+1],t[r+2]=e[r+2];return t}var C={IDX:0,RENDER_IDX:1,IS_LEAF:2,IS_EXPANDED:3,DEPTH:4,COUNT:5,KEY:6,SELECTED:7,count:8,PARENT_IDX:"parent_idx",IDX_POINTER:"idx_pointer",FILTER_COUNT:"filter_count",NEXT_FILTER_IDX:"next_filter_idx"},Qe=(e,t)=>{let{originalIdx:n}=t;if(typeof n=="number")for(let r=0;r<e.length;r++){let{originalIdx:o=-1}=e[r];if(o>n)return e.splice(r,0,t),e}return e.push(t),e},k=e=>{var t;if((t=e[0])!=null&&t.isGroup){let[n,...r]=e;return n.columns.forEach(o=>{Qe(r,o)}),r}else return e};function Ze(e,t,n=!0){if(t&&t.length>0){let r=k(e),[o,i]=r.reduce((l,c,y)=>{let[h,T]=l;return t.includes(c.name)?h.push({...c,originalIdx:y}):T.push(c),l},[[],[]]);if(o.length!==t.length)throw Error(`extractGroupColumn: no column definition found for all groupBy cols ${JSON.stringify(t)} `);let s=t.length,u=t.map((l,c)=>({...o.find(h=>h.name===l),groupLevel:s-c}));return[{key:-1,name:"group-col",heading:["group-col"],isGroup:!0,columns:u,groupConfirmed:n,width:u.map(l=>l.width).reduce((l,c)=>l+c)+100},i]}return[null,k(e)]}var et=e=>e.isGroup===!0,tt=e=>typeof e=="string"&&e.endsWith("+"),Tr=(e,t)=>{var n;return((n=e.type)==null?void 0:n.name)==="json"&&tt(t[e.key])},Dr=e=>{var t;return((t=e.type)==null?void 0:t.name)==="json"},br=e=>{let t=[],n=[],r=[],o=4;for(let s of e)switch(s.pin){case"left":t.push({...s,endPin:void 0,pinnedOffset:o}),o+=s.width;break;case"right":n.unshift(s);break;default:r.push(s)}t.length&&t.push({...t.pop(),endPin:!0});let i=t.length?t.concat(r):r;if(n.length){let s=[],u=0;for(let a of n)s.unshift({...a,pinnedOffset:u}),u+=a.width;return s[0].endPin=!0,i.concat(s)}else return i},Rr=e=>{if(e.some(Xe)){let t=e.reduce((i,{heading:s})=>{var u;return Math.max(i,(u=s==null?void 0:s.length)!=null?u:0)},0),n,r=[],o;for(let i=0;i<t;i++)o=[],e.forEach(({heading:s=ne,width:u})=>{var l;let a=(l=s[i])!=null?l:"";n&&n.label===a?n.width+=u:(n={label:a,width:u},o.push(n))}),r.push(o);return r}return ne},Er=({pin:e,pinnedOffset:t=e==="left"?0:4,width:n})=>e==="left"?{left:t,width:n,"--pin-width":`${t+n-3}px`}:e==="right"?{right:t,width:n,"--pin-width":`${t+n}px`}:{width:n},Sr=(e,t,n)=>e.filter(r=>r.column!==t.name).concat({column:t.name,aggType:n}),ue=(e,t)=>{if(E(e))return nt(e,t);if(ee(e))return e.column===t?e:void 0},nt=(e,t)=>{let{filters:n,op:r}=e,o=[];if(n.forEach(i=>{let s=ue(i,t);s&&o.push(s)}),o.length!==0)return o.length===1?o[0]:{op:r,filters:o}},Mr=(e,t,n=!0)=>{var r;if(t.length){let[o,i]=Ze(e,t,n);if(o)return[o].concat(i)}else if((r=e[0])!=null&&r.isGroup)return k(e);return e},wr=(e,t)=>e.map(n=>{let r=rt(n,t);return r!==void 0?{...n,sorted:r}:n.sorted?{...n,sorted:void 0}:n}),Fr=(e,{filterStruct:t})=>e.map(n=>{let r=ue(t,n.name);return r!==void 0?{...n,filter:r}:n.filter?{...n,filter:void 0}:n}),Lr=e=>e.filter!==void 0,vr=e=>e.map(t=>{let{filter:n,...r}=t;return n?r:t}),rt=(e,{sortDefs:t})=>{let n=t.find(r=>r.column===e.name);if(n)return t.length>1?(t.indexOf(n)+1)*(n.sortType==="A"?1:-1):n.sortType},Pr=e=>{let t=e.indexOf(":");return t===-1?e:e.slice(0,t)},Vr=e=>e.label?e.label:le(e.name)?at(e):e.name,ot=(e,t)=>{let n=e.find(r=>r.name===t);if(n)return n;{let r=e.find(o=>o.isGroup);if(r)return ot(r.columns,t)}};function kr(e,t,n){let r=typeof t=="string"?e.find(o=>o.name===t):t;if(r){let o=n?{...r,...n}:r;return e.map(i=>i.name===o.name?o:i)}else throw Error("column-utils.replaceColun, column not found")}var Ar=e=>e.name,Ir=(e,t)=>Object.entries(t).reduce((n,[r,o])=>(n[r]=e[o],n),{}),Or=e=>et(e[0])&&e[0].groupConfirmed===!1,Hr=(e,t,n)=>{var i;let r=[],o=0;for(let s=0,u=0;u<e.length;u++){let a=e[u];if(!a.hidden){if(s+a.width<t)a.pin==="left"||s+a.width+((i=e[u+1])==null?void 0:i.width)>t?r.push(a):o+=a.width;else if(s>n){r.push(a);break}else r.push(a);s+=a.width}}return[r,o]},re=e=>e.hidden!==!0,Gr=(e,t)=>e.every(re)?e[t]:e.filter(re).at(t),{DEPTH:it,IS_LEAF:st}=C,_r=(e,t)=>{let{[it]:n,[st]:r}=t;if(r||n>e.length)return[null,n===null?0:Math.max(0,n-1)];if(n===0)return["$root",0];{let{key:o,valueFormatter:i}=e[n-1];return[i(t[o]),n-1]}},ae=e=>{switch(e){case"int":case"long":case"double":return"number";case"boolean":return"boolean";default:return"string"}},$r=(e,t)=>{let{serverDataType:n,type:r=ae(n)}=e;return g(r)?{...e,type:{...r,formatting:t}}:{...e,type:{name:r,formatting:t}}};function Nr(e,t){return g(e.type)?{...e,type:{...e.type,name:t}}:{...e,type:t}}var Ur=(e,t)=>{let{serverDataType:n,type:r=ae(n)}=e;return g(r)?{...e,type:{...r,renderer:t}}:{...e,type:{name:r,renderer:t}}},oe={},Wr=e=>{var t;return g(e.type)&&(t=e.type.formatting)!=null?t:oe},jr=e=>t=>e==null?void 0:e.includes(t.name),Br=(e,t,n)=>{let r=(u=n)=>a=>a.name===u;if(e.findIndex(r())!==-1)throw Error(`column-utils, addColumnToSubscribedColumns column ${n} is already subscribed`);let o=t.findIndex(r());if(o===-1)throw Error(`column-utils, addColumnToSubscribedColumns column ${n} is not available`);let i={...t[o]},s=-1;for(let u=o-1;u>=0;u--){let{name:a}=t[u];if(s=e.findIndex(r(a)),s!==-1)break}if(s===-1)return[i].concat(e);{let u=[];for(let a=0;a<e.length;a++)u.push(e[a]),a===s&&(u.push(i),s=Number.MAX_SAFE_INTEGER);return u}},ut=/.*:.*:.*/,le=e=>e!==void 0&&ut.test(e),I=e=>{if(le(e.name))return e.name.split(/:=?/);throw Error(`column-utils, getCalculatedColumnDetails column name ${e.name} is not valid calculated column`)},at=e=>I(e)[0],Kr=e=>I(e)[1],qr=e=>I(e)[2],zr=(e,t)=>{let[,n,r]=e.name.split(":");return{...e,name:`${t}:${n}:${r}`}},Jr=(e,t)=>{let[n,,r]=e.name.split(":");return{...e,name:`${n}:${t}:${r}`}},Xr=(e,t)=>{let[n,r]=e.name.split(":");return{...e,name:`${n}:${r}:=${t}`}},Yr=(e,t,n)=>{let r=e.findIndex(o=>o.name===t.name);return Y(e,r,n)};function Qr(e,t){return e.map(n=>n.name===t.name?t:n)}var Zr=({columns:e,table:t},n)=>typeof n=="function"?e.map(r=>{let o=n(t.table,r.name);return o?{...r,...o}:r}):e,eo=(e,t)=>{if(t!==void 0){let n=e.columns.find(r=>r.name===t);if(n)return n;throw Error(`getColumnByName no column '${t}' in schema for ${e.table.table}`)}};var pe=e=>{var t,n;if(((t=globalThis.document)==null?void 0:t.cookie)!==void 0)return(n=globalThis.document.cookie.split("; ").find(r=>r.startsWith(`${e}=`)))==null?void 0:n.split("=")[1]};var D=new Map,S=new Map,ce=new Map,me=new Map,fe=new Map,O=new Map,lt=(e,t)=>e===void 0||e==="private"?!0:Array.isArray(e)?e.includes(t):e===t,pt=(e,t)=>e==="cell-renderer",ct=(e,t)=>e==="column-header-content-renderer",mt=(e,t)=>e==="column-header-label-renderer",ft=(e,t)=>e==="cell-config-panel",dt=(e,t)=>e==="data-edit-validator";function oo(e,t,n="cell-renderer",r){pt(n,t)?D.set(e,t):ct(n,t)||mt(n,t)?S.set(e,t):ft(n,t)?me.set(e,t):dt(n,t)&&fe.set(e,t),r&&O.set(e,r)}var io=(e,t)=>{ce.set(e,t)},so=e=>{let n=Array.from(D.keys()).map(r=>({name:r,...O.get(r)}));return e?n.filter(r=>lt(r.serverDataType,e)):n},uo=e=>O.get(e);function ao(e){return gt(e)}function lo(e){if(e.colHeaderContentRenderer)return S.get(e.colHeaderContentRenderer)}function po(e){if(e.colHeaderLabelRenderer)return S.get(e.colHeaderLabelRenderer)}function gt(e){if(g(e.type)){let{renderer:t}=e.type;if(A(t))return D.get(t.name)}else{if(e.serverDataType==="boolean")return D.get("checkbox-cell");if(e.editable)return D.get("input-cell")}}function co(e=""){return ce.get(e)}function mo(e){return me.get(e)}function fo(e){return fe.get(e)}var Co={from:0,to:0};function yo({from:e,to:t},n=0,r=Number.MAX_SAFE_INTEGER){if(n===0)return r<e?{from:0,to:0}:{from:e,to:Math.min(t,r)};if(e===0)return{from:e,to:Math.min(t+n,r)};{let o=t-e,i=Math.round(n/2),s=e-i<0,u=r-(t+i)<0;return s&&u?{from:0,to:r}:s?{from:0,to:o+n}:u?{from:Math.max(0,r-(o+n)),to:r}:{from:e-i,to:t+i}}}function ho({from:e,to:t,bufferSize:n=0}){return{from:0,to:t-e,bufferSize:n,reset:!0}}var Ct=(e,{from:t,to:n})=>e>=t&&e<n,xo=({from:e,to:t},n)=>{let{from:r,to:o}=n,i=r>=t||o<=e,s=r<e&&o>t;return i||s?n:o>t?{from:t,to:o}:{from:r,to:e}},M=class e{constructor(t,n){this.from=t,this.to=n}isWithin(t){return Ct(t,this)}overlap(t,n){return t>=this.to||n<this.from?[0,0]:[Math.max(t,this.from),Math.min(n,this.to)]}copy(){return new e(this.from,this.to)}};var{KEY:yt}=C,de=class{constructor({from:t,to:n}){this.rowCount=0;this.setRowCount=t=>{t<this.data.length&&(this.data.length=t),this.rowCount=t};this.range=new M(t,n),this.data=new Array(n-t)}add(t){let[n]=t;if(this.isWithinRange(n)){let r=n-this.range.from,o=this.data[r]!==void 0;return this.data[r]=t,o}else return!1}getAtIndex(t){return this.range.isWithin(t)&&this.data[t-this.range.from]!=null?this.data[t-this.range.from]:void 0}getByKey(t){return this.data.find(n=>n[yt]===t)}isWithinRange(t){return this.range.isWithin(t)&&t<=this.rowCount}setRange(t,n){if(t!==this.range.from||n!==this.range.to){let[r,o]=this.range.overlap(t,n),i=new Array(n-t);for(let s=r;s<o;s++){let u=this.getAtIndex(s);if(u){let a=s-t;i[a]=u}}this.data=i,this.range.from=t,this.range.to=n}}hasData(t,n){let r=this.range.from,o=t-r,i=Math.min(n-r-1,this.rowCount-1);return this.data[o]!==void 0&&this.data[i]!==void 0}getData(t,n){var u;let{from:r,to:o}=this.range,i=Math.max(0,t-r),s=Math.min(n-r,(u=this.rowCount)!=null?u:n);return this.data.slice(i,s)}};var Eo={horizontal:{positionProp:"left",sizeProp:"width"},vertical:{positionProp:"top",sizeProp:"height"}};var H="up1",G="up2",_="down1",$="down2",Mo=e=>typeof e=="number"&&isFinite(e),ge={},wo=(e=ge,t=ge)=>{let n=Object.keys(e),r=Object.keys(t);return n.length===r.length&&n.every(o=>e[o]===t[o])};function Fo(e,t,n,r){if(e===void 0||!isFinite(e)||n===void 0||t===void 0)return"";{let o=e-n;return o&&typeof r=="number"&&(o=+e.toFixed(r)-+n.toFixed(r)),o?t===""?o<0?_:H:o>0?t===_||t===$||t===G?H:G:t===H||t===G||t===$?_:$:""}}var ht=e=>e.type==="vuu-links",vo=e=>e.type==="vuu-link-created",Po=e=>e.type==="vuu-link-removed",xt=e=>e.type==="vuu-menu",Vo=e=>xt(e)||ht(e);var Tt={filter:""},Dt={sortDefs:[]},Ao={aggregations:[],columns:[],filter:Tt,groupBy:[],sort:Dt},bt=({aggregations:e},{aggregations:t})=>e===void 0&&(t==null?void 0:t.length)===0||t===void 0&&(e==null?void 0:e.length)===0,Rt=({columns:e},{columns:t})=>e===void 0&&(t==null?void 0:t.length)===0||t===void 0&&(e==null?void 0:e.length)===0,Et=({filter:e},{filter:t})=>e===void 0&&(t==null?void 0:t.filter)===""||t===void 0&&(e==null?void 0:e.filter)==="",St=({groupBy:e},{groupBy:t})=>e===void 0&&(t==null?void 0:t.length)===0||t===void 0&&(e==null?void 0:e.length)===0,Mt=({sort:e},{sort:t})=>e===void 0&&(t==null?void 0:t.sortDefs.length)===0||t===void 0&&(e==null?void 0:e.sortDefs.length)===0,b=(e,t)=>e===t?!0:e===void 0&&t===void 0,wt=(e,t)=>{let{aggregations:n}=e,{aggregations:r}=t;return b(n,r)||bt(e,t)?!1:n===void 0||r===void 0||n.length!==r.length?!0:n.some(({column:o,aggType:i},s)=>o!==r[s].column||i!==r[s].aggType)},Ft=(e,t)=>{let{columns:n}=e,{columns:r}=t;return b(n,r)||Rt(e,t)?!1:n===void 0||r===void 0||(n==null?void 0:n.length)!==(r==null?void 0:r.length)?!0:n.some((o,i)=>o!==(r==null?void 0:r[i]))},Lt=(e,t)=>{var n,r;return Et(e,t)?!1:((n=e.filter)==null?void 0:n.filter)!==((r=t.filter)==null?void 0:r.filter)},vt=(e,t)=>{let{groupBy:n}=e,{groupBy:r}=t;return b(n,r)||St(e,t)?!1:n===void 0||r===void 0||(n==null?void 0:n.length)!==(r==null?void 0:r.length)?!0:n.some((o,i)=>o!==(r==null?void 0:r[i]))},Pt=(e,t)=>{let{sort:n}=e,{sort:r}=t;return b(n,r)||Mt(e,t)?!1:n===void 0||r===void 0||(n==null?void 0:n.sortDefs.length)!==(r==null?void 0:r.sortDefs.length)?!0:n.sortDefs.some(({column:o,sortType:i},s)=>o!==r.sortDefs[s].column||i!==r.sortDefs[s].sortType)},Vt=()=>!1,Io=(e,t)=>b(e,t)?!1:e===void 0||t===void 0?!0:wt(e,t)||Ft(e,t)||Lt(e,t)||vt(e,t)||Pt(e,t)||Vt(e,t),Oo=e=>e!==void 0&&e.groupBy!==void 0&&e.groupBy.length>0,Ho=e=>(e==null?void 0:e.filter)!==void 0&&e.filter.filter.length>0,Go=e=>{var t;return(e==null?void 0:e.sort)!==void 0&&Array.isArray((t=e.sort)==null?void 0:t.sortDefs)&&e.sort.sortDefs.length>0},_o=e=>typeof e.getTypeaheadSuggestions=="function",$o=e=>e.type==="TABLE_META_RESP",No=e=>e.type==="connection-status",Uo=e=>e.type==="connection-metrics",Wo=e=>typeof e.result<"u",jo=e=>e!==void 0&&"error"in e,Bo=e=>e!=null&&"action"in e,Ko=e=>"viewport"in e,qo=e=>{if(e.aggregations&&e.columns&&e.filter&&e.groupBy&&e.sort)return e;{let{aggregations:t=[],columns:n=[],filter:r={filter:""},groupBy:o=[],sort:i={sortDefs:[]},visualLink:s}=e;return{aggregations:t,columns:n,filter:r,groupBy:o,sort:i,visualLink:s}}};function Ce(e){return e!=null}var ye={hour:"2-digit",minute:"2-digit",second:"2-digit"},kt={"hh:mm:ss":{locale:"en-GB",options:{...ye,hour12:!1}},"hh:mm:ss a":{locale:"en-GB",options:{...ye,hour12:!0}}},x={day:"2-digit",month:"2-digit",year:"numeric"},At={"dd.mm.yyyy":{locale:"de-De",options:{...x}},"dd/mm/yyyy":{locale:"en-GB",options:{...x}},"dd MMM yyyy":{locale:"en-GB",options:{...x,month:"short"}},"dd MMMM yyyy":{locale:"en-GB",options:{...x,month:"long"}},"mm/dd/yyyy":{locale:"en-US",options:{...x}},"MMM dd, yyyy":{locale:"en-US",options:{...x,month:"short"}},"MMMM dd, yyyy":{locale:"en-US",options:{...x,month:"long"}}};function It(e){return[e.date?At[e.date]:null,e.time?kt[e.time]:null]}function he(e){let t=It(e).filter(Ce).map(n=>Intl.DateTimeFormat(n.locale,n.options));return n=>t.map(r=>r.format(n)).join(" ")}var xe=["dd.mm.yyyy","dd/mm/yyyy","dd MMM yyyy","dd MMMM yyyy","mm/dd/yyyy","MMM dd, yyyy","MMMM dd, yyyy"],Te=["hh:mm:ss","hh:mm:ss a"],Ot={date:xe,time:Te},Ht=e=>xe.includes(e),Gt=e=>Te.includes(e),N=e=>Ht(e==null?void 0:e.date)||Gt(e==null?void 0:e.time);var De={time:"hh:mm:ss",date:"dd.mm.yyyy"},be={date:De.date};function Re(e){return g(e)&&e.formatting&&N(e.formatting.pattern)?e.formatting.pattern:be}var _t=["error","warn","info","debug"],$t=e=>typeof e=="string"&&_t.includes(e),Nt="error",w=()=>{},Ut="error",{loggingLevel:F=Ut}=Wt(),Ee=e=>{let t=F==="debug",n=t||F==="info",r=n||F==="warn",o=r||F==="error",i=n?l=>console.info(`[${e}] ${l}`):w,s=r?l=>console.warn(`[${e}] ${l}`):w,u=t?l=>console.debug(`[${e}] ${l}`):w;return{errorEnabled:o,error:o?l=>console.error(`[${e}] ${l}`):w}};function Wt(){return typeof loggingSettings<"u"?loggingSettings:{loggingLevel:Se()}}function Se(){let e=pe("vuu-logging-level");return $t(e)?e:Nt}var ai=()=>`const loggingSettings = { loggingLevel: "${Se()}"};`;var{debug:jt,debugEnabled:Bt}=Ee("range-monitor"),Me=class{constructor(t){this.source=t;this.range={from:0,to:0};this.timestamp=0}isSet(){return this.timestamp!==0}set({from:t,to:n}){let{timestamp:r}=this;if(this.range.from=t,this.range.to=n,this.timestamp=performance.now(),r)Bt&&jt(`<${this.source}> [${t}-${n}], ${(this.timestamp-r).toFixed(0)} ms elapsed`);else return 0}};var mi=(e,t,n)=>{let r=document.createElement(e);return t&&(r.className=t),n&&(r.textContent=n),r},Kt=(e,t)=>{if(e){if(e.hasAttribute("tabindex")){let r=parseInt(e.getAttribute("tabindex"));if(!isNaN(r)&&(t===void 0||r===t))return e}let n=typeof t=="number"?e.querySelector(`[tabindex="${t}"]`):e.querySelector("[tabindex]");if(n)return n}},fi=e=>{if(e){let t=parseInt(e.dataset.index||"");if(!isNaN(t))return t}return-1},qt=(e,t)=>e.closest(`[data-${t}]`),di=e=>qt(e,"index");function gi(e,t,n=!1){if(e===null&&n)throw Error("html-utils getElementByDataIndex, container is null");let r=e==null?void 0:e.querySelector(`[data-index="${t}"]`);if(r)return r;if(n)throw Error("html-utils getElementByDataIndex, Item not found with data-index='${index}'")}var Ci=(e,t)=>{requestAnimationFrame(()=>{let n=Kt(e,t);n&&n.focus()})},yi=e=>{let t=e==null?void 0:e.closest("[data-index]");return!(!t||t.ariaDisabled||t.dataset.selectable==="false"||t.querySelector('[data-selectable="false"],[aria-disabled="true"]'))},U;function hi(){if(U===void 0){let e=document.createElement("div");e.className="scrollable-content",e.style.width="50px",e.style.height="50px",e.style.overflowY="scroll",e.style.position="absolute",e.style.top="-200px",e.style.left="-200px";let t=document.createElement("div");t.style.height="100px",t.style.width="100%",e.appendChild(t),document.body.appendChild(e);let n=e.offsetWidth,r=t.offsetWidth;document.body.removeChild(e),U=n-r,e=null}return U}var xi=(e,t)=>{let n=new MouseEvent(t,{view:window,bubbles:!0,cancelable:!0});e.dispatchEvent(n)},Ti=(e,t)=>{let n=new Event(t,{bubbles:!0,cancelable:!0});e.dispatchEvent(n)};function we(e){return Array.isArray(e)}function zt(e){return!Array.isArray(e)}var m,Fe=class{constructor(){X(this,m,new Map)}addListener(t,n){let r=f(this,m).get(t);r?we(r)?r.push(n):zt(r)&&f(this,m).set(t,[r,n]):f(this,m).set(t,n)}removeListener(t,n){if(!f(this,m).has(t))return;let r=f(this,m).get(t),o=-1;if(r===n)f(this,m).delete(t);else if(Array.isArray(r)){for(let i=length;i-- >0;)if(r[i]===n){o=i;break}if(o<0)return;r.length===1?(r.length=0,f(this,m).delete(t)):r.splice(o,1)}}removeAllListeners(t){t&&f(this,m).has(t)?f(this,m).delete(t):t===void 0&&f(this,m).clear()}emit(t,...n){if(f(this,m)){let r=f(this,m).get(t);r&&this.invokeHandler(r,n)}}once(t,n){let r=(...o)=>{this.removeListener(t,r),n(...o)};this.on(t,r)}on(t,n){this.addListener(t,n)}hasListener(t,n){let r=f(this,m).get(t);return Array.isArray(r)?r.includes(n):r===n}invokeHandler(t,n){if(we(t))t.slice().forEach(r=>this.invokeHandler(r,n));else switch(n.length){case 0:t();break;case 1:t(n[0]);break;case 2:t(n[0],n[1]);break;default:t.call(null,...n)}}};m=new WeakMap;var L="\u2008",p="\u2007";var Le={DIGIT:p,TWO_DIGITS:p+p,THREE_DIGITS:p+p+p,FULL_PADDING:[null,L+p,L+p+p,L+p+p+p,L+p+p+p+p]},Jt={DIGIT:"0",TWO_DIGITS:"00",THREE_DIGITS:"000",FULL_PADDING:[null,"0","00","000","0000"]};function Xt(e,t=6){return(Yt+e).slice(-t)}var Yt=p+p+p+p+p+p+p+p+p,W={Right:"right",Center:"center",Left:"left"};function ve(e,t,n){let r=e.length,o=t-r;if(o>0)o===1?e=e+n.DIGIT:o===2?e=e+n.TWO_DIGITS:o===3&&(e=e+n.THREE_DIGITS);else if(o<0&&(e=e.slice(0,t),r=t),n===Le&&e.charAt(r-1)==="0")return e=e.replace(/0+$/,""),ve(e,t,n);return e}function Pe(e,t=W.Right,n=4,r,o){if(e===void 0||typeof e!="number"||isNaN(e))return"";let i,s,u,[a,l=""]=e.toString().split("."),c=l.length;return i=parseFloat(a).toLocaleString(),t===W.Left&&o&&(i=Xt(i)),n===-1||c===n?s=l:c>n?s=parseFloat("0."+l).toFixed(n).slice(2):(u=r?Jt:o&&t!==W.Left?Le:null)?c===0?s=u.FULL_PADDING[n]:s=ve(l,n,u):s=l,i+(s?"."+s:"")}var Qt={},Ve=e=>e==null?"":typeof e=="string"?e:e.toString(),Zt=e=>{let t=Re(e.type),n=he(t);return r=>typeof r=="number"&&r!==0?n(new Date(r)):""},en=({align:e="right",type:t})=>{var n;if(t===void 0||typeof t=="string")return Ve;{let{alignOnDecimals:r=!1,decimals:o,zeroPad:i=!1}=(n=t.formatting)!=null?n:Qt;return s=>{if(typeof s=="string"&&(s.startsWith("\u03A3")||s.startsWith("[")))return s;let u=typeof s=="number"?s:typeof s=="string"?parseFloat(s):void 0;return Pe(u,e,o,i,r)}}},tn=e=>t=>{var n;return(n=e[t])!=null?n:""},Li=(e,t=e.serverDataType)=>{if(ie(e))return Zt(e);let{type:n}=e;return g(n)&&se(n==null?void 0:n.renderer)?tn(n.renderer.map):t==="string"||t==="char"?r=>r:t==="double"?en(e):Ve};var Pi=()=>`hw-${Math.round(Math.random()*1e5)}`;function ki(e,t){return e?e.concat(t.name):[t.name]}var Ii=e=>e.length===1,Oi=e=>e.key==='"'||e.key==="'";function Gi(e,t){if(!e){let n=new Error(t);throw n.name="Invariant Violation",n.framesToPop=1,n}}var nn=e=>Object.prototype.toString.call(e)==="[object Object]";function $i(e){return typeof e=="string"?e:nn(e)?Object.prototype.hasOwnProperty.call(e,"label")?String(e.label):(console.warn(["itemToString: you've likely forgotten to set the label prop on the item object.","You can also provide your own `itemToString` implementation."].join(`
2
- `)),""):String(e)}var{COUNT:rn}=C,ke=e=>typeof e=="object"&&e!==null,on=["boolean","number","string"],sn=e=>on.includes(typeof e),un=e=>typeof e=="boolean"?"boolean":typeof e=="number"?"number":"string",an=(e,t)=>{if(ke(t))return{attribute:`${e}+`,attributeValue:"",type:"json"};if(t===void 0)return{attribute:e,attributeValue:"undefined",type:"string"};if(sn(t))return{attribute:e,attributeValue:t,type:un(t)};throw Error(`unsupported type ${typeof t} in JSON`)},j={name:"json",renderer:{name:"json"}},Wi=e=>{let t=[];t.push({name:"col 1",type:j},{name:"col 2",type:j});let n=[];return Ae(n,e,t),[t,n]},Ae=(e,t,n,r={value:0},o="$root",i=0)=>{let s=0,u=0;i===n.length-1&&n.push({name:`col ${n.length+1}`,hidden:!0,type:j});let a=Object.entries(t);for(let l=0;l<a.length;l++,r.value+=1){let[c,y]=a[l],{attribute:h,attributeValue:T,type:R}=an(c,y),Ne=R!=="json",Ue=Array(i).fill(""),K=`${o}|${c}`,q=[r.value,r.value,Ne,!1,i,0,K,0,...Ue,h,T];if(e.push(q),u+=1,ke(y)){let[z,J]=Ae(e,y,n,{value:r.value+1},K,i+1);q[rn]=z,s+=z,u+=J,r.value+=J}else s+=1}return[s,u]};var Bi="ArrowUp",Ki="ArrowDown",qi="ArrowLeft",zi="ArrowRight",Ji="Enter",Xi="Escape",Yi="Home",Qi="End",Zi="PageUp",es="PageDown",ts=" ",ns="Tab";var Ie=class{constructor(t){this.keys=new Map,this.free=[],this.nextKeyValue=0,this.reset(t)}next(){return this.free.length>0?this.free.shift():this.nextKeyValue++}reset({from:t,to:n}){this.keys.forEach((o,i)=>{(i<t||i>=n)&&(this.free.push(o),this.keys.delete(i))});let r=n-t;this.keys.size+this.free.length>r&&(this.free.length=Math.max(0,r-this.keys.size));for(let o=t;o<n;o++)if(!this.keys.has(o)){let i=this.next();this.keys.set(o,i)}this.nextKeyValue>this.keys.size&&(this.nextKeyValue=this.keys.size)}keyFor(t){let n=this.keys.get(t);if(n===void 0)throw console.log(`key not found
1
+ var __accessCheck = (obj, member, msg) => {
2
+ if (!member.has(obj))
3
+ throw TypeError("Cannot " + msg);
4
+ };
5
+ var __privateGet = (obj, member, getter) => {
6
+ __accessCheck(obj, member, "read from private field");
7
+ return getter ? getter.call(obj) : member.get(obj);
8
+ };
9
+ var __privateAdd = (obj, member, value) => {
10
+ if (member.has(obj))
11
+ throw TypeError("Cannot add the same private member more than once");
12
+ member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
13
+ };
14
+
15
+ // src/array-utils.ts
16
+ function partition(array, test, pass = [], fail = []) {
17
+ for (let i = 0, len = array.length; i < len; i++) {
18
+ (test(array[i], i) ? pass : fail).push(array[i]);
19
+ }
20
+ return [pass, fail];
21
+ }
22
+ function itemsChanged(currentItems, newItems, identityProperty) {
23
+ if (currentItems.length !== newItems.length) {
24
+ return true;
25
+ }
26
+ if (identityProperty === void 0) {
27
+ return !currentItems.every((item) => newItems.includes(item));
28
+ } else {
29
+ return currentItems.some(
30
+ (currentItem) => newItems.findIndex(
31
+ (newItem) => newItem[identityProperty] === currentItem[identityProperty]
32
+ ) === -1
33
+ );
34
+ }
35
+ }
36
+ function itemsOrOrderChanged(currentItems, newItems, identityProperty) {
37
+ if (currentItems.length !== newItems.length) {
38
+ return true;
39
+ }
40
+ if (identityProperty === void 0) {
41
+ return currentItems.some((item, index) => newItems[index] !== item);
42
+ } else {
43
+ return currentItems.some(
44
+ (currentItem, index) => newItems[index][identityProperty] !== currentItem[identityProperty]
45
+ );
46
+ }
47
+ }
48
+ var moveItemDeprecated = (items, item, moveTo) => {
49
+ const fromIndex = items.indexOf(item);
50
+ if (fromIndex === moveTo) {
51
+ return items;
52
+ }
53
+ const newItems = items.slice();
54
+ if (fromIndex === -1) {
55
+ throw Error("moveItem, item to be moved not found");
56
+ }
57
+ newItems.splice(fromIndex, 1);
58
+ if (moveTo === -1) {
59
+ newItems.push(item);
60
+ } else {
61
+ const offset = moveTo > fromIndex ? 0 : 0;
62
+ newItems.splice(moveTo + offset, 0, item);
63
+ }
64
+ return newItems;
65
+ };
66
+ var moveItem = (items, fromIndex, toIndex) => {
67
+ if (fromIndex === toIndex) {
68
+ return items;
69
+ } else {
70
+ const newItems = items.slice();
71
+ const [item] = newItems.splice(fromIndex, 1);
72
+ if (toIndex === -1) {
73
+ return newItems.concat(item);
74
+ } else {
75
+ const offset = toIndex > fromIndex ? 0 : 0;
76
+ newItems.splice(toIndex + offset, 0, item);
77
+ return newItems;
78
+ }
79
+ }
80
+ };
81
+ var getAddedItems = (values, newValues) => {
82
+ const isNew = (v) => !(values == null ? void 0 : values.includes(v));
83
+ if (values === void 0) {
84
+ return newValues;
85
+ } else if (newValues.some(isNew)) {
86
+ return newValues.filter(isNew);
87
+ } else {
88
+ return [];
89
+ }
90
+ };
91
+ var getMissingItems = (sourceItems, items, identity) => items.filter((i) => sourceItems.findIndex((s) => identity(s) === i) === -1);
92
+
93
+ // src/box-utils.ts
94
+ function boxContainsPoint(rect, x, y) {
95
+ if (rect) {
96
+ return x >= rect.left && x < rect.right && y >= rect.top && y < rect.bottom;
97
+ }
98
+ }
99
+
100
+ // src/filter-utils.ts
101
+ var singleValueFilterOps = /* @__PURE__ */ new Set([
102
+ "=",
103
+ "!=",
104
+ ">",
105
+ ">=",
106
+ "<",
107
+ "<=",
108
+ "starts",
109
+ "ends"
110
+ ]);
111
+ var isValidFilterClauseOp = (op) => op === "in" || singleValueFilterOps.has(op);
112
+ var isNamedFilter = (f) => f !== void 0 && f.name !== void 0;
113
+ var isSingleValueFilter = (f) => f !== void 0 && singleValueFilterOps.has(f.op);
114
+ var isFilterClause = (f) => f !== void 0 && (isSingleValueFilter(f) || isMultiValueFilter(f));
115
+ var isMultiValueFilter = (f) => f !== void 0 && f.op === "in";
116
+ var isInFilter = (f) => f.op === "in";
117
+ var isAndFilter = (f) => f.op === "and";
118
+ var isOrFilter = (f) => f.op === "or";
119
+ var isCompleteFilter = (filter) => isSingleValueFilter(filter) && filter.column !== void 0 && filter.op !== void 0 && filter.value !== void 0;
120
+ function isMultiClauseFilter(f) {
121
+ return f !== void 0 && (f.op === "and" || f.op === "or");
122
+ }
123
+ var filterValue = (value) => typeof value === "string" ? `"${value}"` : value;
124
+ var quotedStrings = (value) => typeof value === "string" ? `"${value}"` : value;
125
+ var filterAsQuery = (f) => {
126
+ if (isMultiClauseFilter(f)) {
127
+ return f.filters.map((filter) => filterAsQuery(filter)).join(` ${f.op} `);
128
+ } else if (isMultiValueFilter(f)) {
129
+ return `${f.column} ${f.op} [${f.values.map(quotedStrings).join(",")}]`;
130
+ } else {
131
+ return `${f.column} ${f.op} ${filterValue(f.value)}`;
132
+ }
133
+ };
134
+ var removeColumnFromFilter = (column, filter) => {
135
+ if (isMultiClauseFilter(filter)) {
136
+ const [clause1, clause2] = filter.filters;
137
+ if (clause1.column === column.name) {
138
+ return [clause2, filterAsQuery(clause2)];
139
+ }
140
+ if (clause2.column === column.name) {
141
+ return [clause1, filterAsQuery(clause1)];
142
+ }
143
+ }
144
+ return [void 0, ""];
145
+ };
146
+
147
+ // src/column-utils.ts
148
+ var SORT_ASC = "asc";
149
+ var NO_HEADINGS = [];
150
+ var AggregationType = {
151
+ Average: 2,
152
+ Count: 3,
153
+ Distinct: 6,
154
+ Sum: 1,
155
+ High: 4,
156
+ Low: 5
157
+ };
158
+ function mapSortCriteria(sortCriteria, columnMap, metadataOffset = 0) {
159
+ return sortCriteria.map((s) => {
160
+ if (typeof s === "string") {
161
+ return [columnMap[s] + metadataOffset, "asc"];
162
+ } else if (Array.isArray(s)) {
163
+ const [columnName, sortDir] = s;
164
+ return [columnMap[columnName] + metadataOffset, sortDir || SORT_ASC];
165
+ } else {
166
+ throw Error("columnUtils.mapSortCriteria invalid input");
167
+ }
168
+ });
169
+ }
170
+ var numericTypes = ["int", "long", "double"];
171
+ var getDefaultAlignment = (serverDataType) => serverDataType === void 0 ? "left" : numericTypes.includes(serverDataType) ? "right" : "left";
172
+ var isValidColumnAlignment = (v) => v === "left" || v === "right";
173
+ var isValidPinLocation = (v) => isValidColumnAlignment(v) || v === "floating" || v === "";
174
+ var isKeyedColumn = (column) => {
175
+ return typeof column.key === "number";
176
+ };
177
+ var fromServerDataType = (serverDataType) => {
178
+ switch (serverDataType) {
179
+ case "double":
180
+ case "int":
181
+ case "long":
182
+ return "number";
183
+ case "boolean":
184
+ return "boolean";
185
+ default:
186
+ return "string";
187
+ }
188
+ };
189
+ var isNumericColumn = ({ serverDataType, type }) => {
190
+ if (serverDataType === "int" || serverDataType === "long" || serverDataType === "double") {
191
+ return true;
192
+ }
193
+ if (typeof type === "string") {
194
+ return type === "number";
195
+ }
196
+ if (typeof (type == null ? void 0 : type.name) === "string") {
197
+ return (type == null ? void 0 : type.name) === "number";
198
+ }
199
+ return false;
200
+ };
201
+ var isDateTimeColumn = (column) => (isTypeDescriptor(column.type) ? column.type.name : column.type) === "date/time";
202
+ var isPinned = (column) => typeof column.pin === "string";
203
+ var hasHeadings = (column) => Array.isArray(column.heading) && column.heading.length > 0;
204
+ var isResizing = (column) => column.resizing;
205
+ var isTextColumn = ({ serverDataType }) => serverDataType === void 0 ? false : serverDataType === "char" || serverDataType === "string";
206
+ var toColumnDescriptor = (name) => ({
207
+ name
208
+ });
209
+ var isTypeDescriptor = (type) => typeof type !== "undefined" && typeof type !== "string";
210
+ var EMPTY_COLUMN_MAP = {};
211
+ var isColumnTypeRenderer = (renderer) => typeof (renderer == null ? void 0 : renderer.name) !== "undefined";
212
+ var isLookupRenderer = (renderer) => typeof (renderer == null ? void 0 : renderer.name) !== "undefined" && "lookup" in renderer;
213
+ var isValueListRenderer = (renderer) => typeof (renderer == null ? void 0 : renderer.name) !== "undefined" && Array.isArray(renderer.values);
214
+ var hasValidationRules = (type) => isTypeDescriptor(type) && isColumnTypeRenderer(type.renderer) && Array.isArray(type.renderer.rules) && type.renderer.rules.length > 0;
215
+ var isMappedValueTypeRenderer = (renderer) => renderer !== void 0 && typeof (renderer == null ? void 0 : renderer.map) !== "undefined";
216
+ function buildColumnMap(columns) {
217
+ const start = metadataKeys.count;
218
+ if (columns) {
219
+ return columns.reduce((map, column, i) => {
220
+ if (typeof column === "string") {
221
+ map[column] = start + i;
222
+ } else if (isKeyedColumn(column)) {
223
+ map[column.name] = column.key;
224
+ } else {
225
+ map[column.name] = start + i;
226
+ }
227
+ return map;
228
+ }, {});
229
+ } else {
230
+ return EMPTY_COLUMN_MAP;
231
+ }
232
+ }
233
+ function projectUpdates(updates) {
234
+ const results = [];
235
+ const metadataOffset = metadataKeys.count - 2;
236
+ for (let i = 0; i < updates.length; i += 3) {
237
+ results[i] = updates[i] + metadataOffset;
238
+ results[i + 1] = updates[i + 1];
239
+ results[i + 2] = updates[i + 2];
240
+ }
241
+ return results;
242
+ }
243
+ var metadataKeys = {
244
+ IDX: 0,
245
+ RENDER_IDX: 1,
246
+ IS_LEAF: 2,
247
+ IS_EXPANDED: 3,
248
+ DEPTH: 4,
249
+ COUNT: 5,
250
+ KEY: 6,
251
+ SELECTED: 7,
252
+ count: 8,
253
+ // TODO following only used in datamodel
254
+ PARENT_IDX: "parent_idx",
255
+ IDX_POINTER: "idx_pointer",
256
+ FILTER_COUNT: "filter_count",
257
+ NEXT_FILTER_IDX: "next_filter_idx"
258
+ };
259
+ var insertColumn = (columns, column) => {
260
+ const { originalIdx } = column;
261
+ if (typeof originalIdx === "number") {
262
+ for (let i = 0; i < columns.length; i++) {
263
+ const { originalIdx: colIdx = -1 } = columns[i];
264
+ if (colIdx > originalIdx) {
265
+ columns.splice(i, 0, column);
266
+ return columns;
267
+ }
268
+ }
269
+ }
270
+ columns.push(column);
271
+ return columns;
272
+ };
273
+ var flattenColumnGroup = (columns) => {
274
+ var _a;
275
+ if ((_a = columns[0]) == null ? void 0 : _a.isGroup) {
276
+ const [groupColumn, ...nonGroupedColumns] = columns;
277
+ groupColumn.columns.forEach((groupColumn2) => {
278
+ insertColumn(nonGroupedColumns, groupColumn2);
279
+ });
280
+ return nonGroupedColumns;
281
+ } else {
282
+ return columns;
283
+ }
284
+ };
285
+ function extractGroupColumn(columns, groupBy, confirmed = true) {
286
+ if (groupBy && groupBy.length > 0) {
287
+ const flattenedColumns = flattenColumnGroup(columns);
288
+ const [groupedColumns, rest] = flattenedColumns.reduce(
289
+ (result, column, i) => {
290
+ const [g, r2] = result;
291
+ if (groupBy.includes(column.name)) {
292
+ g.push({
293
+ ...column,
294
+ originalIdx: i
295
+ });
296
+ } else {
297
+ r2.push(column);
298
+ }
299
+ return result;
300
+ },
301
+ [[], []]
302
+ );
303
+ if (groupedColumns.length !== groupBy.length) {
304
+ throw Error(
305
+ `extractGroupColumn: no column definition found for all groupBy cols ${JSON.stringify(
306
+ groupBy
307
+ )} `
308
+ );
309
+ }
310
+ const groupCount = groupBy.length;
311
+ const groupCols = groupBy.map((name, idx) => {
312
+ const column = groupedColumns.find(
313
+ (col) => col.name === name
314
+ );
315
+ return {
316
+ ...column,
317
+ groupLevel: groupCount - idx
318
+ };
319
+ });
320
+ const groupCol = {
321
+ key: -1,
322
+ name: "group-col",
323
+ heading: ["group-col"],
324
+ isGroup: true,
325
+ columns: groupCols,
326
+ groupConfirmed: confirmed,
327
+ width: groupCols.map((c) => c.width).reduce((a, b) => a + b) + 100
328
+ };
329
+ return [groupCol, rest];
330
+ }
331
+ return [null, flattenColumnGroup(columns)];
332
+ }
333
+ var isGroupColumn = (column) => column.isGroup === true;
334
+ var isJsonAttribute = (value) => typeof value === "string" && value.endsWith("+");
335
+ var isJsonGroup = (column, row) => {
336
+ var _a;
337
+ return ((_a = column.type) == null ? void 0 : _a.name) === "json" && isJsonAttribute(row[column.key]);
338
+ };
339
+ var isJsonColumn = (column) => {
340
+ var _a;
341
+ return ((_a = column.type) == null ? void 0 : _a.name) === "json";
342
+ };
343
+ var sortPinnedColumns = (columns) => {
344
+ const leftPinnedColumns = [];
345
+ const rightPinnedColumns = [];
346
+ const restColumns = [];
347
+ let pinnedWidthLeft = 4;
348
+ for (const column of columns) {
349
+ switch (column.pin) {
350
+ case "left":
351
+ {
352
+ leftPinnedColumns.push({
353
+ ...column,
354
+ endPin: void 0,
355
+ pinnedOffset: pinnedWidthLeft
356
+ });
357
+ pinnedWidthLeft += column.width;
358
+ }
359
+ break;
360
+ case "right":
361
+ rightPinnedColumns.unshift(column);
362
+ break;
363
+ default:
364
+ restColumns.push(column);
365
+ }
366
+ }
367
+ if (leftPinnedColumns.length) {
368
+ leftPinnedColumns.push({
369
+ ...leftPinnedColumns.pop(),
370
+ endPin: true
371
+ });
372
+ }
373
+ const allColumns = leftPinnedColumns.length ? leftPinnedColumns.concat(restColumns) : restColumns;
374
+ if (rightPinnedColumns.length) {
375
+ const measuredRightPinnedColumns = [];
376
+ let pinnedWidthRight = 0;
377
+ for (const column of rightPinnedColumns) {
378
+ measuredRightPinnedColumns.unshift({
379
+ ...column,
380
+ pinnedOffset: pinnedWidthRight
381
+ });
382
+ pinnedWidthRight += column.width;
383
+ }
384
+ measuredRightPinnedColumns[0].endPin = true;
385
+ return allColumns.concat(measuredRightPinnedColumns);
386
+ } else {
387
+ return allColumns;
388
+ }
389
+ };
390
+ var getTableHeadings = (columns) => {
391
+ if (columns.some(hasHeadings)) {
392
+ const maxHeadingDepth = columns.reduce(
393
+ (max, { heading: heading2 }) => {
394
+ var _a;
395
+ return Math.max(max, (_a = heading2 == null ? void 0 : heading2.length) != null ? _a : 0);
396
+ },
397
+ 0
398
+ );
399
+ let heading = void 0;
400
+ const tableHeadings = [];
401
+ let tableHeadingsRow;
402
+ for (let level = 0; level < maxHeadingDepth; level++) {
403
+ tableHeadingsRow = [];
404
+ columns.forEach(({ heading: columnHeading = NO_HEADINGS, width }) => {
405
+ var _a;
406
+ const label = (_a = columnHeading[level]) != null ? _a : "";
407
+ if (heading && heading.label === label) {
408
+ heading.width += width;
409
+ } else {
410
+ heading = { label, width };
411
+ tableHeadingsRow.push(heading);
412
+ }
413
+ });
414
+ tableHeadings.push(tableHeadingsRow);
415
+ }
416
+ return tableHeadings;
417
+ }
418
+ return NO_HEADINGS;
419
+ };
420
+ var getColumnStyle = ({
421
+ pin,
422
+ pinnedOffset = pin === "left" ? 0 : 4,
423
+ width
424
+ }) => pin === "left" ? {
425
+ left: pinnedOffset,
426
+ width,
427
+ "--pin-width": `${pinnedOffset + width - 3}px`
428
+ } : pin === "right" ? {
429
+ right: pinnedOffset,
430
+ width,
431
+ "--pin-width": `${pinnedOffset + width}px`
432
+ } : { width };
433
+ var setAggregations = (aggregations, column, aggType) => {
434
+ return aggregations.filter((agg) => agg.column !== column.name).concat({ column: column.name, aggType });
435
+ };
436
+ var extractFilterForColumn = (filter, columnName) => {
437
+ if (isMultiClauseFilter(filter)) {
438
+ return collectFiltersForColumn(filter, columnName);
439
+ }
440
+ if (isFilterClause(filter)) {
441
+ return filter.column === columnName ? filter : void 0;
442
+ }
443
+ return void 0;
444
+ };
445
+ var collectFiltersForColumn = (filter, columnName) => {
446
+ const { filters, op } = filter;
447
+ const results = [];
448
+ filters.forEach((filter2) => {
449
+ const ffc = extractFilterForColumn(filter2, columnName);
450
+ if (ffc) {
451
+ results.push(ffc);
452
+ }
453
+ });
454
+ if (results.length === 0) {
455
+ return void 0;
456
+ } else if (results.length === 1) {
457
+ return results[0];
458
+ }
459
+ return {
460
+ op,
461
+ filters: results
462
+ };
463
+ };
464
+ var applyGroupByToColumns = (columns, groupBy, confirmed = true) => {
465
+ var _a;
466
+ if (groupBy.length) {
467
+ const [groupColumn, nonGroupedColumns] = extractGroupColumn(
468
+ columns,
469
+ groupBy,
470
+ confirmed
471
+ );
472
+ if (groupColumn) {
473
+ return [groupColumn].concat(nonGroupedColumns);
474
+ }
475
+ } else if ((_a = columns[0]) == null ? void 0 : _a.isGroup) {
476
+ return flattenColumnGroup(columns);
477
+ }
478
+ return columns;
479
+ };
480
+ var applySortToColumns = (colunms, sort) => colunms.map((column) => {
481
+ const sorted = getSortType(column, sort);
482
+ if (sorted !== void 0) {
483
+ return {
484
+ ...column,
485
+ sorted
486
+ };
487
+ } else if (column.sorted) {
488
+ return {
489
+ ...column,
490
+ sorted: void 0
491
+ };
492
+ } else {
493
+ return column;
494
+ }
495
+ });
496
+ var applyFilterToColumns = (columns, { filterStruct }) => columns.map((column) => {
497
+ const filter = extractFilterForColumn(filterStruct, column.name);
498
+ if (filter !== void 0) {
499
+ return {
500
+ ...column,
501
+ filter
502
+ };
503
+ } else if (column.filter) {
504
+ return {
505
+ ...column,
506
+ filter: void 0
507
+ };
508
+ } else {
509
+ return column;
510
+ }
511
+ });
512
+ var isFilteredColumn = (column) => column.filter !== void 0;
513
+ var stripFilterFromColumns = (columns) => columns.map((col) => {
514
+ const { filter, ...rest } = col;
515
+ return filter ? rest : col;
516
+ });
517
+ var getSortType = (column, { sortDefs }) => {
518
+ const sortDef = sortDefs.find((sortCol) => sortCol.column === column.name);
519
+ if (sortDef) {
520
+ return sortDefs.length > 1 ? (sortDefs.indexOf(sortDef) + 1) * (sortDef.sortType === "A" ? 1 : -1) : sortDef.sortType;
521
+ }
522
+ };
523
+ var getColumnName = (name) => {
524
+ const pos = name.indexOf(":");
525
+ if (pos === -1) {
526
+ return name;
527
+ } else {
528
+ return name.slice(0, pos);
529
+ }
530
+ };
531
+ var getColumnLabel = (column) => {
532
+ if (column.label) {
533
+ return column.label;
534
+ } else if (isCalculatedColumn(column.name)) {
535
+ return getCalculatedColumnName(column);
536
+ } else {
537
+ return column.name;
538
+ }
539
+ };
540
+ var findColumn = (columns, columnName) => {
541
+ const column = columns.find((col) => col.name === columnName);
542
+ if (column) {
543
+ return column;
544
+ } else {
545
+ const groupColumn = columns.find(
546
+ (col) => col.isGroup
547
+ );
548
+ if (groupColumn) {
549
+ return findColumn(groupColumn.columns, columnName);
550
+ }
551
+ }
552
+ };
553
+ function updateColumn(columns, column, options) {
554
+ const targetColumn = typeof column === "string" ? columns.find((col) => col.name === column) : column;
555
+ if (targetColumn) {
556
+ const replacementColumn = options ? { ...targetColumn, ...options } : targetColumn;
557
+ return columns.map(
558
+ (col) => col.name === replacementColumn.name ? replacementColumn : col
559
+ );
560
+ } else {
561
+ throw Error("column-utils.replaceColun, column not found");
562
+ }
563
+ }
564
+ var toDataSourceColumns = (column) => column.name;
565
+ var getRowRecord = (row, columnMap) => {
566
+ return Object.entries(columnMap).reduce(
567
+ (map, [colName, key]) => {
568
+ map[colName] = row[key];
569
+ return map;
570
+ },
571
+ {}
572
+ );
573
+ };
574
+ var isDataLoading = (columns) => {
575
+ return isGroupColumn(columns[0]) && columns[0].groupConfirmed === false;
576
+ };
577
+ var getColumnsInViewport = (columns, vpStart, vpEnd) => {
578
+ var _a;
579
+ const visibleColumns = [];
580
+ let preSpan = 0;
581
+ for (let offset = 0, i = 0; i < columns.length; i++) {
582
+ const column = columns[i];
583
+ if (column.hidden) {
584
+ continue;
585
+ } else if (offset + column.width < vpStart) {
586
+ if (column.pin === "left") {
587
+ visibleColumns.push(column);
588
+ } else if (offset + column.width + ((_a = columns[i + 1]) == null ? void 0 : _a.width) > vpStart) {
589
+ visibleColumns.push(column);
590
+ } else {
591
+ preSpan += column.width;
592
+ }
593
+ } else if (offset > vpEnd) {
594
+ visibleColumns.push(column);
595
+ break;
596
+ } else {
597
+ visibleColumns.push(column);
598
+ }
599
+ offset += column.width;
600
+ }
601
+ return [visibleColumns, preSpan];
602
+ };
603
+ var isNotHidden = (column) => column.hidden !== true;
604
+ var visibleColumnAtIndex = (columns, index) => {
605
+ if (columns.every(isNotHidden)) {
606
+ return columns[index];
607
+ } else {
608
+ return columns.filter(isNotHidden).at(index);
609
+ }
610
+ };
611
+ var { DEPTH, IS_LEAF } = metadataKeys;
612
+ var getGroupValueAndOffset = (columns, row) => {
613
+ const { [DEPTH]: depth, [IS_LEAF]: isLeaf } = row;
614
+ if (isLeaf || depth > columns.length) {
615
+ return [null, depth === null ? 0 : Math.max(0, depth - 1)];
616
+ } else if (depth === 0) {
617
+ return ["$root", 0];
618
+ } else {
619
+ const { key, valueFormatter } = columns[depth - 1];
620
+ const value = valueFormatter(row[key]);
621
+ return [value, depth - 1];
622
+ }
623
+ };
624
+ var getDefaultColumnType = (serverDataType) => {
625
+ switch (serverDataType) {
626
+ case "int":
627
+ case "long":
628
+ case "double":
629
+ return "number";
630
+ case "boolean":
631
+ return "boolean";
632
+ default:
633
+ return "string";
634
+ }
635
+ };
636
+ var updateColumnFormatting = (column, formatting) => {
637
+ const { serverDataType, type = getDefaultColumnType(serverDataType) } = column;
638
+ if (isTypeDescriptor(type)) {
639
+ return { ...column, type: { ...type, formatting } };
640
+ } else {
641
+ return { ...column, type: { name: type, formatting } };
642
+ }
643
+ };
644
+ function updateColumnType(column, type) {
645
+ return isTypeDescriptor(column.type) ? { ...column, type: { ...column.type, name: type } } : { ...column, type };
646
+ }
647
+ var updateColumnRenderProps = (column, renderer) => {
648
+ const { serverDataType, type = getDefaultColumnType(serverDataType) } = column;
649
+ if (isTypeDescriptor(type)) {
650
+ return {
651
+ ...column,
652
+ type: {
653
+ ...type,
654
+ // TODO do we need to preserve any existing attributes from renderer ?
655
+ renderer
656
+ }
657
+ };
658
+ } else {
659
+ return { ...column, type: { name: type, renderer } };
660
+ }
661
+ };
662
+ var NO_TYPE_SETTINGS = {};
663
+ var getTypeFormattingFromColumn = (column) => {
664
+ var _a;
665
+ if (isTypeDescriptor(column.type)) {
666
+ return (_a = column.type.formatting) != null ? _a : NO_TYPE_SETTINGS;
667
+ } else {
668
+ return NO_TYPE_SETTINGS;
669
+ }
670
+ };
671
+ var subscribedOnly = (columnNames) => (column) => columnNames == null ? void 0 : columnNames.includes(column.name);
672
+ var addColumnToSubscribedColumns = (subscribedColumns, availableColumns, columnName) => {
673
+ const byColName = (n = columnName) => (column) => column.name === n;
674
+ if (subscribedColumns.findIndex(byColName()) !== -1) {
675
+ throw Error(
676
+ `column-utils, addColumnToSubscribedColumns column ${columnName} is already subscribed`
677
+ );
678
+ }
679
+ const indexOfAvailableColumn = availableColumns.findIndex(byColName());
680
+ if (indexOfAvailableColumn === -1) {
681
+ throw Error(
682
+ `column-utils, addColumnToSubscribedColumns column ${columnName} is not available`
683
+ );
684
+ }
685
+ const newColumn = {
686
+ ...availableColumns[indexOfAvailableColumn]
687
+ };
688
+ let index = -1;
689
+ for (let i = indexOfAvailableColumn - 1; i >= 0; i--) {
690
+ const { name } = availableColumns[i];
691
+ index = subscribedColumns.findIndex(byColName(name));
692
+ if (index !== -1) {
693
+ break;
694
+ }
695
+ }
696
+ if (index === -1) {
697
+ return [newColumn].concat(subscribedColumns);
698
+ } else {
699
+ const results = [];
700
+ for (let i = 0; i < subscribedColumns.length; i++) {
701
+ results.push(subscribedColumns[i]);
702
+ if (i === index) {
703
+ results.push(newColumn);
704
+ index = Number.MAX_SAFE_INTEGER;
705
+ }
706
+ }
707
+ return results;
708
+ }
709
+ };
710
+ var CalculatedColumnPattern = /.*:.*:.*/;
711
+ var isCalculatedColumn = (columnName) => columnName !== void 0 && CalculatedColumnPattern.test(columnName);
712
+ var getCalculatedColumnDetails = (column) => {
713
+ if (isCalculatedColumn(column.name)) {
714
+ return column.name.split(/:=?/);
715
+ } else {
716
+ throw Error(
717
+ `column-utils, getCalculatedColumnDetails column name ${column.name} is not valid calculated column`
718
+ );
719
+ }
720
+ };
721
+ var getCalculatedColumnName = (column) => getCalculatedColumnDetails(column)[0];
722
+ var getCalculatedColumnType = (column) => getCalculatedColumnDetails(column)[1];
723
+ var getCalculatedColumnExpression = (column) => getCalculatedColumnDetails(column)[2];
724
+ var setCalculatedColumnName = (column, name) => {
725
+ const [, type, expression] = column.name.split(":");
726
+ return {
727
+ ...column,
728
+ name: `${name}:${type}:${expression}`
729
+ };
730
+ };
731
+ var setCalculatedColumnType = (column, type) => {
732
+ const [name, , expression] = column.name.split(":");
733
+ return {
734
+ ...column,
735
+ name: `${name}:${type}:${expression}`
736
+ };
737
+ };
738
+ var setCalculatedColumnExpression = (column, expression) => {
739
+ const [name, type] = column.name.split(":");
740
+ return {
741
+ ...column,
742
+ name: `${name}:${type}:=${expression}`
743
+ };
744
+ };
745
+ var moveColumnTo = (columns, column, newIndex) => {
746
+ const index = columns.findIndex((col) => col.name === column.name);
747
+ return moveItem(columns, index, newIndex);
748
+ };
749
+ function replaceColumn(columns, column) {
750
+ return columns.map((col) => col.name === column.name ? column : col);
751
+ }
752
+ var applyDefaultColumnConfig = ({ columns, table }, getDefaultColumnConfig) => {
753
+ if (typeof getDefaultColumnConfig === "function") {
754
+ return columns.map((column) => {
755
+ const config = getDefaultColumnConfig(table.table, column.name);
756
+ if (config) {
757
+ return {
758
+ ...column,
759
+ ...config
760
+ };
761
+ } else {
762
+ return column;
763
+ }
764
+ });
765
+ } else {
766
+ return columns;
767
+ }
768
+ };
769
+ var getColumnByName = (schema, name) => {
770
+ if (name === void 0) {
771
+ return void 0;
772
+ } else {
773
+ const column = schema.columns.find((col) => col.name === name);
774
+ if (column) {
775
+ return column;
776
+ } else {
777
+ throw Error(
778
+ `getColumnByName no column '${name}' in schema for ${schema.table.table}`
779
+ );
780
+ }
781
+ }
782
+ };
783
+
784
+ // src/cookie-utils.ts
785
+ var getCookieValue = (name) => {
786
+ var _a, _b;
787
+ if (((_a = globalThis.document) == null ? void 0 : _a.cookie) !== void 0) {
788
+ return (_b = globalThis.document.cookie.split("; ").find((row) => row.startsWith(`${name}=`))) == null ? void 0 : _b.split("=")[1];
789
+ }
790
+ };
791
+
792
+ // src/component-registry.ts
793
+ var cellRenderersMap = /* @__PURE__ */ new Map();
794
+ var columnHeaderRenderersMap = /* @__PURE__ */ new Map();
795
+ var configEditorsMap = /* @__PURE__ */ new Map();
796
+ var cellConfigPanelsMap = /* @__PURE__ */ new Map();
797
+ var editRuleValidatorsMap = /* @__PURE__ */ new Map();
798
+ var optionsMap = /* @__PURE__ */ new Map();
799
+ var isTypeCompatible = (rendererType, serverDataType) => {
800
+ if (rendererType === void 0 || rendererType === "private") {
801
+ return true;
802
+ } else if (Array.isArray(rendererType)) {
803
+ return rendererType.includes(serverDataType);
804
+ } else {
805
+ return rendererType === serverDataType;
806
+ }
807
+ };
808
+ var isCellRenderer = (type, component) => type === "cell-renderer";
809
+ var isColumnHeaderContentRenderer = (type, component) => type === "column-header-content-renderer";
810
+ var isColumnHeaderLabelRenderer = (type, component) => type === "column-header-label-renderer";
811
+ var isCellConfigPanel = (type, component) => type === "cell-config-panel";
812
+ var isEditRuleValidator = (type, component) => type === "data-edit-validator";
813
+ function registerComponent(componentName, component, type = "cell-renderer", options) {
814
+ if (isCellRenderer(type, component)) {
815
+ cellRenderersMap.set(componentName, component);
816
+ } else if (isColumnHeaderContentRenderer(type, component)) {
817
+ columnHeaderRenderersMap.set(componentName, component);
818
+ } else if (isColumnHeaderLabelRenderer(type, component)) {
819
+ columnHeaderRenderersMap.set(componentName, component);
820
+ } else if (isCellConfigPanel(type, component)) {
821
+ cellConfigPanelsMap.set(componentName, component);
822
+ } else if (isEditRuleValidator(type, component)) {
823
+ editRuleValidatorsMap.set(componentName, component);
824
+ }
825
+ if (options) {
826
+ optionsMap.set(componentName, options);
827
+ }
828
+ }
829
+ var registerConfigurationEditor = (componentName, configurationEditor) => {
830
+ configEditorsMap.set(componentName, configurationEditor);
831
+ };
832
+ var getRegisteredCellRenderers = (serverDataType) => {
833
+ const rendererNames = Array.from(cellRenderersMap.keys());
834
+ const allRenderers = rendererNames.map((name) => ({
835
+ name,
836
+ ...optionsMap.get(name)
837
+ }));
838
+ if (serverDataType) {
839
+ return allRenderers.filter(
840
+ (renderer) => isTypeCompatible(renderer.serverDataType, serverDataType)
841
+ );
842
+ } else {
843
+ return allRenderers;
844
+ }
845
+ };
846
+ var getCellRendererOptions = (renderName) => optionsMap.get(renderName);
847
+ function getCellRenderer(column) {
848
+ return dataCellRenderer(column);
849
+ }
850
+ function getColumnHeaderContentRenderer(column) {
851
+ if (column.colHeaderContentRenderer) {
852
+ return columnHeaderRenderersMap.get(column.colHeaderContentRenderer);
853
+ }
854
+ }
855
+ function getColumnHeaderLabelRenderer(column) {
856
+ if (column.colHeaderLabelRenderer) {
857
+ return columnHeaderRenderersMap.get(column.colHeaderLabelRenderer);
858
+ }
859
+ }
860
+ function dataCellRenderer(column) {
861
+ if (isTypeDescriptor(column.type)) {
862
+ const { renderer } = column.type;
863
+ if (isColumnTypeRenderer(renderer)) {
864
+ return cellRenderersMap.get(renderer.name);
865
+ }
866
+ } else if (column.serverDataType === "boolean") {
867
+ return cellRenderersMap.get("checkbox-cell");
868
+ } else if (column.editable) {
869
+ return cellRenderersMap.get("input-cell");
870
+ }
871
+ }
872
+ function getConfigurationEditor(configEditor = "") {
873
+ return configEditorsMap.get(configEditor);
874
+ }
875
+ function getCellConfigPanelRenderer(name) {
876
+ return cellConfigPanelsMap.get(name);
877
+ }
878
+ function getEditRuleValidator(name) {
879
+ return editRuleValidatorsMap.get(name);
880
+ }
881
+
882
+ // src/range-utils.ts
883
+ var NULL_RANGE = { from: 0, to: 0 };
884
+ function getFullRange({ from, to }, bufferSize = 0, rowCount = Number.MAX_SAFE_INTEGER) {
885
+ if (bufferSize === 0) {
886
+ if (rowCount < from) {
887
+ return { from: 0, to: 0 };
888
+ } else {
889
+ return { from, to: Math.min(to, rowCount) };
890
+ }
891
+ } else if (from === 0) {
892
+ return { from, to: Math.min(to + bufferSize, rowCount) };
893
+ } else {
894
+ const rangeSize = to - from;
895
+ const buff = Math.round(bufferSize / 2);
896
+ const shortfallBefore = from - buff < 0;
897
+ const shortFallAfter = rowCount - (to + buff) < 0;
898
+ if (shortfallBefore && shortFallAfter) {
899
+ return { from: 0, to: rowCount };
900
+ } else if (shortfallBefore) {
901
+ return { from: 0, to: rangeSize + bufferSize };
902
+ } else if (shortFallAfter) {
903
+ return {
904
+ from: Math.max(0, rowCount - (rangeSize + bufferSize)),
905
+ to: rowCount
906
+ };
907
+ } else {
908
+ return { from: from - buff, to: to + buff };
909
+ }
910
+ }
911
+ }
912
+ function resetRange({ from, to, bufferSize = 0 }) {
913
+ return {
914
+ from: 0,
915
+ to: to - from,
916
+ bufferSize,
917
+ reset: true
918
+ };
919
+ }
920
+ var withinRange = (value, { from, to }) => value >= from && value < to;
921
+ var rangeNewItems = ({ from: from1, to: to1 }, newRange) => {
922
+ const { from: from2, to: to2 } = newRange;
923
+ const noOverlap = from2 >= to1 || to2 <= from1;
924
+ const newFullySubsumesOld = from2 < from1 && to2 > to1;
925
+ return noOverlap || newFullySubsumesOld ? newRange : to2 > to1 ? { from: to1, to: to2 } : { from: from2, to: from1 };
926
+ };
927
+ var WindowRange = class _WindowRange {
928
+ constructor(from, to) {
929
+ this.from = from;
930
+ this.to = to;
931
+ }
932
+ isWithin(index) {
933
+ return withinRange(index, this);
934
+ }
935
+ //find the overlap of this range and a new one
936
+ overlap(from, to) {
937
+ return from >= this.to || to < this.from ? [0, 0] : [Math.max(from, this.from), Math.min(to, this.to)];
938
+ }
939
+ copy() {
940
+ return new _WindowRange(this.from, this.to);
941
+ }
942
+ };
943
+
944
+ // src/DataWindow.ts
945
+ var { KEY } = metadataKeys;
946
+ var DataWindow = class {
947
+ constructor({ from, to }) {
948
+ this.rowCount = 0;
949
+ this.setRowCount = (rowCount) => {
950
+ if (rowCount < this.data.length) {
951
+ this.data.length = rowCount;
952
+ }
953
+ this.rowCount = rowCount;
954
+ };
955
+ this.range = new WindowRange(from, to);
956
+ this.data = new Array(to - from);
957
+ }
958
+ // return true if existing row was updated
959
+ add(data) {
960
+ const [index] = data;
961
+ if (this.isWithinRange(index)) {
962
+ const internalIndex = index - this.range.from;
963
+ const isUpdate = this.data[internalIndex] !== void 0;
964
+ this.data[internalIndex] = data;
965
+ return isUpdate;
966
+ } else {
967
+ return false;
968
+ }
969
+ }
970
+ getAtIndex(index) {
971
+ return this.range.isWithin(index) && this.data[index - this.range.from] != null ? this.data[index - this.range.from] : void 0;
972
+ }
973
+ getByKey(key) {
974
+ return this.data.find((row) => row[KEY] === key);
975
+ }
976
+ isWithinRange(index) {
977
+ return this.range.isWithin(index) && index <= this.rowCount;
978
+ }
979
+ setRange(from, to) {
980
+ if (from !== this.range.from || to !== this.range.to) {
981
+ const [overlapFrom, overlapTo] = this.range.overlap(from, to);
982
+ const newData = new Array(to - from);
983
+ for (let i = overlapFrom; i < overlapTo; i++) {
984
+ const data = this.getAtIndex(i);
985
+ if (data) {
986
+ const index = i - from;
987
+ newData[index] = data;
988
+ }
989
+ }
990
+ this.data = newData;
991
+ this.range.from = from;
992
+ this.range.to = to;
993
+ }
994
+ }
995
+ hasData(from, to) {
996
+ const offset = this.range.from;
997
+ const start = from - offset;
998
+ const end = Math.min(to - offset - 1, this.rowCount - 1);
999
+ return this.data[start] !== void 0 && this.data[end] !== void 0;
1000
+ }
1001
+ getData(from, to) {
1002
+ var _a;
1003
+ const { from: clientFrom, to: clientTo } = this.range;
1004
+ const startOffset = Math.max(0, from - clientFrom);
1005
+ const endOffset = Math.min(to - clientFrom, (_a = this.rowCount) != null ? _a : to);
1006
+ return this.data.slice(startOffset, endOffset);
1007
+ }
1008
+ };
1009
+
1010
+ // src/common-types.ts
1011
+ var MEASURES = {
1012
+ horizontal: {
1013
+ positionProp: "left",
1014
+ sizeProp: "width"
1015
+ },
1016
+ vertical: {
1017
+ positionProp: "top",
1018
+ sizeProp: "height"
1019
+ }
1020
+ };
1021
+
1022
+ // src/data-utils.ts
1023
+ var UP1 = "up1";
1024
+ var UP2 = "up2";
1025
+ var DOWN1 = "down1";
1026
+ var DOWN2 = "down2";
1027
+ var isValidNumber = (n) => typeof n === "number" && isFinite(n);
1028
+ var EMPTY = {};
1029
+ var shallowEquals = (o1 = EMPTY, o2 = EMPTY) => {
1030
+ const props1 = Object.keys(o1);
1031
+ const props2 = Object.keys(o2);
1032
+ return props1.length === props2.length && props1.every((key) => o1[key] === o2[key]);
1033
+ };
1034
+ function getMovingValueDirection(newValue, direction, prevValue, decimalPlaces) {
1035
+ if (newValue === void 0) {
1036
+ return "";
1037
+ }
1038
+ if (!isFinite(newValue) || prevValue === void 0 || direction === void 0) {
1039
+ return "";
1040
+ } else {
1041
+ let diff = newValue - prevValue;
1042
+ if (diff) {
1043
+ if (typeof decimalPlaces === "number") {
1044
+ diff = +newValue.toFixed(decimalPlaces) - +prevValue.toFixed(decimalPlaces);
1045
+ }
1046
+ }
1047
+ if (diff) {
1048
+ if (direction === "") {
1049
+ if (diff < 0) {
1050
+ return DOWN1;
1051
+ } else {
1052
+ return UP1;
1053
+ }
1054
+ } else if (diff > 0) {
1055
+ if (direction === DOWN1 || direction === DOWN2 || direction === UP2) {
1056
+ return UP1;
1057
+ } else {
1058
+ return UP2;
1059
+ }
1060
+ } else if (direction === UP1 || direction === UP2 || direction === DOWN2) {
1061
+ return DOWN1;
1062
+ } else {
1063
+ return DOWN2;
1064
+ }
1065
+ } else {
1066
+ return "";
1067
+ }
1068
+ }
1069
+ }
1070
+
1071
+ // src/datasource-action-utils.ts
1072
+ var isVisualLinksAction = (action) => action.type === "vuu-links";
1073
+ var isVisualLinkCreatedAction = (action) => action.type === "vuu-link-created";
1074
+ var isVisualLinkRemovedAction = (action) => action.type === "vuu-link-removed";
1075
+ var isViewportMenusAction = (action) => action.type === "vuu-menu";
1076
+ var isVuuFeatureAction = (action) => isViewportMenusAction(action) || isVisualLinksAction(action);
1077
+
1078
+ // src/datasource-utils.ts
1079
+ var NoFilter = { filter: "" };
1080
+ var NoSort = { sortDefs: [] };
1081
+ var vanillaConfig = {
1082
+ aggregations: [],
1083
+ columns: [],
1084
+ filter: NoFilter,
1085
+ groupBy: [],
1086
+ sort: NoSort
1087
+ };
1088
+ var equivalentAggregations = ({ aggregations: agg1 }, { aggregations: agg2 }) => agg1 === void 0 && (agg2 == null ? void 0 : agg2.length) === 0 || agg2 === void 0 && (agg1 == null ? void 0 : agg1.length) === 0;
1089
+ var equivalentColumns = ({ columns: cols1 }, { columns: cols2 }) => cols1 === void 0 && (cols2 == null ? void 0 : cols2.length) === 0 || cols2 === void 0 && (cols1 == null ? void 0 : cols1.length) === 0;
1090
+ var equivalentFilter = ({ filter: f1 }, { filter: f2 }) => f1 === void 0 && (f2 == null ? void 0 : f2.filter) === "" || f2 === void 0 && (f1 == null ? void 0 : f1.filter) === "";
1091
+ var equivalentGroupBy = ({ groupBy: val1 }, { groupBy: val2 }) => val1 === void 0 && (val2 == null ? void 0 : val2.length) === 0 || val2 === void 0 && (val1 == null ? void 0 : val1.length) === 0;
1092
+ var equivalentSort = ({ sort: s1 }, { sort: s2 }) => s1 === void 0 && (s2 == null ? void 0 : s2.sortDefs.length) === 0 || s2 === void 0 && (s1 == null ? void 0 : s1.sortDefs.length) === 0;
1093
+ var exactlyTheSame = (a, b) => {
1094
+ if (a === b) {
1095
+ return true;
1096
+ } else if (a === void 0 && b === void 0) {
1097
+ return true;
1098
+ } else {
1099
+ return false;
1100
+ }
1101
+ };
1102
+ var aggregationsChanged = (config, newConfig) => {
1103
+ const { aggregations: agg1 } = config;
1104
+ const { aggregations: agg2 } = newConfig;
1105
+ if (exactlyTheSame(agg1, agg2) || equivalentAggregations(config, newConfig)) {
1106
+ return false;
1107
+ } else if (agg1 === void 0 || agg2 === void 0) {
1108
+ return true;
1109
+ } else if (agg1.length !== agg2.length) {
1110
+ return true;
1111
+ }
1112
+ return agg1.some(
1113
+ ({ column, aggType }, i) => column !== agg2[i].column || aggType !== agg2[i].aggType
1114
+ );
1115
+ };
1116
+ var columnsChanged = (config, newConfig) => {
1117
+ const { columns: cols1 } = config;
1118
+ const { columns: cols2 } = newConfig;
1119
+ if (exactlyTheSame(cols1, cols2) || equivalentColumns(config, newConfig)) {
1120
+ return false;
1121
+ } else if (cols1 === void 0 || cols2 === void 0) {
1122
+ return true;
1123
+ } else if ((cols1 == null ? void 0 : cols1.length) !== (cols2 == null ? void 0 : cols2.length)) {
1124
+ return true;
1125
+ }
1126
+ return cols1.some((column, i) => column !== (cols2 == null ? void 0 : cols2[i]));
1127
+ };
1128
+ var filterChanged = (c1, c2) => {
1129
+ var _a, _b;
1130
+ if (equivalentFilter(c1, c2)) {
1131
+ return false;
1132
+ } else {
1133
+ return ((_a = c1.filter) == null ? void 0 : _a.filter) !== ((_b = c2.filter) == null ? void 0 : _b.filter);
1134
+ }
1135
+ };
1136
+ var groupByChanged = (config, newConfig) => {
1137
+ const { groupBy: g1 } = config;
1138
+ const { groupBy: g2 } = newConfig;
1139
+ if (exactlyTheSame(g1, g2) || equivalentGroupBy(config, newConfig)) {
1140
+ return false;
1141
+ } else if (g1 === void 0 || g2 === void 0) {
1142
+ return true;
1143
+ } else if ((g1 == null ? void 0 : g1.length) !== (g2 == null ? void 0 : g2.length)) {
1144
+ return true;
1145
+ }
1146
+ return g1.some((column, i) => column !== (g2 == null ? void 0 : g2[i]));
1147
+ };
1148
+ var sortChanged = (config, newConfig) => {
1149
+ const { sort: s1 } = config;
1150
+ const { sort: s2 } = newConfig;
1151
+ if (exactlyTheSame(s1, s2) || equivalentSort(config, newConfig)) {
1152
+ return false;
1153
+ } else if (s1 === void 0 || s2 === void 0) {
1154
+ return true;
1155
+ } else if ((s1 == null ? void 0 : s1.sortDefs.length) !== (s2 == null ? void 0 : s2.sortDefs.length)) {
1156
+ return true;
1157
+ }
1158
+ return s1.sortDefs.some(
1159
+ ({ column, sortType }, i) => column !== s2.sortDefs[i].column || sortType !== s2.sortDefs[i].sortType
1160
+ );
1161
+ };
1162
+ var visualLinkChanged = () => {
1163
+ return false;
1164
+ };
1165
+ var configChanged = (config, newConfig) => {
1166
+ if (exactlyTheSame(config, newConfig)) {
1167
+ return false;
1168
+ }
1169
+ if (config === void 0 || newConfig === void 0) {
1170
+ return true;
1171
+ }
1172
+ return aggregationsChanged(config, newConfig) || columnsChanged(config, newConfig) || filterChanged(config, newConfig) || groupByChanged(config, newConfig) || sortChanged(config, newConfig) || visualLinkChanged(config, newConfig);
1173
+ };
1174
+ var hasGroupBy = (config) => config !== void 0 && config.groupBy !== void 0 && config.groupBy.length > 0;
1175
+ var hasFilter = (config) => (config == null ? void 0 : config.filter) !== void 0 && config.filter.filter.length > 0;
1176
+ var hasSort = (config) => {
1177
+ var _a;
1178
+ return (config == null ? void 0 : config.sort) !== void 0 && Array.isArray((_a = config.sort) == null ? void 0 : _a.sortDefs) && config.sort.sortDefs.length > 0;
1179
+ };
1180
+ var isTypeaheadSuggestionProvider = (source) => typeof source["getTypeaheadSuggestions"] === "function";
1181
+ var isTableSchema = (message) => message.type === "TABLE_META_RESP";
1182
+ var isConnectionStatusMessage = (msg) => msg.type === "connection-status";
1183
+ var isConnectionQualityMetrics = (msg) => msg.type === "connection-metrics";
1184
+ var messageHasResult = (msg) => typeof msg.result !== "undefined";
1185
+ var isErrorResponse = (response) => response !== void 0 && "error" in response;
1186
+ var hasAction = (response) => response != void 0 && "action" in response;
1187
+ var isViewporttMessage = (msg) => "viewport" in msg;
1188
+ var withConfigDefaults = (config) => {
1189
+ if (config.aggregations && config.columns && config.filter && config.groupBy && config.sort) {
1190
+ return config;
1191
+ } else {
1192
+ const {
1193
+ aggregations = [],
1194
+ columns = [],
1195
+ filter = { filter: "" },
1196
+ groupBy = [],
1197
+ sort = { sortDefs: [] },
1198
+ visualLink
1199
+ } = config;
1200
+ return {
1201
+ aggregations,
1202
+ columns,
1203
+ filter,
1204
+ groupBy,
1205
+ sort,
1206
+ visualLink
1207
+ };
1208
+ }
1209
+ };
1210
+
1211
+ // src/ts-utils.ts
1212
+ function isNotNullOrUndefined(value) {
1213
+ return value !== void 0 && value !== null;
1214
+ }
1215
+
1216
+ // src/date/formatter.ts
1217
+ var baseTimeFormatOptions = {
1218
+ hour: "2-digit",
1219
+ minute: "2-digit",
1220
+ second: "2-digit"
1221
+ };
1222
+ var formatConfigByTimePatterns = {
1223
+ "hh:mm:ss": {
1224
+ locale: "en-GB",
1225
+ options: { ...baseTimeFormatOptions, hour12: false }
1226
+ },
1227
+ "hh:mm:ss a": {
1228
+ locale: "en-GB",
1229
+ options: { ...baseTimeFormatOptions, hour12: true }
1230
+ }
1231
+ };
1232
+ var baseDateFormatOptions = {
1233
+ day: "2-digit",
1234
+ month: "2-digit",
1235
+ year: "numeric"
1236
+ };
1237
+ var formatConfigByDatePatterns = {
1238
+ "dd.mm.yyyy": {
1239
+ locale: "de-De",
1240
+ options: { ...baseDateFormatOptions }
1241
+ },
1242
+ "dd/mm/yyyy": { locale: "en-GB", options: { ...baseDateFormatOptions } },
1243
+ "dd MMM yyyy": {
1244
+ locale: "en-GB",
1245
+ options: { ...baseDateFormatOptions, month: "short" }
1246
+ },
1247
+ "dd MMMM yyyy": {
1248
+ locale: "en-GB",
1249
+ options: { ...baseDateFormatOptions, month: "long" }
1250
+ },
1251
+ "mm/dd/yyyy": { locale: "en-US", options: { ...baseDateFormatOptions } },
1252
+ "MMM dd, yyyy": {
1253
+ locale: "en-US",
1254
+ options: { ...baseDateFormatOptions, month: "short" }
1255
+ },
1256
+ "MMMM dd, yyyy": {
1257
+ locale: "en-US",
1258
+ options: { ...baseDateFormatOptions, month: "long" }
1259
+ }
1260
+ };
1261
+ function getFormatConfigs(pattern) {
1262
+ return [
1263
+ pattern.date ? formatConfigByDatePatterns[pattern.date] : null,
1264
+ pattern.time ? formatConfigByTimePatterns[pattern.time] : null
1265
+ ];
1266
+ }
1267
+ function formatDate(pattern) {
1268
+ const dateTimeFormats = getFormatConfigs(pattern).filter(isNotNullOrUndefined).map((c) => Intl.DateTimeFormat(c.locale, c.options));
1269
+ return (d) => dateTimeFormats.map((dtf) => dtf.format(d)).join(" ");
1270
+ }
1271
+
1272
+ // src/date/types.ts
1273
+ var supportedDatePatterns = [
1274
+ "dd.mm.yyyy",
1275
+ "dd/mm/yyyy",
1276
+ "dd MMM yyyy",
1277
+ "dd MMMM yyyy",
1278
+ "mm/dd/yyyy",
1279
+ "MMM dd, yyyy",
1280
+ "MMMM dd, yyyy"
1281
+ ];
1282
+ var supportedTimePatterns = ["hh:mm:ss", "hh:mm:ss a"];
1283
+ var supportedDateTimePatterns = {
1284
+ date: supportedDatePatterns,
1285
+ time: supportedTimePatterns
1286
+ };
1287
+ var isDatePattern = (pattern) => supportedDatePatterns.includes(pattern);
1288
+ var isTimePattern = (pattern) => supportedTimePatterns.includes(pattern);
1289
+ var isDateTimePattern = (pattern) => isDatePattern(pattern == null ? void 0 : pattern.date) || isTimePattern(pattern == null ? void 0 : pattern.time);
1290
+
1291
+ // src/date/helpers.ts
1292
+ var defaultPatternsByType = {
1293
+ time: "hh:mm:ss",
1294
+ date: "dd.mm.yyyy"
1295
+ };
1296
+ var fallbackDateTimePattern = {
1297
+ date: defaultPatternsByType["date"]
1298
+ };
1299
+ function dateTimePattern(type) {
1300
+ if (isTypeDescriptor(type)) {
1301
+ if (type.formatting && isDateTimePattern(type.formatting.pattern)) {
1302
+ return type.formatting.pattern;
1303
+ }
1304
+ }
1305
+ return fallbackDateTimePattern;
1306
+ }
1307
+
1308
+ // src/logging-utils.ts
1309
+ var logLevels = ["error", "warn", "info", "debug"];
1310
+ var isValidLogLevel = (value) => typeof value === "string" && logLevels.includes(value);
1311
+ var DEFAULT_LOG_LEVEL = "error";
1312
+ var NO_OP = () => void 0;
1313
+ var DEFAULT_DEBUG_LEVEL = false ? "error" : "info";
1314
+ var { loggingLevel = DEFAULT_DEBUG_LEVEL } = getLoggingSettings();
1315
+ var logger = (category) => {
1316
+ const debugEnabled2 = loggingLevel === "debug";
1317
+ const infoEnabled = debugEnabled2 || loggingLevel === "info";
1318
+ const warnEnabled = infoEnabled || loggingLevel === "warn";
1319
+ const errorEnabled = warnEnabled || loggingLevel === "error";
1320
+ const info = infoEnabled ? (message) => console.info(`[${category}] ${message}`) : NO_OP;
1321
+ const warn = warnEnabled ? (message) => console.warn(`[${category}] ${message}`) : NO_OP;
1322
+ const debug2 = debugEnabled2 ? (message) => console.debug(`[${category}] ${message}`) : NO_OP;
1323
+ const error = errorEnabled ? (message) => console.error(`[${category}] ${message}`) : NO_OP;
1324
+ if (false) {
1325
+ return {
1326
+ errorEnabled,
1327
+ error
1328
+ };
1329
+ } else {
1330
+ return {
1331
+ debugEnabled: debugEnabled2,
1332
+ infoEnabled,
1333
+ warnEnabled,
1334
+ errorEnabled,
1335
+ info,
1336
+ warn,
1337
+ debug: debug2,
1338
+ error
1339
+ };
1340
+ }
1341
+ };
1342
+ function getLoggingSettings() {
1343
+ if (typeof loggingSettings !== "undefined") {
1344
+ return loggingSettings;
1345
+ } else {
1346
+ return {
1347
+ loggingLevel: getLoggingLevelFromCookie()
1348
+ };
1349
+ }
1350
+ }
1351
+ function getLoggingLevelFromCookie() {
1352
+ const value = getCookieValue("vuu-logging-level");
1353
+ if (isValidLogLevel(value)) {
1354
+ return value;
1355
+ } else {
1356
+ return DEFAULT_LOG_LEVEL;
1357
+ }
1358
+ }
1359
+ var getLoggingConfigForWorker = () => {
1360
+ return `const loggingSettings = { loggingLevel: "${getLoggingLevelFromCookie()}"};`;
1361
+ };
1362
+
1363
+ // src/debug-utils.ts
1364
+ var { debug, debugEnabled } = logger("range-monitor");
1365
+ var RangeMonitor = class {
1366
+ constructor(source) {
1367
+ this.source = source;
1368
+ this.range = { from: 0, to: 0 };
1369
+ this.timestamp = 0;
1370
+ }
1371
+ isSet() {
1372
+ return this.timestamp !== 0;
1373
+ }
1374
+ set({ from, to }) {
1375
+ const { timestamp } = this;
1376
+ this.range.from = from;
1377
+ this.range.to = to;
1378
+ this.timestamp = performance.now();
1379
+ if (timestamp) {
1380
+ debugEnabled && debug(
1381
+ `<${this.source}> [${from}-${to}], ${(this.timestamp - timestamp).toFixed(0)} ms elapsed`
1382
+ );
1383
+ } else {
1384
+ return 0;
1385
+ }
1386
+ }
1387
+ };
1388
+
1389
+ // src/html-utils.ts
1390
+ var createEl = (elementType, className, textContent) => {
1391
+ const el = document.createElement(elementType);
1392
+ if (className) {
1393
+ el.className = className;
1394
+ }
1395
+ if (textContent) {
1396
+ el.textContent = textContent;
1397
+ }
1398
+ return el;
1399
+ };
1400
+ var getFocusableElement = (el, tabIndex) => {
1401
+ if (el) {
1402
+ if (el.hasAttribute("tabindex")) {
1403
+ const rootTabIndex = parseInt(el.getAttribute("tabindex"));
1404
+ if (!isNaN(rootTabIndex) && (tabIndex === void 0 || rootTabIndex === tabIndex)) {
1405
+ return el;
1406
+ }
1407
+ }
1408
+ const focusableEl = typeof tabIndex === "number" ? el.querySelector(`[tabindex="${tabIndex}"]`) : el.querySelector("[tabindex]");
1409
+ if (focusableEl) {
1410
+ return focusableEl;
1411
+ }
1412
+ }
1413
+ };
1414
+ var getElementDataIndex = (el) => {
1415
+ if (el) {
1416
+ const index = parseInt(el.dataset.index || "");
1417
+ if (!isNaN(index)) {
1418
+ return index;
1419
+ }
1420
+ }
1421
+ return -1;
1422
+ };
1423
+ var getClosest = (el, dataProperty) => el.closest(`[data-${dataProperty}]`);
1424
+ var getClosestIndexItem = (el) => getClosest(el, "index");
1425
+ function getElementByDataIndex(container, index, throwIfNotFound = false) {
1426
+ if (container === null && throwIfNotFound) {
1427
+ throw Error("html-utils getElementByDataIndex, container is null");
1428
+ }
1429
+ const element = container == null ? void 0 : container.querySelector(
1430
+ `[data-index="${index}"]`
1431
+ );
1432
+ if (element) {
1433
+ return element;
1434
+ } else if (throwIfNotFound) {
1435
+ throw Error(
1436
+ "html-utils getElementByDataIndex, Item not found with data-index='${index}'"
1437
+ );
1438
+ } else {
1439
+ return void 0;
1440
+ }
1441
+ }
1442
+ var focusFirstFocusableElement = (el, tabIndex) => {
1443
+ requestAnimationFrame(() => {
1444
+ const focusableElement = getFocusableElement(el, tabIndex);
1445
+ if (focusableElement) {
1446
+ focusableElement.focus();
1447
+ }
1448
+ });
1449
+ };
1450
+ var isSelectableElement = (el) => {
1451
+ const item = el == null ? void 0 : el.closest("[data-index]");
1452
+ if (!item || item.ariaDisabled || item.dataset.selectable === "false" || item.querySelector('[data-selectable="false"],[aria-disabled="true"]')) {
1453
+ return false;
1454
+ } else {
1455
+ return true;
1456
+ }
1457
+ };
1458
+ var size;
1459
+ function getScrollbarSize() {
1460
+ if (size === void 0) {
1461
+ let outer = document.createElement("div");
1462
+ outer.className = "scrollable-content";
1463
+ outer.style.width = "50px";
1464
+ outer.style.height = "50px";
1465
+ outer.style.overflowY = "scroll";
1466
+ outer.style.position = "absolute";
1467
+ outer.style.top = "-200px";
1468
+ outer.style.left = "-200px";
1469
+ const inner = document.createElement("div");
1470
+ inner.style.height = "100px";
1471
+ inner.style.width = "100%";
1472
+ outer.appendChild(inner);
1473
+ document.body.appendChild(outer);
1474
+ const outerWidth = outer.offsetWidth;
1475
+ const innerWidth = inner.offsetWidth;
1476
+ document.body.removeChild(outer);
1477
+ size = outerWidth - innerWidth;
1478
+ outer = null;
1479
+ }
1480
+ return size;
1481
+ }
1482
+ var dispatchMouseEvent = (el, type) => {
1483
+ const evt = new MouseEvent(type, {
1484
+ view: window,
1485
+ bubbles: true,
1486
+ cancelable: true
1487
+ });
1488
+ el.dispatchEvent(evt);
1489
+ };
1490
+ var dispatchCustomEvent = (el, type) => {
1491
+ const evt = new Event(type, {
1492
+ bubbles: true,
1493
+ cancelable: true
1494
+ });
1495
+ el.dispatchEvent(evt);
1496
+ };
1497
+
1498
+ // src/event-emitter.ts
1499
+ function isArrayOfListeners(listeners) {
1500
+ return Array.isArray(listeners);
1501
+ }
1502
+ function isOnlyListener(listeners) {
1503
+ return !Array.isArray(listeners);
1504
+ }
1505
+ var _events;
1506
+ var EventEmitter = class {
1507
+ constructor() {
1508
+ __privateAdd(this, _events, /* @__PURE__ */ new Map());
1509
+ }
1510
+ addListener(event, listener) {
1511
+ const listeners = __privateGet(this, _events).get(event);
1512
+ if (!listeners) {
1513
+ __privateGet(this, _events).set(event, listener);
1514
+ } else if (isArrayOfListeners(listeners)) {
1515
+ listeners.push(listener);
1516
+ } else if (isOnlyListener(listeners)) {
1517
+ __privateGet(this, _events).set(event, [listeners, listener]);
1518
+ }
1519
+ }
1520
+ removeListener(event, listener) {
1521
+ if (!__privateGet(this, _events).has(event)) {
1522
+ return;
1523
+ }
1524
+ const listenerOrListeners = __privateGet(this, _events).get(event);
1525
+ let position = -1;
1526
+ if (listenerOrListeners === listener) {
1527
+ __privateGet(this, _events).delete(event);
1528
+ } else if (Array.isArray(listenerOrListeners)) {
1529
+ for (let i = length; i-- > 0; ) {
1530
+ if (listenerOrListeners[i] === listener) {
1531
+ position = i;
1532
+ break;
1533
+ }
1534
+ }
1535
+ if (position < 0) {
1536
+ return;
1537
+ }
1538
+ if (listenerOrListeners.length === 1) {
1539
+ listenerOrListeners.length = 0;
1540
+ __privateGet(this, _events).delete(event);
1541
+ } else {
1542
+ listenerOrListeners.splice(position, 1);
1543
+ }
1544
+ }
1545
+ }
1546
+ removeAllListeners(event) {
1547
+ if (event && __privateGet(this, _events).has(event)) {
1548
+ __privateGet(this, _events).delete(event);
1549
+ } else if (event === void 0) {
1550
+ __privateGet(this, _events).clear();
1551
+ }
1552
+ }
1553
+ emit(event, ...args) {
1554
+ if (__privateGet(this, _events)) {
1555
+ const handler = __privateGet(this, _events).get(event);
1556
+ if (handler) {
1557
+ this.invokeHandler(handler, args);
1558
+ }
1559
+ }
1560
+ }
1561
+ once(event, listener) {
1562
+ const handler = (...args) => {
1563
+ this.removeListener(event, handler);
1564
+ listener(...args);
1565
+ };
1566
+ this.on(event, handler);
1567
+ }
1568
+ on(event, listener) {
1569
+ this.addListener(event, listener);
1570
+ }
1571
+ hasListener(event, listener) {
1572
+ const listeners = __privateGet(this, _events).get(event);
1573
+ if (Array.isArray(listeners)) {
1574
+ return listeners.includes(listener);
1575
+ } else {
1576
+ return listeners === listener;
1577
+ }
1578
+ }
1579
+ invokeHandler(handler, args) {
1580
+ if (isArrayOfListeners(handler)) {
1581
+ handler.slice().forEach((listener) => this.invokeHandler(listener, args));
1582
+ } else {
1583
+ switch (args.length) {
1584
+ case 0:
1585
+ handler();
1586
+ break;
1587
+ case 1:
1588
+ handler(args[0]);
1589
+ break;
1590
+ case 2:
1591
+ handler(args[0], args[1]);
1592
+ break;
1593
+ default:
1594
+ handler.call(null, ...args);
1595
+ }
1596
+ }
1597
+ }
1598
+ };
1599
+ _events = new WeakMap();
1600
+
1601
+ // src/round-decimal.ts
1602
+ var PUNCTUATION_STR = String.fromCharCode(8200);
1603
+ var DIGIT_STR = String.fromCharCode(8199);
1604
+ var DECIMALS_AUTO = -1;
1605
+ var Space = {
1606
+ DIGIT: DIGIT_STR,
1607
+ TWO_DIGITS: DIGIT_STR + DIGIT_STR,
1608
+ THREE_DIGITS: DIGIT_STR + DIGIT_STR + DIGIT_STR,
1609
+ FULL_PADDING: [
1610
+ null,
1611
+ PUNCTUATION_STR + DIGIT_STR,
1612
+ PUNCTUATION_STR + DIGIT_STR + DIGIT_STR,
1613
+ PUNCTUATION_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR,
1614
+ PUNCTUATION_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR
1615
+ ]
1616
+ };
1617
+ var Zero = {
1618
+ DIGIT: "0",
1619
+ TWO_DIGITS: "00",
1620
+ THREE_DIGITS: "000",
1621
+ FULL_PADDING: [null, "0", "00", "000", "0000"]
1622
+ };
1623
+ function padLeft(value, maxLength = 6) {
1624
+ return (LEADING_FILL + value).slice(-maxLength);
1625
+ }
1626
+ var LEADING_FILL = DIGIT_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR;
1627
+ var Align = {
1628
+ Right: "right",
1629
+ Center: "center",
1630
+ Left: "left"
1631
+ };
1632
+ function pad(n, dp, Pad) {
1633
+ let len = n.length;
1634
+ const diff = dp - len;
1635
+ if (diff > 0) {
1636
+ if (diff === 1) {
1637
+ n = n + Pad.DIGIT;
1638
+ } else if (diff === 2) {
1639
+ n = n + Pad.TWO_DIGITS;
1640
+ } else if (diff === 3) {
1641
+ n = n + Pad.THREE_DIGITS;
1642
+ }
1643
+ } else {
1644
+ if (diff < 0) {
1645
+ n = n.slice(0, dp);
1646
+ len = dp;
1647
+ }
1648
+ if (Pad === Space && n.charAt(len - 1) === "0") {
1649
+ n = n.replace(/0+$/, "");
1650
+ return pad(n, dp, Pad);
1651
+ }
1652
+ }
1653
+ return n;
1654
+ }
1655
+ function roundDecimal(value, align = Align.Right, decimals = 4, zeroPad, alignOnDecimals) {
1656
+ if (value === void 0 || typeof value !== "number" || isNaN(value)) {
1657
+ return "";
1658
+ }
1659
+ let integral, fraction, Pad;
1660
+ const [part1, part2 = ""] = value.toString().split(".");
1661
+ const actualDecimals = part2.length;
1662
+ integral = parseFloat(part1).toLocaleString();
1663
+ if (align === Align.Left && alignOnDecimals) {
1664
+ integral = padLeft(integral);
1665
+ }
1666
+ if (decimals === DECIMALS_AUTO || actualDecimals === decimals) {
1667
+ fraction = part2;
1668
+ } else if (actualDecimals > decimals) {
1669
+ fraction = parseFloat("0." + part2).toFixed(decimals).slice(2);
1670
+ } else {
1671
+ if (Pad = zeroPad ? Zero : alignOnDecimals && align !== Align.Left ? Space : null) {
1672
+ if (actualDecimals === 0) {
1673
+ fraction = Pad.FULL_PADDING[decimals];
1674
+ } else {
1675
+ fraction = pad(part2, decimals, Pad);
1676
+ }
1677
+ } else {
1678
+ fraction = part2;
1679
+ }
1680
+ }
1681
+ return integral + (fraction ? "." + fraction : "");
1682
+ }
1683
+
1684
+ // src/formatting-utils.ts
1685
+ var DEFAULT_NUMERIC_FORMAT = {};
1686
+ var defaultValueFormatter = (value) => value == null ? "" : typeof value === "string" ? value : value.toString();
1687
+ var dateFormatter = (column) => {
1688
+ const pattern = dateTimePattern(column.type);
1689
+ const formatter = formatDate(pattern);
1690
+ return (value) => {
1691
+ if (typeof value === "number" && value !== 0) {
1692
+ return formatter(new Date(value));
1693
+ } else {
1694
+ return "";
1695
+ }
1696
+ };
1697
+ };
1698
+ var numericFormatter = ({
1699
+ align = "right",
1700
+ type
1701
+ }) => {
1702
+ var _a;
1703
+ if (type === void 0 || typeof type === "string") {
1704
+ return defaultValueFormatter;
1705
+ } else {
1706
+ const {
1707
+ alignOnDecimals = false,
1708
+ decimals,
1709
+ zeroPad = false
1710
+ } = (_a = type.formatting) != null ? _a : DEFAULT_NUMERIC_FORMAT;
1711
+ return (value) => {
1712
+ if (typeof value === "string" && (value.startsWith("\u03A3") || value.startsWith("["))) {
1713
+ return value;
1714
+ }
1715
+ const number = typeof value === "number" ? value : typeof value === "string" ? parseFloat(value) : void 0;
1716
+ return roundDecimal(number, align, decimals, zeroPad, alignOnDecimals);
1717
+ };
1718
+ }
1719
+ };
1720
+ var mapFormatter = (map) => {
1721
+ return (value) => {
1722
+ var _a;
1723
+ return (_a = map[value]) != null ? _a : "";
1724
+ };
1725
+ };
1726
+ var getValueFormatter = (column, serverDataType = column.serverDataType) => {
1727
+ if (isDateTimeColumn(column)) {
1728
+ return dateFormatter(column);
1729
+ }
1730
+ const { type } = column;
1731
+ if (isTypeDescriptor(type) && isMappedValueTypeRenderer(type == null ? void 0 : type.renderer)) {
1732
+ return mapFormatter(type.renderer.map);
1733
+ } else if (serverDataType === "string" || serverDataType === "char") {
1734
+ return (value) => value;
1735
+ } else if (serverDataType === "double") {
1736
+ return numericFormatter(column);
1737
+ }
1738
+ return defaultValueFormatter;
1739
+ };
1740
+
1741
+ // src/getUniqueId.ts
1742
+ var getUniqueId = () => `hw-${Math.round(Math.random() * 1e5)}`;
1743
+
1744
+ // src/group-utils.ts
1745
+ function addGroupColumn(groupBy, column) {
1746
+ if (groupBy) {
1747
+ return groupBy.concat(column.name);
1748
+ } else {
1749
+ return [column.name];
1750
+ }
1751
+ }
1752
+
1753
+ // src/input-utils.ts
1754
+ var isCharacterKey = (key) => key.length === 1;
1755
+ var isQuoteKey = (evt) => {
1756
+ return evt.key === '"' || evt.key === "'";
1757
+ };
1758
+
1759
+ // src/invariant.ts
1760
+ function invariant(condition, message) {
1761
+ if (!condition) {
1762
+ const error = new Error(message);
1763
+ error.name = "Invariant Violation";
1764
+ error.framesToPop = 1;
1765
+ throw error;
1766
+ }
1767
+ }
1768
+
1769
+ // src/itemToString.ts
1770
+ var isPlainObject = (obj) => Object.prototype.toString.call(obj) === "[object Object]";
1771
+ function itemToString(item) {
1772
+ if (typeof item === "string") {
1773
+ return item;
1774
+ } else if (!isPlainObject(item)) {
1775
+ return String(item);
1776
+ }
1777
+ if (Object.prototype.hasOwnProperty.call(item, "label")) {
1778
+ return String(item.label);
1779
+ }
1780
+ console.warn(
1781
+ [
1782
+ "itemToString: you've likely forgotten to set the label prop on the item object.",
1783
+ "You can also provide your own `itemToString` implementation."
1784
+ ].join("\n")
1785
+ );
1786
+ return "";
1787
+ }
1788
+
1789
+ // src/json-utils.ts
1790
+ var { COUNT } = metadataKeys;
1791
+ var isJsonData = (value) => typeof value === "object" && value !== null;
1792
+ var vuuRowDataItemTypes = ["boolean", "number", "string"];
1793
+ var isVuuRowDataItem = (value) => vuuRowDataItemTypes.includes(typeof value);
1794
+ var typeofVuuDataItem = (value) => typeof value === "boolean" ? "boolean" : typeof value === "number" ? "number" : "string";
1795
+ var getCellValue = (attribute, attributeValue) => {
1796
+ if (isJsonData(attributeValue)) {
1797
+ return { attribute: `${attribute}+`, attributeValue: "", type: "json" };
1798
+ } else if (attributeValue === void 0) {
1799
+ return {
1800
+ attribute,
1801
+ attributeValue: "undefined",
1802
+ type: "string"
1803
+ };
1804
+ } else if (isVuuRowDataItem(attributeValue)) {
1805
+ return {
1806
+ attribute,
1807
+ attributeValue,
1808
+ type: typeofVuuDataItem(attributeValue)
1809
+ };
1810
+ } else {
1811
+ throw Error(`unsupported type ${typeof attributeValue} in JSON`);
1812
+ }
1813
+ };
1814
+ var jsonColumnType = {
1815
+ name: "json",
1816
+ renderer: {
1817
+ name: "json"
1818
+ }
1819
+ };
1820
+ var jsonToDataSourceRows = (json) => {
1821
+ const cols = [];
1822
+ cols.push(
1823
+ {
1824
+ name: "col 1",
1825
+ type: jsonColumnType
1826
+ },
1827
+ {
1828
+ name: "col 2",
1829
+ type: jsonColumnType
1830
+ }
1831
+ );
1832
+ const rows = [];
1833
+ addChildValues(rows, json, cols);
1834
+ return [cols, rows];
1835
+ };
1836
+ var addChildValues = (rows, json, cols, index = { value: 0 }, keyBase = "$root", depth = 0) => {
1837
+ let leafCount = 0;
1838
+ let rowCount = 0;
1839
+ if (depth === cols.length - 1) {
1840
+ cols.push({
1841
+ name: `col ${cols.length + 1}`,
1842
+ hidden: true,
1843
+ type: jsonColumnType
1844
+ });
1845
+ }
1846
+ const columnEntries = Object.entries(json);
1847
+ for (let i = 0; i < columnEntries.length; i++, index.value += 1) {
1848
+ const [key, value] = columnEntries[i];
1849
+ const { attribute, attributeValue, type } = getCellValue(key, value);
1850
+ const isLeaf = type !== "json";
1851
+ const blanks = Array(depth).fill("");
1852
+ const fullKey = `${keyBase}|${key}`;
1853
+ const row = [index.value, index.value, isLeaf, false, depth, 0, fullKey, 0, ...blanks, attribute, attributeValue];
1854
+ rows.push(row);
1855
+ rowCount += 1;
1856
+ if (isJsonData(value)) {
1857
+ const [nestedLeafCount, nestedRowCount] = addChildValues(
1858
+ rows,
1859
+ value,
1860
+ cols,
1861
+ { value: index.value + 1 },
1862
+ fullKey,
1863
+ depth + 1
1864
+ );
1865
+ row[COUNT] = nestedLeafCount;
1866
+ leafCount += nestedLeafCount;
1867
+ rowCount += nestedRowCount;
1868
+ index.value += nestedRowCount;
1869
+ } else {
1870
+ leafCount += 1;
1871
+ }
1872
+ }
1873
+ return [leafCount, rowCount];
1874
+ };
1875
+
1876
+ // src/keyboard-utils.ts
1877
+ var ArrowUp = "ArrowUp";
1878
+ var ArrowDown = "ArrowDown";
1879
+ var ArrowLeft = "ArrowLeft";
1880
+ var ArrowRight = "ArrowRight";
1881
+ var Enter = "Enter";
1882
+ var Escape = "Escape";
1883
+ var Home = "Home";
1884
+ var End = "End";
1885
+ var PageUp = "PageUp";
1886
+ var PageDown = "PageDown";
1887
+ var Space2 = " ";
1888
+ var Tab = "Tab";
1889
+
1890
+ // src/keyset.ts
1891
+ var KeySet = class {
1892
+ constructor(range) {
1893
+ this.keys = /* @__PURE__ */ new Map();
1894
+ this.free = [];
1895
+ this.nextKeyValue = 0;
1896
+ this.reset(range);
1897
+ }
1898
+ next() {
1899
+ if (this.free.length > 0) {
1900
+ return this.free.shift();
1901
+ } else {
1902
+ return this.nextKeyValue++;
1903
+ }
1904
+ }
1905
+ reset({ from, to }) {
1906
+ this.keys.forEach((keyValue, rowIndex) => {
1907
+ if (rowIndex < from || rowIndex >= to) {
1908
+ this.free.push(keyValue);
1909
+ this.keys.delete(rowIndex);
1910
+ }
1911
+ });
1912
+ const size2 = to - from;
1913
+ if (this.keys.size + this.free.length > size2) {
1914
+ this.free.length = Math.max(0, size2 - this.keys.size);
1915
+ }
1916
+ for (let rowIndex = from; rowIndex < to; rowIndex++) {
1917
+ if (!this.keys.has(rowIndex)) {
1918
+ const nextKeyValue = this.next();
1919
+ this.keys.set(rowIndex, nextKeyValue);
1920
+ }
1921
+ }
1922
+ if (this.nextKeyValue > this.keys.size) {
1923
+ this.nextKeyValue = this.keys.size;
1924
+ }
1925
+ }
1926
+ keyFor(rowIndex) {
1927
+ const key = this.keys.get(rowIndex);
1928
+ if (key === void 0) {
1929
+ console.log(`key not found
3
1930
  keys: ${this.toDebugString()}
4
1931
  free : ${this.free.join(",")}
5
- `),Error(`KeySet, no key found for rowIndex ${t}`);return n}toDebugString(){return Array.from(this.keys.entries()).map(([t,n])=>`${t}=>${n}`).join(",")}};var is=e=>e!==void 0&&"children"in e;var us=(e=21)=>{let t="",n=crypto.getRandomValues(new Uint8Array(e));for(;e--;){let r=n[e]&63;r<36?t+=r.toString(36):r<62?t+=(r-26).toString(36).toUpperCase():r<63?t+="_":t+="-"}return t};function ls(e,t){let n;return(...r)=>{clearTimeout(n),n=window.setTimeout(()=>e(...r),t)}}function ps(e,t){let n=!1,r;function o(){r==null?n=!1:(e(...r),r=void 0,setTimeout(o,t))}return(...i)=>{n?r=i:(e(...i),n=!0,setTimeout(o,t))}}var{IDX:Oe}=C,fs=e=>[t=>t[Oe]*e,t=>Math.floor(t/e),!1],ds=(e,t,n)=>[r=>{let o=n.current*t;return r[Oe]*e-o},r=>{let o=n.current*t;return Math.round((r+o)/e)},!0],gs=(e,t)=>{if(t===-1)return null;{let n=e.querySelector(`[aria-rowindex="${t+1}"]`);if(n)return n;throw Error(`getRowElementAtIndex no row found for index index ${t}`)}},Cs=e=>{let t=e.ariaRowIndex;if(t!=null){let n=parseInt(t)-1;if(isNaN(n))throw Error(`getIndexFromRowElement row element aria rowindex invalid ${t}`);return n}else throw Error("getIndexFromRowElement row element does not have aria rowindex")};var v=[],{SELECTED:He}=C,d={False:0,True:1,First:2,Last:4},xs=e=>(e[He]&d.True)===d.True,Ts=e=>e!==void 0&&(e[He]&d.Last)===d.Last,ln=(e,t)=>{let n=typeof e=="number"?e:e[0],r=typeof t=="number"?t:t[0];return n-r},Ds=(e,t,n,r,o=!1)=>e==="single"||(e==="extended"||e==="checkbox")&&!o&&!r||!r&&!o?v:!r&&o?mn(t,n):v,pn=(e,t)=>{for(let n=0;n<e.length;n++){let r=e[n];if(typeof r=="number"){if(r===t-1)return!0;if(r>t)return!1}else{if(r[0]===t+1||r[1]===t-1)return!0;if(r[0]>t)return!1}}return!1},cn=(e,t)=>{for(let n=0;n<e.length;n++){let r=e[n];if(typeof r=="number"){if(r===t-1){let o=e[n+1];if(o===t+1){let i=[r,o];return e.slice(0,n).concat([i]).concat(e.slice(n+2))}else{let i=[r,t];return e.slice(0,n).concat([i]).concat(e.slice(n+1))}}else if(r>t)break}else if(r[0]===t+1){let o=[t,r[1]];return e.slice(0,n).concat([o]).concat(e.slice(n+1))}else if(r[1]===t-1){let o=e[n+1];if(Array.isArray(o)&&o[0]===t+1){let i=[r[0],o[1]];return e.slice(0,n).concat([i]).concat(e.slice(n+2))}else if(typeof o=="number"&&o===t+1){let i=[r[0],o];return e.slice(0,n).concat([i]).concat(e.slice(n+2))}else{let i=[r[0],t];return e.slice(0,n).concat([i]).concat(e.slice(n+1))}}}return e},bs=(e,t,n,r,o=!1,i=-1)=>{let s=e==="single",u=e==="extended"||e==="checkbox",a=s||u&&!o&&!r;if(e==="none")return v;if(a)return[n];if(r){if(t.length===0)return[n];{let l=n>i?[i,n]:[n,i];return fn(t,l)}}else if(!r)return pn(t,n)?cn(t,n):t==null?void 0:t.concat(n).sort(ln);return v};function mn(e,t){if(e.includes(t))return e.filter(n=>n!==t);{let n=[];for(let r of e)Array.isArray(r)&&P(r,t)?n.push(...Tn(r,t)):n.push(r);return n}}function fn(e,t){let[n,r]=t;return e.reduce((o,i)=>(typeof i=="number"?i<n||i>r?o.push(i):Cn(o.at(-1),i)||o.push(t):dn(i,t)?o.push(gn(i,t)):(t[1]<i[0]&&o.push(t),o.push(i)),o),[])}var dn=(e,t)=>e[1]>=t[0]&&e[1]<=t[1]||e[0]>=t[0]&&e[0]<=t[1],gn=(e,t)=>[Math.min(e[0],t[0]),Math.max(e[1],t[1])],Cn=(e,t)=>typeof e>"u"||typeof e=="number"?!1:P(e,t),P=(e,t)=>t>=e[0]&&t<=e[1],yn=d.True+d.First+d.Last,hn=d.True+d.First,xn=d.True+d.Last,Rs=(e,t)=>{for(let n of e)if(typeof n=="number"){if(n===t)return yn}else if(P(n,t))return t===n[0]?hn:t===n[1]?xn:d.True;return d.False},Es=(e,t)=>{for(let n of e)if(typeof n=="number"){if(n===t)return!0;if(n>t)return!1}else{if(P(n,t))return!0;if(n[0]>t)return!1}return!1},Ss=e=>{if(e.every(n=>typeof n=="number"))return e;let t=[];for(let n of e)if(typeof n=="number")t.push(n);else for(let r=n[0];r<=n[1];r++)t.push(r);return t};function Tn([e,t],n){return n===e?[[e+1,t]]:n===t?[[e,t-1]]:t-e===2?[e,t]:n===t-1?[[e,t-2],t]:[[e,n-1],[n+1,t]]}var Dn=e=>e==="A"?"D":"A",ws=({sortDefs:e},{name:t},n=!1,r)=>{if(n)return{sortDefs:e.concat({column:t,sortType:r!=null?r:"A"})};let o=typeof r=="string"?r:e.length===1&&e[0].column===t?Dn(e[0].sortType):"A";return{sortDefs:[{column:t,sortType:o}]}},Fs=({sortDefs:e},t,n)=>{if(n===void 0){let r=e.find(o=>o.column===t.name);if(r)return{sortDefs:[{column:t.name,sortType:r.sortType==="A"?"D":"A"}]}}return{sortDefs:[{column:t.name,sortType:n!=null?n:"A"}]}},Ls=({sortDefs:e},t,n="A")=>{let r={column:t.name,sortType:n};return e.length>0?{sortDefs:e.concat(r)}:{sortDefs:[r]}};var Ps=e=>{let t=e.trim(),n=t.lastIndexOf(" ");return n===-1?t:t.slice(n+1)},bn=e=>e.length===0?"":e[0].toUpperCase()+e.slice(1),Rn=/(?<!(^|[A-Z]))(?=[A-Z])|(?<!^)(?=[A-Z][a-z])/,Vs=e=>{let[t,...n]=e.split(Rn);return`${bn(t)} ${n.join(" ")}`};import{createContext as Sn,isValidElement as Mn,cloneElement as wn,useContext as $e}from"react";function Ge(e){var t,n,r="";if(typeof e=="string"||typeof e=="number")r+=e;else if(typeof e=="object")if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=Ge(e[t]))&&(r&&(r+=" "),r+=n);else for(t in e)e[t]&&(r&&(r+=" "),r+=t);return r}function En(){for(var e,t,n=0,r="";n<arguments.length;)(e=arguments[n++])&&(t=Ge(e))&&(r&&(r+=" "),r+=t);return r}var _e=En;import{jsx as An}from"react/jsx-runtime";var Fn="medium",Ln="salt-theme",vn="light",B=Sn({density:"high",theme:"vuu",themeMode:"light"}),Pn=["vuu","vuu-density-high","light"],$s=e=>{let t=$e(B);return e?[e.themeClass,e.densityClass,e.dataMode]:t?[`${t.theme}-theme`,`${t.theme}-density-${t.density}`,t.themeMode]:Pn},Vn=(e,t,n,r)=>{var o;return Mn(e)?wn(e,{className:_e((o=e.props)==null?void 0:o.className,`${t}-theme`,`${t}-density-${r}`),"data-mode":n}):(console.warn(`
1932
+ `);
1933
+ throw Error(`KeySet, no key found for rowIndex ${rowIndex}`);
1934
+ }
1935
+ return key;
1936
+ }
1937
+ toDebugString() {
1938
+ return Array.from(this.keys.entries()).map(([k, v]) => `${k}=>${v}`).join(",");
1939
+ }
1940
+ };
1941
+
1942
+ // src/menu-utils.ts
1943
+ var isGroupMenuItemDescriptor = (menuItem) => menuItem !== void 0 && "children" in menuItem;
1944
+
1945
+ // src/nanoid/index.ts
1946
+ var uuid = (size2 = 21) => {
1947
+ let id = "";
1948
+ const bytes = crypto.getRandomValues(new Uint8Array(size2));
1949
+ while (size2--) {
1950
+ const byte = bytes[size2] & 63;
1951
+ if (byte < 36) {
1952
+ id += byte.toString(36);
1953
+ } else if (byte < 62) {
1954
+ id += (byte - 26).toString(36).toUpperCase();
1955
+ } else if (byte < 63) {
1956
+ id += "_";
1957
+ } else {
1958
+ id += "-";
1959
+ }
1960
+ }
1961
+ return id;
1962
+ };
1963
+
1964
+ // src/perf-utils.ts
1965
+ function debounce(callback, timeInterval) {
1966
+ let timeout;
1967
+ return (...args) => {
1968
+ clearTimeout(timeout);
1969
+ timeout = window.setTimeout(() => callback(...args), timeInterval);
1970
+ };
1971
+ }
1972
+ function throttle(callback, limit) {
1973
+ let wait = false;
1974
+ let lastArgs = void 0;
1975
+ function checkLastArgs() {
1976
+ if (lastArgs == void 0) {
1977
+ wait = false;
1978
+ } else {
1979
+ callback(...lastArgs);
1980
+ lastArgs = void 0;
1981
+ setTimeout(checkLastArgs, limit);
1982
+ }
1983
+ }
1984
+ return (...args) => {
1985
+ if (wait) {
1986
+ lastArgs = args;
1987
+ } else {
1988
+ callback(...args);
1989
+ wait = true;
1990
+ setTimeout(checkLastArgs, limit);
1991
+ }
1992
+ };
1993
+ }
1994
+
1995
+ // src/row-utils.ts
1996
+ var { IDX } = metadataKeys;
1997
+ var actualRowPositioning = (rowHeight) => [
1998
+ (row) => row[IDX] * rowHeight,
1999
+ (position) => Math.floor(position / rowHeight),
2000
+ false
2001
+ ];
2002
+ var virtualRowPositioning = (rowHeight, virtualisedExtent, pctScrollTop) => [
2003
+ (row) => {
2004
+ const rowOffset = pctScrollTop.current * virtualisedExtent;
2005
+ return row[IDX] * rowHeight - rowOffset;
2006
+ },
2007
+ /*
2008
+ Return index position of closest row
2009
+ */
2010
+ (position) => {
2011
+ const rowOffset = pctScrollTop.current * virtualisedExtent;
2012
+ return Math.round((position + rowOffset) / rowHeight);
2013
+ },
2014
+ true
2015
+ ];
2016
+ var getRowElementAtIndex = (container, rowIndex) => {
2017
+ if (rowIndex === -1) {
2018
+ return null;
2019
+ } else {
2020
+ const activeRow = container.querySelector(
2021
+ `[aria-rowindex="${rowIndex + 1}"]`
2022
+ );
2023
+ if (activeRow) {
2024
+ return activeRow;
2025
+ } else {
2026
+ throw Error(
2027
+ `getRowElementAtIndex no row found for index index ${rowIndex}`
2028
+ );
2029
+ }
2030
+ }
2031
+ };
2032
+ var getIndexFromRowElement = (rowElement) => {
2033
+ const rowIndex = rowElement.ariaRowIndex;
2034
+ if (rowIndex != null) {
2035
+ const index = parseInt(rowIndex) - 1;
2036
+ if (!isNaN(index)) {
2037
+ return index;
2038
+ } else {
2039
+ throw Error(
2040
+ `getIndexFromRowElement row element aria rowindex invalid ${rowIndex}`
2041
+ );
2042
+ }
2043
+ } else {
2044
+ throw Error(
2045
+ "getIndexFromRowElement row element does not have aria rowindex"
2046
+ );
2047
+ }
2048
+ };
2049
+
2050
+ // src/selection-utils.ts
2051
+ var NO_SELECTION = [];
2052
+ var { SELECTED } = metadataKeys;
2053
+ var RowSelected = {
2054
+ False: 0,
2055
+ True: 1,
2056
+ First: 2,
2057
+ Last: 4
2058
+ };
2059
+ var isRowSelected = (row) => (row[SELECTED] & RowSelected.True) === RowSelected.True;
2060
+ var isRowSelectedLast = (row) => row !== void 0 && (row[SELECTED] & RowSelected.Last) === RowSelected.Last;
2061
+ var inAscendingOrder = (item1, item2) => {
2062
+ const n1 = typeof item1 === "number" ? item1 : item1[0];
2063
+ const n2 = typeof item2 === "number" ? item2 : item2[0];
2064
+ return n1 - n2;
2065
+ };
2066
+ var deselectItem = (selectionModel, selected, itemIndex, rangeSelect, keepExistingSelection = false) => {
2067
+ const singleSelect = selectionModel === "single";
2068
+ const multiSelect = selectionModel === "extended" || selectionModel === "checkbox";
2069
+ const actsLikeSingleSelect = singleSelect || multiSelect && !keepExistingSelection && !rangeSelect;
2070
+ if (actsLikeSingleSelect || !rangeSelect && !keepExistingSelection) {
2071
+ return NO_SELECTION;
2072
+ } else if (!rangeSelect && keepExistingSelection) {
2073
+ return removeSelectedItem(selected, itemIndex);
2074
+ }
2075
+ return NO_SELECTION;
2076
+ };
2077
+ var newSelectedFillsGapOrExtends = (selection, itemIndex) => {
2078
+ for (let i = 0; i < selection.length; i++) {
2079
+ const item = selection[i];
2080
+ if (typeof item === "number") {
2081
+ if (item === itemIndex - 1) {
2082
+ return true;
2083
+ } else if (item > itemIndex) {
2084
+ return false;
2085
+ }
2086
+ } else if (item[0] === itemIndex + 1 || item[1] === itemIndex - 1) {
2087
+ return true;
2088
+ } else if (item[0] > itemIndex) {
2089
+ return false;
2090
+ }
2091
+ }
2092
+ return false;
2093
+ };
2094
+ var fillGapOrExtendSelection = (selection, itemIndex) => {
2095
+ for (let i = 0; i < selection.length; i++) {
2096
+ const item = selection[i];
2097
+ if (typeof item === "number") {
2098
+ if (item === itemIndex - 1) {
2099
+ const nextSelectionItem = selection[i + 1];
2100
+ if (nextSelectionItem === itemIndex + 1) {
2101
+ const newRange = [item, nextSelectionItem];
2102
+ return selection.slice(0, i).concat([newRange]).concat(selection.slice(i + 2));
2103
+ } else {
2104
+ const newRange = [item, itemIndex];
2105
+ return selection.slice(0, i).concat([newRange]).concat(selection.slice(i + 1));
2106
+ }
2107
+ } else if (item > itemIndex) {
2108
+ break;
2109
+ }
2110
+ } else if (item[0] === itemIndex + 1) {
2111
+ const newRange = [itemIndex, item[1]];
2112
+ return selection.slice(0, i).concat([newRange]).concat(selection.slice(i + 1));
2113
+ } else if (item[1] === itemIndex - 1) {
2114
+ const nextItem = selection[i + 1];
2115
+ if (Array.isArray(nextItem) && nextItem[0] === itemIndex + 1) {
2116
+ const newRange = [item[0], nextItem[1]];
2117
+ return selection.slice(0, i).concat([newRange]).concat(selection.slice(i + 2));
2118
+ } else if (typeof nextItem === "number" && nextItem === itemIndex + 1) {
2119
+ const newRange = [item[0], nextItem];
2120
+ return selection.slice(0, i).concat([newRange]).concat(selection.slice(i + 2));
2121
+ } else {
2122
+ const newRange = [item[0], itemIndex];
2123
+ return selection.slice(0, i).concat([newRange]).concat(selection.slice(i + 1));
2124
+ }
2125
+ }
2126
+ }
2127
+ return selection;
2128
+ };
2129
+ var selectItem = (selectionModel, selected, itemIndex, rangeSelect, keepExistingSelection = false, activeItemIndex = -1) => {
2130
+ const singleSelect = selectionModel === "single";
2131
+ const multiSelect = selectionModel === "extended" || selectionModel === "checkbox";
2132
+ const actsLikeSingleSelect = singleSelect || multiSelect && !keepExistingSelection && !rangeSelect;
2133
+ if (selectionModel === "none") {
2134
+ return NO_SELECTION;
2135
+ } else if (actsLikeSingleSelect) {
2136
+ return [itemIndex];
2137
+ } else if (rangeSelect) {
2138
+ if (selected.length === 0) {
2139
+ return [itemIndex];
2140
+ } else {
2141
+ const range = itemIndex > activeItemIndex ? [activeItemIndex, itemIndex] : [itemIndex, activeItemIndex];
2142
+ return insertRange(selected, range);
2143
+ }
2144
+ } else if (!rangeSelect) {
2145
+ if (newSelectedFillsGapOrExtends(selected, itemIndex)) {
2146
+ return fillGapOrExtendSelection(selected, itemIndex);
2147
+ } else {
2148
+ return selected == null ? void 0 : selected.concat(itemIndex).sort(inAscendingOrder);
2149
+ }
2150
+ } else if (multiSelect) {
2151
+ }
2152
+ return NO_SELECTION;
2153
+ };
2154
+ function removeSelectedItem(selected, itemIndex) {
2155
+ if (selected.includes(itemIndex)) {
2156
+ return selected.filter((selectedItem) => selectedItem !== itemIndex);
2157
+ } else {
2158
+ const newSelected = [];
2159
+ for (const selectedItem of selected) {
2160
+ if (Array.isArray(selectedItem)) {
2161
+ if (rangeIncludes(selectedItem, itemIndex)) {
2162
+ newSelected.push(...splitRange(selectedItem, itemIndex));
2163
+ } else {
2164
+ newSelected.push(selectedItem);
2165
+ }
2166
+ } else {
2167
+ newSelected.push(selectedItem);
2168
+ }
2169
+ }
2170
+ return newSelected;
2171
+ }
2172
+ }
2173
+ function insertRange(selected, range) {
2174
+ const [from, to] = range;
2175
+ return selected.reduce((newSelected, selectedItem) => {
2176
+ if (typeof selectedItem === "number") {
2177
+ if (selectedItem < from || selectedItem > to) {
2178
+ newSelected.push(selectedItem);
2179
+ } else if (!includedInRange(newSelected.at(-1), selectedItem)) {
2180
+ newSelected.push(range);
2181
+ }
2182
+ } else if (overlappingRange(selectedItem, range)) {
2183
+ newSelected.push(mergeRanges(selectedItem, range));
2184
+ } else {
2185
+ if (range[1] < selectedItem[0]) {
2186
+ newSelected.push(range);
2187
+ }
2188
+ newSelected.push(selectedItem);
2189
+ }
2190
+ return newSelected;
2191
+ }, []);
2192
+ }
2193
+ var overlappingRange = (r1, r2) => r1[1] >= r2[0] && r1[1] <= r2[1] || r1[0] >= r2[0] && r1[0] <= r2[1];
2194
+ var mergeRanges = (r1, r2) => [
2195
+ Math.min(r1[0], r2[0]),
2196
+ Math.max(r1[1], r2[1])
2197
+ ];
2198
+ var includedInRange = (selectedItem, index) => {
2199
+ if (typeof selectedItem === "undefined" || typeof selectedItem === "number") {
2200
+ return false;
2201
+ } else
2202
+ return rangeIncludes(selectedItem, index);
2203
+ };
2204
+ var rangeIncludes = (range, index) => index >= range[0] && index <= range[1];
2205
+ var SINGLE_SELECTED_ROW = RowSelected.True + RowSelected.First + RowSelected.Last;
2206
+ var FIRST_SELECTED_ROW_OF_BLOCK = RowSelected.True + RowSelected.First;
2207
+ var LAST_SELECTED_ROW_OF_BLOCK = RowSelected.True + RowSelected.Last;
2208
+ var getSelectionStatus = (selected, itemIndex) => {
2209
+ for (const item of selected) {
2210
+ if (typeof item === "number") {
2211
+ if (item === itemIndex) {
2212
+ return SINGLE_SELECTED_ROW;
2213
+ }
2214
+ } else if (rangeIncludes(item, itemIndex)) {
2215
+ if (itemIndex === item[0]) {
2216
+ return FIRST_SELECTED_ROW_OF_BLOCK;
2217
+ } else if (itemIndex === item[1]) {
2218
+ return LAST_SELECTED_ROW_OF_BLOCK;
2219
+ } else {
2220
+ return RowSelected.True;
2221
+ }
2222
+ }
2223
+ }
2224
+ return RowSelected.False;
2225
+ };
2226
+ var isSelected = (selected, itemIndex) => {
2227
+ for (const item of selected) {
2228
+ if (typeof item === "number") {
2229
+ if (item === itemIndex) {
2230
+ return true;
2231
+ } else if (item > itemIndex) {
2232
+ return false;
2233
+ }
2234
+ } else if (rangeIncludes(item, itemIndex)) {
2235
+ return true;
2236
+ } else if (item[0] > itemIndex) {
2237
+ return false;
2238
+ }
2239
+ }
2240
+ return false;
2241
+ };
2242
+ var expandSelection = (selected) => {
2243
+ if (selected.every((selectedItem) => typeof selectedItem === "number")) {
2244
+ return selected;
2245
+ }
2246
+ const expandedSelected = [];
2247
+ for (const selectedItem of selected) {
2248
+ if (typeof selectedItem === "number") {
2249
+ expandedSelected.push(selectedItem);
2250
+ } else {
2251
+ for (let i = selectedItem[0]; i <= selectedItem[1]; i++) {
2252
+ expandedSelected.push(i);
2253
+ }
2254
+ }
2255
+ }
2256
+ return expandedSelected;
2257
+ };
2258
+ function splitRange([from, to], itemIndex) {
2259
+ if (itemIndex === from) {
2260
+ return [[from + 1, to]];
2261
+ } else if (itemIndex === to) {
2262
+ return [[from, to - 1]];
2263
+ } else if (to - from === 2) {
2264
+ return [from, to];
2265
+ } else if (itemIndex === to - 1) {
2266
+ return [[from, to - 2], to];
2267
+ } else {
2268
+ return [
2269
+ [from, itemIndex - 1],
2270
+ [itemIndex + 1, to]
2271
+ ];
2272
+ }
2273
+ }
2274
+
2275
+ // src/sort-utils.ts
2276
+ var toggle = (sortType) => sortType === "A" ? "D" : "A";
2277
+ var applySort = ({ sortDefs }, { name: column }, extendSort = false, sortType) => {
2278
+ if (extendSort) {
2279
+ return {
2280
+ sortDefs: sortDefs.concat({
2281
+ column,
2282
+ sortType: sortType != null ? sortType : "A"
2283
+ })
2284
+ };
2285
+ }
2286
+ const newSortType = typeof sortType === "string" ? sortType : sortDefs.length === 1 && sortDefs[0].column === column ? toggle(sortDefs[0].sortType) : "A";
2287
+ return {
2288
+ sortDefs: [{ column, sortType: newSortType }]
2289
+ };
2290
+ };
2291
+ var setSortColumn = ({ sortDefs }, column, sortType) => {
2292
+ if (sortType === void 0) {
2293
+ const columnSort = sortDefs.find((item) => item.column === column.name);
2294
+ if (columnSort) {
2295
+ return {
2296
+ sortDefs: [
2297
+ {
2298
+ column: column.name,
2299
+ sortType: columnSort.sortType === "A" ? "D" : "A"
2300
+ }
2301
+ ]
2302
+ };
2303
+ }
2304
+ }
2305
+ return { sortDefs: [{ column: column.name, sortType: sortType != null ? sortType : "A" }] };
2306
+ };
2307
+ var addSortColumn = ({ sortDefs }, column, sortType = "A") => {
2308
+ const sortEntry = { column: column.name, sortType };
2309
+ if (sortDefs.length > 0) {
2310
+ return {
2311
+ sortDefs: sortDefs.concat(sortEntry)
2312
+ };
2313
+ } else {
2314
+ return { sortDefs: [sortEntry] };
2315
+ }
2316
+ };
2317
+
2318
+ // src/text-utils.ts
2319
+ var lastWord = (text) => {
2320
+ const trimmedText = text.trim();
2321
+ const pos = trimmedText.lastIndexOf(" ");
2322
+ if (pos === -1) {
2323
+ return trimmedText;
2324
+ } else {
2325
+ return trimmedText.slice(pos + 1);
2326
+ }
2327
+ };
2328
+ var capitalize = (text) => text.length === 0 ? "" : text[0].toUpperCase() + text.slice(1);
2329
+ var regexp_worfify = /(?<!(^|[A-Z]))(?=[A-Z])|(?<!^)(?=[A-Z][a-z])/;
2330
+ var wordify = (text) => {
2331
+ const [firstWord, ...rest] = text.split(regexp_worfify);
2332
+ return `${capitalize(firstWord)} ${rest.join(" ")}`;
2333
+ };
2334
+
2335
+ // src/ThemeProvider.tsx
2336
+ import {
2337
+ createContext,
2338
+ isValidElement,
2339
+ cloneElement,
2340
+ useContext
2341
+ } from "react";
2342
+
2343
+ // ../../node_modules/clsx/dist/clsx.mjs
2344
+ function r(e) {
2345
+ var t, f, n = "";
2346
+ if ("string" == typeof e || "number" == typeof e)
2347
+ n += e;
2348
+ else if ("object" == typeof e)
2349
+ if (Array.isArray(e))
2350
+ for (t = 0; t < e.length; t++)
2351
+ e[t] && (f = r(e[t])) && (n && (n += " "), n += f);
2352
+ else
2353
+ for (t in e)
2354
+ e[t] && (n && (n += " "), n += t);
2355
+ return n;
2356
+ }
2357
+ function clsx() {
2358
+ for (var e, t, f = 0, n = ""; f < arguments.length; )
2359
+ (e = arguments[f++]) && (t = r(e)) && (n && (n += " "), n += t);
2360
+ return n;
2361
+ }
2362
+ var clsx_default = clsx;
2363
+
2364
+ // src/ThemeProvider.tsx
2365
+ import { jsx } from "react/jsx-runtime";
2366
+ var DEFAULT_DENSITY = "medium";
2367
+ var DEFAULT_THEME = "salt-theme";
2368
+ var DEFAULT_THEME_MODE = "light";
2369
+ var ThemeContext = createContext({
2370
+ density: "high",
2371
+ theme: "vuu",
2372
+ themeMode: "light"
2373
+ });
2374
+ var DEFAULT_THEME_ATTRIBUTES = [
2375
+ "vuu",
2376
+ "vuu-density-high",
2377
+ "light"
2378
+ ];
2379
+ var useThemeAttributes = (themeAttributes) => {
2380
+ const context = useContext(ThemeContext);
2381
+ if (themeAttributes) {
2382
+ return [
2383
+ themeAttributes.themeClass,
2384
+ themeAttributes.densityClass,
2385
+ themeAttributes.dataMode
2386
+ ];
2387
+ } else if (context) {
2388
+ return [
2389
+ `${context.theme}-theme`,
2390
+ `${context.theme}-density-${context.density}`,
2391
+ context.themeMode
2392
+ ];
2393
+ }
2394
+ return DEFAULT_THEME_ATTRIBUTES;
2395
+ };
2396
+ var createThemedChildren = (children, theme, themeMode, density) => {
2397
+ var _a;
2398
+ if (isValidElement(children)) {
2399
+ return cloneElement(children, {
2400
+ className: clsx_default(
2401
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
2402
+ (_a = children.props) == null ? void 0 : _a.className,
2403
+ `${theme}-theme`,
2404
+ `${theme}-density-${density}`
2405
+ ),
2406
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
2407
+ // @ts-expect-error
2408
+ "data-mode": themeMode
2409
+ });
2410
+ } else {
2411
+ console.warn(
2412
+ `
6
2413
  ThemeProvider can only apply CSS classes for theming to a single nested child element of the ThemeProvider.
7
- Wrap elements with a single container`),e)},kn=({applyThemeClasses:e=!1,children:t,theme:n,themeMode:r,density:o})=>{var h,T,R;let{density:i,themeMode:s,theme:u}=$e(B),a=(h=o!=null?o:i)!=null?h:Fn,l=(T=r!=null?r:s)!=null?T:vn,c=(R=n!=null?n:u)!=null?R:Ln,y=e?Vn(t,c,l,a):t;return An(B.Provider,{value:{themeMode:l,density:a,theme:c},children:y})};kn.displayName="ThemeProvider";var Ws=(e,t)=>{var n;return(n=new URL(document.location.href).searchParams.get(e))!=null?n:t},js=e=>new URL(document.location.href).searchParams.has(e);import{useMemo as In}from"react";var On=0,qs=e=>In(()=>e!=null?e:`vuu-${++On}`,[e]);import{useLayoutEffect as Hn,useRef as Gn}from"react";var Qs=(e,t)=>{let n=Gn(!1);Hn(()=>{n.current?e():n.current=!0},t)};export{ir as AggregationType,Ki as ArrowDown,qi as ArrowLeft,zi as ArrowRight,Bi as ArrowUp,Fn as DEFAULT_DENSITY,Ln as DEFAULT_THEME,vn as DEFAULT_THEME_MODE,_ as DOWN1,$ as DOWN2,de as DataWindow,Qi as End,Ji as Enter,Xi as Escape,Fe as EventEmitter,Yi as Home,Ie as KeySet,Eo as MEASURES,Co as NULL_RANGE,Tt as NoFilter,Dt as NoSort,es as PageDown,Zi as PageUp,Me as RangeMonitor,d as RowSelected,ts as Space,ns as Tab,B as ThemeContext,kn as ThemeProvider,H as UP1,G as UP2,M as WindowRange,fs as actualRowPositioning,Br as addColumnToSubscribedColumns,ki as addGroupColumn,Ls as addSortColumn,Zr as applyDefaultColumnConfig,Fr as applyFilterToColumns,Mr as applyGroupByToColumns,ws as applySort,wr as applySortToColumns,qn as boxContainsPoint,hr as buildColumnMap,Ft as columnsChanged,Io as configChanged,mi as createEl,ls as debounce,De as defaultPatternsByType,Ve as defaultValueFormatter,Ds as deselectItem,Ti as dispatchCustomEvent,xi as dispatchMouseEvent,Ss as expandSelection,ue as extractFilterForColumn,Ze as extractGroupColumn,be as fallbackDateTimePattern,V as filterAsQuery,Lt as filterChanged,je as filterValue,ot as findColumn,k as flattenColumnGroup,Ci as focusFirstFocusableElement,he as formatDate,lr as fromServerDataType,jn as getAddedItems,I as getCalculatedColumnDetails,qr as getCalculatedColumnExpression,at as getCalculatedColumnName,Kr as getCalculatedColumnType,mo as getCellConfigPanelRenderer,ao as getCellRenderer,uo as getCellRendererOptions,qt as getClosest,di as getClosestIndexItem,eo as getColumnByName,lo as getColumnHeaderContentRenderer,po as getColumnHeaderLabelRenderer,Vr as getColumnLabel,Pr as getColumnName,Er as getColumnStyle,Hr as getColumnsInViewport,co as getConfigurationEditor,pe as getCookieValue,ur as getDefaultAlignment,ae as getDefaultColumnType,fo as getEditRuleValidator,gi as getElementByDataIndex,fi as getElementDataIndex,Kt as getFocusableElement,yo as getFullRange,_r as getGroupValueAndOffset,Cs as getIndexFromRowElement,ai as getLoggingConfigForWorker,Bn as getMissingItems,Fo as getMovingValueDirection,so as getRegisteredCellRenderers,gs as getRowElementAtIndex,Ir as getRowRecord,hi as getScrollbarSize,Rs as getSelectionStatus,Rr as getTableHeadings,Wr as getTypeFormattingFromColumn,Pi as getUniqueId,Ws as getUrlParameter,Li as getValueFormatter,vt as groupByChanged,Bo as hasAction,Ho as hasFilter,Oo as hasGroupBy,Xe as hasHeadings,Go as hasSort,js as hasUrlParameter,yr as hasValidationRules,Gi as invariant,Qn as isAndFilter,le as isCalculatedColumn,Ii as isCharacterKey,A as isColumnTypeRenderer,er as isCompleteFilter,Uo as isConnectionQualityMetrics,No as isConnectionStatusMessage,Or as isDataLoading,ie as isDateTimeColumn,N as isDateTimePattern,jo as isErrorResponse,ee as isFilterClause,Lr as isFilteredColumn,et as isGroupColumn,is as isGroupMenuItemDescriptor,Yn as isInFilter,tt as isJsonAttribute,Dr as isJsonColumn,Tr as isJsonGroup,Je as isKeyedColumn,gr as isLookupRenderer,se as isMappedValueTypeRenderer,E as isMultiClauseFilter,te as isMultiValueFilter,Xn as isNamedFilter,re as isNotHidden,Ce as isNotNullOrUndefined,pr as isNumericColumn,Zn as isOrFilter,cr as isPinned,Oi as isQuoteKey,mr as isResizing,xs as isRowSelected,Ts as isRowSelectedLast,yi as isSelectableElement,Es as isSelected,Z as isSingleValueFilter,$o as isTableSchema,fr as isTextColumn,g as isTypeDescriptor,_o as isTypeaheadSuggestionProvider,ze as isValidColumnAlignment,Jn as isValidFilterClauseOp,Mo as isValidNumber,ar as isValidPinLocation,Cr as isValueListRenderer,xt as isViewportMenusAction,Ko as isViewporttMessage,vo as isVisualLinkCreatedAction,Po as isVisualLinkRemovedAction,ht as isVisualLinksAction,Vo as isVuuFeatureAction,$i as itemToString,Nn as itemsChanged,Un as itemsOrOrderChanged,Wi as jsonToDataSourceRows,Ps as lastWord,Ee as logger,sr as mapSortCriteria,Wo as messageHasResult,C as metadataKeys,Yr as moveColumnTo,Y as moveItem,Wn as moveItemDeprecated,en as numericFormatter,$n as partition,xr as projectUpdates,Be as quotedStrings,xo as rangeNewItems,oo as registerComponent,io as registerConfigurationEditor,tr as removeColumnFromFilter,Qr as replaceColumn,ho as resetRange,Pe as roundDecimal,bs as selectItem,Sr as setAggregations,Xr as setCalculatedColumnExpression,zr as setCalculatedColumnName,Jr as setCalculatedColumnType,Fs as setSortColumn,wo as shallowEquals,br as sortPinnedColumns,vr as stripFilterFromColumns,jr as subscribedOnly,Ot as supportedDateTimePatterns,ps as throttle,dr as toColumnDescriptor,Ar as toDataSourceColumns,kr as updateColumn,$r as updateColumnFormatting,Ur as updateColumnRenderProps,Nr as updateColumnType,qs as useId,Qs as useLayoutEffectSkipFirst,$s as useThemeAttributes,us as uuid,Ao as vanillaConfig,ds as virtualRowPositioning,Gr as visibleColumnAtIndex,qo as withConfigDefaults,Ct as withinRange,Vs as wordify};
2414
+ Wrap elements with a single container`
2415
+ );
2416
+ return children;
2417
+ }
2418
+ };
2419
+ var ThemeProvider = ({
2420
+ applyThemeClasses = false,
2421
+ children,
2422
+ theme: themeProp,
2423
+ themeMode: themeModeProp,
2424
+ density: densityProp
2425
+ }) => {
2426
+ var _a, _b, _c;
2427
+ const {
2428
+ density: inheritedDensity,
2429
+ themeMode: inheritedThemeMode,
2430
+ theme: inheritedTheme
2431
+ } = useContext(ThemeContext);
2432
+ const density = (_a = densityProp != null ? densityProp : inheritedDensity) != null ? _a : DEFAULT_DENSITY;
2433
+ const themeMode = (_b = themeModeProp != null ? themeModeProp : inheritedThemeMode) != null ? _b : DEFAULT_THEME_MODE;
2434
+ const theme = (_c = themeProp != null ? themeProp : inheritedTheme) != null ? _c : DEFAULT_THEME;
2435
+ const themedChildren = applyThemeClasses ? createThemedChildren(children, theme, themeMode, density) : children;
2436
+ return /* @__PURE__ */ jsx(ThemeContext.Provider, { value: { themeMode, density, theme }, children: themedChildren });
2437
+ };
2438
+ ThemeProvider.displayName = "ThemeProvider";
2439
+
2440
+ // src/url-utils.ts
2441
+ var getUrlParameter = (paramName, defaultValue) => {
2442
+ var _a;
2443
+ return (_a = new URL(document.location.href).searchParams.get(paramName)) != null ? _a : defaultValue;
2444
+ };
2445
+ var hasUrlParameter = (paramName) => new URL(document.location.href).searchParams.has(paramName);
2446
+
2447
+ // src/useId.ts
2448
+ import { useMemo } from "react";
2449
+ var vuuComponentIdCount = 0;
2450
+ var useId = (id) => useMemo(() => id != null ? id : `vuu-${++vuuComponentIdCount}`, [id]);
2451
+
2452
+ // src/useLayoutEffectSkipFirst.ts
2453
+ import { useLayoutEffect, useRef } from "react";
2454
+ var useLayoutEffectSkipFirst = (func, deps) => {
2455
+ const goodToGo = useRef(false);
2456
+ useLayoutEffect(() => {
2457
+ if (goodToGo.current) {
2458
+ func();
2459
+ } else {
2460
+ goodToGo.current = true;
2461
+ }
2462
+ }, deps);
2463
+ };
2464
+ export {
2465
+ AggregationType,
2466
+ ArrowDown,
2467
+ ArrowLeft,
2468
+ ArrowRight,
2469
+ ArrowUp,
2470
+ DEFAULT_DENSITY,
2471
+ DEFAULT_THEME,
2472
+ DEFAULT_THEME_MODE,
2473
+ DOWN1,
2474
+ DOWN2,
2475
+ DataWindow,
2476
+ End,
2477
+ Enter,
2478
+ Escape,
2479
+ EventEmitter,
2480
+ Home,
2481
+ KeySet,
2482
+ MEASURES,
2483
+ NULL_RANGE,
2484
+ NoFilter,
2485
+ NoSort,
2486
+ PageDown,
2487
+ PageUp,
2488
+ RangeMonitor,
2489
+ RowSelected,
2490
+ Space2 as Space,
2491
+ Tab,
2492
+ ThemeContext,
2493
+ ThemeProvider,
2494
+ UP1,
2495
+ UP2,
2496
+ WindowRange,
2497
+ actualRowPositioning,
2498
+ addColumnToSubscribedColumns,
2499
+ addGroupColumn,
2500
+ addSortColumn,
2501
+ applyDefaultColumnConfig,
2502
+ applyFilterToColumns,
2503
+ applyGroupByToColumns,
2504
+ applySort,
2505
+ applySortToColumns,
2506
+ boxContainsPoint,
2507
+ buildColumnMap,
2508
+ columnsChanged,
2509
+ configChanged,
2510
+ createEl,
2511
+ debounce,
2512
+ defaultPatternsByType,
2513
+ defaultValueFormatter,
2514
+ deselectItem,
2515
+ dispatchCustomEvent,
2516
+ dispatchMouseEvent,
2517
+ expandSelection,
2518
+ extractFilterForColumn,
2519
+ extractGroupColumn,
2520
+ fallbackDateTimePattern,
2521
+ filterAsQuery,
2522
+ filterChanged,
2523
+ filterValue,
2524
+ findColumn,
2525
+ flattenColumnGroup,
2526
+ focusFirstFocusableElement,
2527
+ formatDate,
2528
+ fromServerDataType,
2529
+ getAddedItems,
2530
+ getCalculatedColumnDetails,
2531
+ getCalculatedColumnExpression,
2532
+ getCalculatedColumnName,
2533
+ getCalculatedColumnType,
2534
+ getCellConfigPanelRenderer,
2535
+ getCellRenderer,
2536
+ getCellRendererOptions,
2537
+ getClosest,
2538
+ getClosestIndexItem,
2539
+ getColumnByName,
2540
+ getColumnHeaderContentRenderer,
2541
+ getColumnHeaderLabelRenderer,
2542
+ getColumnLabel,
2543
+ getColumnName,
2544
+ getColumnStyle,
2545
+ getColumnsInViewport,
2546
+ getConfigurationEditor,
2547
+ getCookieValue,
2548
+ getDefaultAlignment,
2549
+ getDefaultColumnType,
2550
+ getEditRuleValidator,
2551
+ getElementByDataIndex,
2552
+ getElementDataIndex,
2553
+ getFocusableElement,
2554
+ getFullRange,
2555
+ getGroupValueAndOffset,
2556
+ getIndexFromRowElement,
2557
+ getLoggingConfigForWorker,
2558
+ getMissingItems,
2559
+ getMovingValueDirection,
2560
+ getRegisteredCellRenderers,
2561
+ getRowElementAtIndex,
2562
+ getRowRecord,
2563
+ getScrollbarSize,
2564
+ getSelectionStatus,
2565
+ getTableHeadings,
2566
+ getTypeFormattingFromColumn,
2567
+ getUniqueId,
2568
+ getUrlParameter,
2569
+ getValueFormatter,
2570
+ groupByChanged,
2571
+ hasAction,
2572
+ hasFilter,
2573
+ hasGroupBy,
2574
+ hasHeadings,
2575
+ hasSort,
2576
+ hasUrlParameter,
2577
+ hasValidationRules,
2578
+ invariant,
2579
+ isAndFilter,
2580
+ isCalculatedColumn,
2581
+ isCharacterKey,
2582
+ isColumnTypeRenderer,
2583
+ isCompleteFilter,
2584
+ isConnectionQualityMetrics,
2585
+ isConnectionStatusMessage,
2586
+ isDataLoading,
2587
+ isDateTimeColumn,
2588
+ isDateTimePattern,
2589
+ isErrorResponse,
2590
+ isFilterClause,
2591
+ isFilteredColumn,
2592
+ isGroupColumn,
2593
+ isGroupMenuItemDescriptor,
2594
+ isInFilter,
2595
+ isJsonAttribute,
2596
+ isJsonColumn,
2597
+ isJsonGroup,
2598
+ isKeyedColumn,
2599
+ isLookupRenderer,
2600
+ isMappedValueTypeRenderer,
2601
+ isMultiClauseFilter,
2602
+ isMultiValueFilter,
2603
+ isNamedFilter,
2604
+ isNotHidden,
2605
+ isNotNullOrUndefined,
2606
+ isNumericColumn,
2607
+ isOrFilter,
2608
+ isPinned,
2609
+ isQuoteKey,
2610
+ isResizing,
2611
+ isRowSelected,
2612
+ isRowSelectedLast,
2613
+ isSelectableElement,
2614
+ isSelected,
2615
+ isSingleValueFilter,
2616
+ isTableSchema,
2617
+ isTextColumn,
2618
+ isTypeDescriptor,
2619
+ isTypeaheadSuggestionProvider,
2620
+ isValidColumnAlignment,
2621
+ isValidFilterClauseOp,
2622
+ isValidNumber,
2623
+ isValidPinLocation,
2624
+ isValueListRenderer,
2625
+ isViewportMenusAction,
2626
+ isViewporttMessage,
2627
+ isVisualLinkCreatedAction,
2628
+ isVisualLinkRemovedAction,
2629
+ isVisualLinksAction,
2630
+ isVuuFeatureAction,
2631
+ itemToString,
2632
+ itemsChanged,
2633
+ itemsOrOrderChanged,
2634
+ jsonToDataSourceRows,
2635
+ lastWord,
2636
+ logger,
2637
+ mapSortCriteria,
2638
+ messageHasResult,
2639
+ metadataKeys,
2640
+ moveColumnTo,
2641
+ moveItem,
2642
+ moveItemDeprecated,
2643
+ numericFormatter,
2644
+ partition,
2645
+ projectUpdates,
2646
+ quotedStrings,
2647
+ rangeNewItems,
2648
+ registerComponent,
2649
+ registerConfigurationEditor,
2650
+ removeColumnFromFilter,
2651
+ replaceColumn,
2652
+ resetRange,
2653
+ roundDecimal,
2654
+ selectItem,
2655
+ setAggregations,
2656
+ setCalculatedColumnExpression,
2657
+ setCalculatedColumnName,
2658
+ setCalculatedColumnType,
2659
+ setSortColumn,
2660
+ shallowEquals,
2661
+ sortPinnedColumns,
2662
+ stripFilterFromColumns,
2663
+ subscribedOnly,
2664
+ supportedDateTimePatterns,
2665
+ throttle,
2666
+ toColumnDescriptor,
2667
+ toDataSourceColumns,
2668
+ updateColumn,
2669
+ updateColumnFormatting,
2670
+ updateColumnRenderProps,
2671
+ updateColumnType,
2672
+ useId,
2673
+ useLayoutEffectSkipFirst,
2674
+ useThemeAttributes,
2675
+ uuid,
2676
+ vanillaConfig,
2677
+ virtualRowPositioning,
2678
+ visibleColumnAtIndex,
2679
+ withConfigDefaults,
2680
+ withinRange,
2681
+ wordify
2682
+ };
8
2683
  //# sourceMappingURL=index.js.map