@vuu-ui/vuu-utils 0.8.5 → 0.8.6-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/cjs/index.js +1946 -2
- package/cjs/index.js.map +4 -4
- package/esm/index.js +1924 -2
- package/esm/index.js.map +4 -4
- package/package.json +4 -4
- package/types/column-utils.d.ts +3 -1
- package/types/common-types.d.ts +6 -0
- package/types/filter-utils.d.ts +2 -1
- package/types/index.d.ts +2 -0
- package/types/itemToString.d.ts +2 -0
package/cjs/index.js
CHANGED
|
@@ -1,5 +1,1949 @@
|
|
|
1
|
-
"use strict";var M=Object.defineProperty;var Pe=Object.getOwnPropertyDescriptor;var Me=Object.getOwnPropertyNames;var ve=Object.prototype.hasOwnProperty;var Oe=(e,t)=>{for(var n in t)M(e,n,{get:t[n],enumerable:!0})},_e=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Me(t))!ve.call(e,o)&&o!==n&&M(e,o,{get:()=>t[o],enumerable:!(r=Pe(t,o))||r.enumerable});return e};var Ge=e=>_e(M({},"__esModule",{value:!0}),e);var Ie=(e,t,n)=>{if(!t.has(e))throw TypeError("Cannot "+n)};var m=(e,t,n)=>(Ie(e,t,"read from private field"),n?n.call(e):t.get(e)),se=(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)};var xr={};Oe(xr,{AggregationType:()=>Qe,ArrowDown:()=>Kn,ArrowLeft:()=>Pn,ArrowRight:()=>Mn,ArrowUp:()=>An,DOWN1:()=>E,DOWN2:()=>R,DataWindow:()=>H,End:()=>Gn,Enter:()=>vn,Escape:()=>On,EventEmitter:()=>B,Home:()=>_n,KeySet:()=>ee,PageDown:()=>$n,PageUp:()=>In,RangeMonitor:()=>q,RowSelected:()=>d,Space:()=>Nn,Tab:()=>Hn,UP1:()=>S,UP2:()=>w,WindowRange:()=>y,actualRowPositioning:()=>Xn,addGroupColumn:()=>yn,addSortColumn:()=>Cr,applyFilterToColumns:()=>Tt,applyGroupByToColumns:()=>Dt,applySort:()=>dr,applySortToColumns:()=>xt,buildColumnMap:()=>pt,createEl:()=>on,dateFormatter:()=>we,debounce:()=>Wn,defaultValueFormatter:()=>Q,deselectItem:()=>Qn,expandSelection:()=>fr,extractFilterForColumn:()=>I,extractGroupColumn:()=>fe,filterAsQuery:()=>T,findColumn:()=>de,flattenColumnGroup:()=>F,focusFirstFocusableElement:()=>sn,formatDate:()=>J,fromServerDataType:()=>tt,getCellConfigPanelRenderer:()=>Ht,getCellRenderer:()=>Nt,getColumnName:()=>Et,getColumnStyle:()=>Ct,getColumnsInViewport:()=>At,getCookieValue:()=>$,getFocusableElement:()=>xe,getFullRange:()=>Ut,getGroupValueAndOffset:()=>vt,getLoggingConfigForWorker:()=>tn,getMovingValueDirection:()=>Bt,getRegisteredCellRenderers:()=>$t,getRowRecord:()=>kt,getSelectionStatus:()=>pr,getTableHeadings:()=>yt,getUniqueId:()=>dn,getUrlParameter:()=>br,getValueFormatter:()=>gn,hasHeadings:()=>ce,hasUrlParameter:()=>Dr,invariant:()=>Sn,isAndFilter:()=>Xe,isCharacterKey:()=>Tn,isColumnTypeRenderer:()=>at,isDataLoading:()=>Vt,isDateColumn:()=>ae,isDatePattern:()=>U,isDateTimeColumn:()=>_,isDateTimePattern:()=>W,isFilterClause:()=>v,isFilteredColumn:()=>Ft,isGroupColumn:()=>me,isGroupMenuItemDescriptor:()=>Un,isInFilter:()=>Je,isJsonAttribute:()=>ge,isJsonColumn:()=>gt,isJsonGroup:()=>mt,isKeyedColumn:()=>et,isMappedValueTypeRenderer:()=>G,isMultiClauseFilter:()=>D,isMultiValueFilter:()=>O,isNamedFilter:()=>We,isNumericColumn:()=>nt,isOrFilter:()=>qe,isPinned:()=>ot,isQuoteKey:()=>Fn,isResizing:()=>st,isRowSelected:()=>Yn,isSelected:()=>cr,isSingleValueFilter:()=>ie,isTextColumn:()=>it,isTimeColumn:()=>pe,isTimePattern:()=>j,isTypeDescriptor:()=>h,isValidNumber:()=>Xt,itemsChanged:()=>Ne,itemsOrOrderChanged:()=>He,jsonToDataSourceRows:()=>Vn,lastWord:()=>hr,logger:()=>X,mapSortCriteria:()=>Ze,metadataKeys:()=>g,moveItem:()=>Ue,notHidden:()=>rt,numericFormatter:()=>Ee,partition:()=>$e,projectUpdates:()=>ct,rangeNewItems:()=>Wt,registerComponent:()=>It,removeColumnFromFilter:()=>Ye,resetRange:()=>jt,roundDecimal:()=>z,selectItem:()=>tr,setAggregations:()=>ht,setSortColumn:()=>yr,shallowEquals:()=>qt,sortPinnedColumns:()=>dt,stripFilterFromColumns:()=>St,throttle:()=>Jn,toColumnDescriptor:()=>ut,toDataSourceColumns:()=>Lt,updateColumn:()=>Rt,uuid:()=>jn,virtualRowPositioning:()=>qn,visibleColumnAtIndex:()=>Kt,withinRange:()=>he});module.exports=Ge(xr);function $e(e,t,n=[],r=[]){for(let o=0,s=e.length;o<s;o++)(t(e[o],o)?n:r).push(e[o]);return[n,r]}function Ne(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 He(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 Ue=(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 s=(n>r,0);o.splice(n+s,0,t)}return o};var je=new Set(["=","!=",">",">=","<","<=","starts","ends"]),We=e=>e!==void 0&&e.name!==void 0,ie=e=>e!==void 0&&je.has(e.op),v=e=>e!==void 0&&(ie(e)||O(e)),O=e=>e!==void 0&&e.op==="in",Je=e=>e.op==="in",Xe=e=>e.op==="and",qe=e=>e.op==="or";function D(e){return e!==void 0&&(e.op==="and"||e.op==="or")}var Be=e=>typeof e=="string"?`"${e}"`:e,T=e=>D(e)?e.filters.map(t=>T(t)).join(` ${e.op} `):O(e)?`${e.column} ${e.op} [${e.values.join(",")}]`:`${e.column} ${e.op} ${Be(e.value)}`,Ye=(e,t)=>{if(D(t)){let[n,r]=t.filters;if(n.column===e.name)return[r,T(r)];if(r.column===e.name)return[n,T(n)]}return[void 0,""]};var ze="asc",ue=[],Qe={Average:2,Count:3,Distinct:6,Sum:1,High:4,Low:5};function Ze(e,t,n=0){return e.map(r=>{if(typeof r=="string")return[t[r]+n,"asc"];if(Array.isArray(r)){let[o,s]=r;return[t[o]+n,s||ze]}else throw Error("columnUtils.mapSortCriteria invalid input")})}var et=e=>typeof e.key=="number",tt=e=>{switch(e){case"double":case"int":case"long":return"number";case"boolean":return"boolean";default:return"string"}},nt=({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,ae=({type:e})=>(h(e)?e.name:e)==="date",pe=({type:e})=>(h(e)?e.name:e)==="time",_=e=>ae(e)||pe(e),rt=e=>e.hidden!==!0,ot=e=>typeof e.pin=="string",ce=e=>Array.isArray(e.heading)&&e.heading.length>0,st=e=>e.resizing,it=({serverDataType:e})=>e===void 0?!1:e==="char"||e==="string",ut=e=>({name:e}),h=e=>typeof e<"u"&&typeof e!="string",lt={},at=e=>typeof(e==null?void 0:e.name)<"u",G=e=>e!==void 0&&typeof(e==null?void 0:e.map)<"u";function pt(e){let t=g.count;return e?e.reduce((n,r,o)=>(typeof r=="string"?n[r]=t+o:typeof r.key=="number"?n[r.name]=r.key:n[r.name]=t+o,n),{}):lt}function ct(e){let t=[],n=g.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 g={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"},ft=(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},F=e=>{var t;if((t=e[0])!=null&&t.isGroup){let[n,...r]=e;return n.columns.forEach(o=>{ft(r,o)}),r}else return e};function fe(e,t,n=!0){if(t&&t.length>0){let r=F(e),[o,s]=r.reduce((l,f,C)=>{let[b,P]=l;return t.includes(f.name)?b.push({...f,originalIdx:C}):P.push(f),l},[[],[]]);if(o.length!==t.length)throw Error(`extractGroupColumn: no column definition found for all groupBy cols ${JSON.stringify(t)} `);let i=t.length,u=t.map((l,f)=>({...o.find(b=>b.name===l),groupLevel:i-f}));return[{key:-1,name:"group-col",heading:["group-col"],isGroup:!0,columns:u,groupConfirmed:n,width:u.map(l=>l.width).reduce((l,f)=>l+f)+100},s]}return[null,F(e)]}var me=e=>e.isGroup===!0,ge=e=>typeof e=="string"&&e.endsWith("+"),mt=(e,t)=>{var n;return((n=e.type)==null?void 0:n.name)==="json"&&ge(t[e.key])},gt=e=>{var t;return((t=e.type)==null?void 0:t.name)==="json"},dt=e=>{let t=[],n=[],r=[],o=4;for(let i of e)switch(i.pin){case"left":t.push({...i,endPin:void 0,pinnedOffset:o}),o+=i.width;break;case"right":n.unshift(i);break;default:r.push(i)}t.length&&t.push({...t.pop(),endPin:!0});let s=t.length?t.concat(r):r;if(n.length){let i=[],u=0;for(let a of n)i.unshift({...a,pinnedOffset:u}),u+=a.width;return i[0].endPin=!0,s.concat(i)}else return s},yt=e=>{if(e.some(ce)){let t=e.reduce((s,{heading:i})=>{var u;return Math.max(s,(u=i==null?void 0:i.length)!=null?u:0)},0),n,r=[],o;for(let s=0;s<t;s++)o=[],e.forEach(({heading:i=ue,width:u})=>{var l;let a=(l=i[s])!=null?l:"";n&&n.label===a?n.width+=u:(n={label:a,width:u},o.push(n))}),r.push(o);return console.log({maxHeadingDepth:t,tableHeadings:r}),r}return ue},Ct=({pin:e,pinnedOffset:t=e==="left"?0:4,width:n})=>e==="left"?{left:t,width:n,"--pin-width":`${t+n-5}px`}:e==="right"?{right:t,width:n,"--pin-width":`${t+n}px`}:{width:n},ht=(e,t,n)=>e.filter(r=>r.column!==t.name).concat({column:t.name,aggType:n}),I=(e,t)=>{if(D(e))return bt(e,t);if(v(e))return e.column===t?e:void 0},bt=(e,t)=>{let{filters:n,op:r}=e,o=[];if(n.forEach(s=>{let i=I(s,t);i&&o.push(i)}),o.length!==0)return o.length===1?o[0]:{op:r,filters:o}},Dt=(e,t,n=!0)=>{var r;if(t.length){let[o,s]=fe(e,t,n);if(o)return[o].concat(s)}else if((r=e[0])!=null&&r.isGroup)return F(e);return e},xt=(e,t)=>e.map(n=>{let r=wt(n,t);return r!==void 0?{...n,sorted:r}:n.sorted?{...n,sorted:void 0}:n}),Tt=(e,{filterStruct:t})=>e.map(n=>{let r=I(t,n.name);return r!==void 0?{...n,filter:r}:n.filter?{...n,filter:void 0}:n}),Ft=e=>e.filter!==void 0,St=e=>e.map(t=>{let{filter:n,...r}=t;return n?r:t}),wt=(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},Et=e=>{let t=e.indexOf(":");return t===-1?e:e.slice(0,t)},de=(e,t)=>{let n=e.find(r=>r.name===t);if(n)return n;{let r=e.find(o=>o.isGroup);if(r)return de(r.columns,t)}};function Rt(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(s=>s.name===o.name?o:s)}else throw Error("column-utils.replaceColun, column not found")}var Lt=e=>e.expression?`${e.name}:${e.serverDataType}:${e.expression}`:e.name,kt=(e,t)=>Object.entries(t).reduce((n,[r,o])=>(n[r]=e[o],n),{}),Vt=e=>me(e[0])&&e[0].groupConfirmed===!1,At=(e,t,n)=>{var s;let r=[],o=0;for(let i=0,u=0;u<e.length;u++){let a=e[u];if(!a.hidden){if(i+a.width<t)a.pin==="left"||i+a.width+((s=e[u+1])==null?void 0:s.width)>t?r.push(a):o+=a.width;else if(i>n){r.push(a);break}else r.push(a);i+=a.width}}return[r,o]},le=e=>e.hidden!==!0,Kt=(e,t)=>e.every(le)?e[t]:e.filter(le).at(t),{DEPTH:Pt,IS_LEAF:Mt}=g,vt=(e,t)=>{let{[Pt]:n,[Mt]: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:s}=e[n-1];return[s(t[o]),n-1]}};var $=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 N=new Map,ye=new Map,Ce=new Map,Ot=(e,t)=>e===void 0?!0:Array.isArray(e)?e.includes(t):e===t,_t=(e,t)=>e==="cell-renderer",Gt=(e,t)=>e==="cell-config-panel";function It(e,t,n="cell-renderer",r){_t(n,t)?N.set(e,t):Gt(n,t)&&ye.set(e,t),r&&Ce.set(e,r)}var $t=e=>{let n=Array.from(N.keys()).map(r=>({name:r,...Ce.get(r)}));return e?n.filter(r=>Ot(r.serverDataType,e)):n};function Nt(e){if(e&&"name"in e)return N.get(e.name)}function Ht(e){return ye.get(e)}function Ut({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,s=Math.round(n/2),i=e-s<0,u=r-(t+s)<0;return i&&u?{from:0,to:r}:i?{from:0,to:o+n}:u?{from:Math.max(0,r-(o+n)),to:r}:{from:e-s,to:t+s}}}function jt({from:e,to:t,bufferSize:n=0}){return{from:0,to:t-e,bufferSize:n,reset:!0}}var he=(e,{from:t,to:n})=>e>=t&&e<n,Wt=({from:e,to:t},n)=>{let{from:r,to:o}=n,s=r>=t||o<=e,i=r<e&&o>t;return s||i?n:o>t?{from:t,to:o}:{from:r,to:e}},y=class{constructor(t,n){this.from=t,this.to=n}isWithin(t){return he(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 y(this.from,this.to)}};var{KEY:Jt}=g,H=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 y(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[Jt]===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),s=new Array(n-t);for(let i=r;i<o;i++){let u=this.getAtIndex(i);if(u){let a=i-t;s[a]=u}}this.data=s,this.range.from=t,this.range.to=n}}hasData(t,n){let r=this.range.from,o=t-r,s=Math.min(n-r-1,this.rowCount-1);return this.data[o]!==void 0&&this.data[s]!==void 0}getData(t,n){var u;let{from:r,to:o}=this.range,s=Math.max(0,t-r),i=Math.min(n-r,(u=this.rowCount)!=null?u:n);return this.data.slice(s,i)}};var S="up1",w="up2",E="down1",R="down2",Xt=e=>typeof e=="number"&&isFinite(e),be={},qt=(e=be,t=be)=>{let n=Object.keys(e),r=Object.keys(t);return n.length===r.length&&n.every(o=>e[o]===t[o])};function Bt(e,t,n,r){if(!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?E:S:o>0?t===E||t===R||t===w?S:w:t===S||t===w||t===R?E:R:""}}var U=e=>e==="dd.mm.yyyy",j=e=>e==="kk:mm:ss",W=e=>e!==void 0&&U(e)||j(e),x=e=>e<10?"0"+e:e.toString(),J=(e,t="dd.mm.yyyy")=>{if(U(t)){let n=e.getDate(),r=e.getMonth(),o=e.getFullYear();return`${x(n)}.${x(r+1)}.${o}`}else if(j(t)){let n=e.getHours(),r=e.getMinutes(),o=e.getSeconds();return`${x(n)}:${x(r)}:${x(o)}`}else return e.toUTCString()};var Yt=["error","warn","info","debug"],zt=e=>typeof e=="string"&&Yt.includes(e),Qt="error",L=()=>{},Zt="error",{loggingLevel:k=Zt}=en(),X=e=>{let t=k==="debug",n=t||k==="info",r=n||k==="warn",o=r||k==="error",s=n?l=>console.info(`[${e}] ${l}`):L,i=r?l=>console.warn(`[${e}] ${l}`):L,u=t?l=>console.debug(`[${e}] ${l}`):L;return{errorEnabled:o,error:o?l=>console.error(`[${e}] ${l}`):L}};function en(){return typeof loggingSettings<"u"?loggingSettings:{loggingLevel:De()}}function De(){let e=$("vuu-logging-level");return zt(e)?e:Qt}var tn=()=>`const loggingSettings = { loggingLevel: "${De()}"};`;var{debug:nn,debugEnabled:rn}=X("range-monitor"),q=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)rn&&nn(`<${this.source}> [${t}-${n}], ${(this.timestamp-r).toFixed(0)} ms elapsed`);else return 0}};var on=(e,t,n)=>{let r=document.createElement(e);return t&&(r.className=t),n&&(r.textContent=n),r},xe=(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}},sn=(e,t)=>{requestAnimationFrame(()=>{let n=xe(e,t);n&&n.focus()})};function Te(e){return Array.isArray(e)}function un(e){return!Array.isArray(e)}var c,B=class{constructor(){se(this,c,new Map)}addListener(t,n){let r=m(this,c).get(t);r?Te(r)?r.push(n):un(r)&&m(this,c).set(t,[r,n]):m(this,c).set(t,n)}removeListener(t,n){if(!m(this,c).has(t))return;let r=m(this,c).get(t),o=-1;if(r===n)m(this,c).delete(t);else if(Array.isArray(r)){for(let s=length;s-- >0;)if(r[s]===n){o=s;break}if(o<0)return;r.length===1?(r.length=0,m(this,c).delete(t)):r.splice(o,1)}}removeAllListeners(t){t&&m(this,c).has(t)?m(this,c).delete(t):t===void 0&&m(this,c).clear()}emit(t,...n){if(m(this,c)){let r=m(this,c).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)}invokeHandler(t,n){if(Te(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)}}};c=new WeakMap;var V=String.fromCharCode(8200),p=String.fromCharCode(8199),ln=-1,Fe={DIGIT:p,TWO_DIGITS:p+p,THREE_DIGITS:p+p+p,FULL_PADDING:[null,V+p,V+p+p,V+p+p+p,V+p+p+p+p]},an={DIGIT:"0",TWO_DIGITS:"00",THREE_DIGITS:"000",FULL_PADDING:[null,"0","00","000","0000"]};function pn(e,t=6){return(cn+e).slice(-t)}var cn=p+p+p+p+p+p+p+p+p,Y={Right:"right",Center:"center",Left:"left"};function Se(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===Fe&&e.charAt(r-1)==="0")return e=e.replace(/0+$/,""),Se(e,t,n);return e}function z(e,t=Y.Right,n=4,r,o){if(e===void 0||typeof e!="number"||isNaN(e))return"";let s,i,u,[a,l=""]=e.toString().split("."),f=l.length;return s=parseFloat(a).toLocaleString(),t===Y.Left&&o&&(s=pn(s)),n===ln||f===n?i=l:f>n?i=parseFloat("0."+l).toFixed(n).slice(2):(u=r?an:o&&t!==Y.Left?Fe:null)?f===0?i=u.FULL_PADDING[n]:i=Se(l,n,u):i=l,s+(i?"."+i:"")}var fn={},Q=e=>e==null?"":typeof e=="string"?e:e.toString(),we=e=>{let{type:t}=e,n="dd.mm.yyyy";return h(t)&&t.formatting&&W(t.formatting.pattern)&&(n=t.formatting.pattern),r=>typeof r=="number"&&r!==0?J(new Date(r),n):""},Ee=({align:e="right",type:t})=>{var n;if(t===void 0||typeof t=="string")return Q;{let{alignOnDecimals:r=!1,decimals:o,zeroPad:s=!1}=(n=t.formatting)!=null?n:fn;return i=>{if(typeof i=="string"&&(i.startsWith("\u03A3")||i.startsWith("[")))return i;let u=typeof i=="number"?i:typeof i=="string"?parseFloat(i):void 0;return z(u,e,o,s,r)}}},mn=e=>t=>{var n;return(n=e[t])!=null?n:""},gn=e=>{if(_(e))return we(e);let{serverDataType:t,type:n}=e;return h(n)&&G(n==null?void 0:n.renderer)?mn(n.renderer.map):t==="string"||t==="char"?r=>r:t==="double"?Ee(e):Q};var dn=()=>`hw-${Math.round(Math.random()*1e5)}`;function yn(e,t){return e?e.concat(t.name):[t.name]}var Cn={Enter:"Enter",Delete:"Delete"},hn={Home:"Home",End:"End",ArrowRight:"ArrowRight",ArrowLeft:"ArrowLeft",ArrowDown:"ArrowDown",ArrowUp:"ArrowUp",Tab:"Tab"},bn={F1:"F1",F2:"F2",F3:"F3",F4:"F4",F5:"F5",F6:"F6",F7:"F7",F8:"F8",F9:"F9",F10:"F10",F11:"F11",F12:"F12"},Dn={...Cn,...hn,...bn},xn=e=>e in Dn,Tn=e=>{if(xn(e.key))return!1;if(typeof e.which=="number"&&e.which>0)return!e.ctrlKey&&!e.metaKey&&!e.altKey&&e.which!==8},Fn=e=>e.key==='"'||e.key==="'";function Sn(e,t){if(!e){let n=new Error(t);throw n.name="Invariant Violation",n.framesToPop=1,n}}var{COUNT:wn}=g,Re=e=>typeof e=="object"&&e!==null,En=["boolean","number","string"],Rn=e=>En.includes(typeof e),Ln=e=>typeof e=="boolean"?"boolean":typeof e=="number"?"number":"string",kn=(e,t)=>{if(Re(t))return{attribute:`${e}+`,attributeValue:"",type:"json"};if(Rn(t))return{attribute:e,attributeValue:t,type:Ln(t)};throw Error(`unsupported type ${typeof t} in JSON`)},Z={name:"json",renderer:{name:"json"}},Vn=e=>{let t=[];t.push({name:"col 1",type:Z},{name:"col 2",type:Z});let n=[];return Le(n,e,t),[t,n]},Le=(e,t,n,r={value:0},o="$root",s=0)=>{let i=0,u=0;s===n.length-1&&n.push({name:`col ${n.length+1}`,hidden:!0,type:Z});let a=Object.entries(t);for(let l=0;l<a.length;l++,r.value+=1){let[f,C]=a[l],{attribute:b,attributeValue:P,type:Ve}=kn(f,C),Ae=Ve!=="json",Ke=Array(s).fill(""),te=`${o}|${f}`,ne=[r.value,r.value,Ae,!1,s,0,te,0,...Ke,b,P];if(e.push(ne),u+=1,Re(C)){let[re,oe]=Le(e,C,n,{value:r.value+1},te,s+1);ne[wn]=re,i+=re,u+=oe,r.value+=oe}else i+=1}return[i,u]};var An="ArrowUp",Kn="ArrowDown",Pn="ArrowLeft",Mn="ArrowRight",vn="Enter",On="Escape",_n="Home",Gn="End",In="PageUp",$n="PageDown",Nn=" ",Hn="Tab";var ee=class{constructor(t){this.keys=new Map,this.free=[],this.nextKeyValue=0,this.reset(t)}next(){return this.free.length>0?this.free.pop():this.nextKeyValue++}reset({from:t,to:n}){this.keys.forEach((o,s)=>{(s<t||s>=n)&&(this.free.push(o),this.keys.delete(s))});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 s=this.next();this.keys.set(o,s)}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
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var __accessCheck = (obj, member, msg) => {
|
|
20
|
+
if (!member.has(obj))
|
|
21
|
+
throw TypeError("Cannot " + msg);
|
|
22
|
+
};
|
|
23
|
+
var __privateGet = (obj, member, getter) => {
|
|
24
|
+
__accessCheck(obj, member, "read from private field");
|
|
25
|
+
return getter ? getter.call(obj) : member.get(obj);
|
|
26
|
+
};
|
|
27
|
+
var __privateAdd = (obj, member, value) => {
|
|
28
|
+
if (member.has(obj))
|
|
29
|
+
throw TypeError("Cannot add the same private member more than once");
|
|
30
|
+
member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
// src/index.ts
|
|
34
|
+
var src_exports = {};
|
|
35
|
+
__export(src_exports, {
|
|
36
|
+
AggregationType: () => AggregationType,
|
|
37
|
+
ArrowDown: () => ArrowDown,
|
|
38
|
+
ArrowLeft: () => ArrowLeft,
|
|
39
|
+
ArrowRight: () => ArrowRight,
|
|
40
|
+
ArrowUp: () => ArrowUp,
|
|
41
|
+
DOWN1: () => DOWN1,
|
|
42
|
+
DOWN2: () => DOWN2,
|
|
43
|
+
DataWindow: () => DataWindow,
|
|
44
|
+
End: () => End,
|
|
45
|
+
Enter: () => Enter,
|
|
46
|
+
Escape: () => Escape,
|
|
47
|
+
EventEmitter: () => EventEmitter,
|
|
48
|
+
Home: () => Home,
|
|
49
|
+
KeySet: () => KeySet,
|
|
50
|
+
MEASURES: () => MEASURES,
|
|
51
|
+
PageDown: () => PageDown,
|
|
52
|
+
PageUp: () => PageUp,
|
|
53
|
+
RangeMonitor: () => RangeMonitor,
|
|
54
|
+
RowSelected: () => RowSelected,
|
|
55
|
+
Space: () => Space2,
|
|
56
|
+
Tab: () => Tab,
|
|
57
|
+
UP1: () => UP1,
|
|
58
|
+
UP2: () => UP2,
|
|
59
|
+
WindowRange: () => WindowRange,
|
|
60
|
+
actualRowPositioning: () => actualRowPositioning,
|
|
61
|
+
addGroupColumn: () => addGroupColumn,
|
|
62
|
+
addSortColumn: () => addSortColumn,
|
|
63
|
+
applyFilterToColumns: () => applyFilterToColumns,
|
|
64
|
+
applyGroupByToColumns: () => applyGroupByToColumns,
|
|
65
|
+
applySort: () => applySort,
|
|
66
|
+
applySortToColumns: () => applySortToColumns,
|
|
67
|
+
buildColumnMap: () => buildColumnMap,
|
|
68
|
+
createEl: () => createEl,
|
|
69
|
+
dateFormatter: () => dateFormatter,
|
|
70
|
+
debounce: () => debounce,
|
|
71
|
+
defaultValueFormatter: () => defaultValueFormatter,
|
|
72
|
+
deselectItem: () => deselectItem,
|
|
73
|
+
expandSelection: () => expandSelection,
|
|
74
|
+
extractFilterForColumn: () => extractFilterForColumn,
|
|
75
|
+
extractGroupColumn: () => extractGroupColumn,
|
|
76
|
+
filterAsQuery: () => filterAsQuery,
|
|
77
|
+
findColumn: () => findColumn,
|
|
78
|
+
flattenColumnGroup: () => flattenColumnGroup,
|
|
79
|
+
focusFirstFocusableElement: () => focusFirstFocusableElement,
|
|
80
|
+
formatDate: () => formatDate,
|
|
81
|
+
fromServerDataType: () => fromServerDataType,
|
|
82
|
+
getCellConfigPanelRenderer: () => getCellConfigPanelRenderer,
|
|
83
|
+
getCellRenderer: () => getCellRenderer,
|
|
84
|
+
getColumnName: () => getColumnName,
|
|
85
|
+
getColumnStyle: () => getColumnStyle,
|
|
86
|
+
getColumnsInViewport: () => getColumnsInViewport,
|
|
87
|
+
getCookieValue: () => getCookieValue,
|
|
88
|
+
getFocusableElement: () => getFocusableElement,
|
|
89
|
+
getFullRange: () => getFullRange,
|
|
90
|
+
getGroupValueAndOffset: () => getGroupValueAndOffset,
|
|
91
|
+
getLoggingConfigForWorker: () => getLoggingConfigForWorker,
|
|
92
|
+
getMovingValueDirection: () => getMovingValueDirection,
|
|
93
|
+
getRegisteredCellRenderers: () => getRegisteredCellRenderers,
|
|
94
|
+
getRowRecord: () => getRowRecord,
|
|
95
|
+
getSelectionStatus: () => getSelectionStatus,
|
|
96
|
+
getTableHeadings: () => getTableHeadings,
|
|
97
|
+
getUniqueId: () => getUniqueId,
|
|
98
|
+
getUrlParameter: () => getUrlParameter,
|
|
99
|
+
getValueFormatter: () => getValueFormatter,
|
|
100
|
+
hasHeadings: () => hasHeadings,
|
|
101
|
+
hasUrlParameter: () => hasUrlParameter,
|
|
102
|
+
invariant: () => invariant,
|
|
103
|
+
isAndFilter: () => isAndFilter,
|
|
104
|
+
isCharacterKey: () => isCharacterKey,
|
|
105
|
+
isColumnTypeRenderer: () => isColumnTypeRenderer,
|
|
106
|
+
isDataLoading: () => isDataLoading,
|
|
107
|
+
isDateColumn: () => isDateColumn,
|
|
108
|
+
isDatePattern: () => isDatePattern,
|
|
109
|
+
isDateTimeColumn: () => isDateTimeColumn,
|
|
110
|
+
isDateTimePattern: () => isDateTimePattern,
|
|
111
|
+
isFilterClause: () => isFilterClause,
|
|
112
|
+
isFilteredColumn: () => isFilteredColumn,
|
|
113
|
+
isGroupColumn: () => isGroupColumn,
|
|
114
|
+
isGroupMenuItemDescriptor: () => isGroupMenuItemDescriptor,
|
|
115
|
+
isInFilter: () => isInFilter,
|
|
116
|
+
isJsonAttribute: () => isJsonAttribute,
|
|
117
|
+
isJsonColumn: () => isJsonColumn,
|
|
118
|
+
isJsonGroup: () => isJsonGroup,
|
|
119
|
+
isKeyedColumn: () => isKeyedColumn,
|
|
120
|
+
isMappedValueTypeRenderer: () => isMappedValueTypeRenderer,
|
|
121
|
+
isMultiClauseFilter: () => isMultiClauseFilter,
|
|
122
|
+
isMultiValueFilter: () => isMultiValueFilter,
|
|
123
|
+
isNamedFilter: () => isNamedFilter,
|
|
124
|
+
isNumericColumn: () => isNumericColumn,
|
|
125
|
+
isOrFilter: () => isOrFilter,
|
|
126
|
+
isPinned: () => isPinned,
|
|
127
|
+
isQuoteKey: () => isQuoteKey,
|
|
128
|
+
isResizing: () => isResizing,
|
|
129
|
+
isRowSelected: () => isRowSelected,
|
|
130
|
+
isSelected: () => isSelected,
|
|
131
|
+
isSimpleColumnType: () => isSimpleColumnType,
|
|
132
|
+
isSingleValueFilter: () => isSingleValueFilter,
|
|
133
|
+
isTextColumn: () => isTextColumn,
|
|
134
|
+
isTimeColumn: () => isTimeColumn,
|
|
135
|
+
isTimePattern: () => isTimePattern,
|
|
136
|
+
isTypeDescriptor: () => isTypeDescriptor,
|
|
137
|
+
isValidFilterClauseOp: () => isValidFilterClauseOp,
|
|
138
|
+
isValidNumber: () => isValidNumber,
|
|
139
|
+
itemToString: () => itemToString,
|
|
140
|
+
itemsChanged: () => itemsChanged,
|
|
141
|
+
itemsOrOrderChanged: () => itemsOrOrderChanged,
|
|
142
|
+
jsonToDataSourceRows: () => jsonToDataSourceRows,
|
|
143
|
+
lastWord: () => lastWord,
|
|
144
|
+
logger: () => logger,
|
|
145
|
+
mapSortCriteria: () => mapSortCriteria,
|
|
146
|
+
metadataKeys: () => metadataKeys,
|
|
147
|
+
moveItem: () => moveItem,
|
|
148
|
+
notHidden: () => notHidden,
|
|
149
|
+
numericFormatter: () => numericFormatter,
|
|
150
|
+
partition: () => partition,
|
|
151
|
+
projectUpdates: () => projectUpdates,
|
|
152
|
+
rangeNewItems: () => rangeNewItems,
|
|
153
|
+
registerComponent: () => registerComponent,
|
|
154
|
+
removeColumnFromFilter: () => removeColumnFromFilter,
|
|
155
|
+
resetRange: () => resetRange,
|
|
156
|
+
roundDecimal: () => roundDecimal,
|
|
157
|
+
selectItem: () => selectItem,
|
|
158
|
+
setAggregations: () => setAggregations,
|
|
159
|
+
setSortColumn: () => setSortColumn,
|
|
160
|
+
shallowEquals: () => shallowEquals,
|
|
161
|
+
sortPinnedColumns: () => sortPinnedColumns,
|
|
162
|
+
stripFilterFromColumns: () => stripFilterFromColumns,
|
|
163
|
+
throttle: () => throttle,
|
|
164
|
+
toColumnDescriptor: () => toColumnDescriptor,
|
|
165
|
+
toDataSourceColumns: () => toDataSourceColumns,
|
|
166
|
+
updateColumn: () => updateColumn,
|
|
167
|
+
uuid: () => uuid,
|
|
168
|
+
virtualRowPositioning: () => virtualRowPositioning,
|
|
169
|
+
visibleColumnAtIndex: () => visibleColumnAtIndex,
|
|
170
|
+
withinRange: () => withinRange
|
|
171
|
+
});
|
|
172
|
+
module.exports = __toCommonJS(src_exports);
|
|
173
|
+
|
|
174
|
+
// src/array-utils.ts
|
|
175
|
+
function partition(array, test, pass = [], fail = []) {
|
|
176
|
+
for (let i = 0, len = array.length; i < len; i++) {
|
|
177
|
+
(test(array[i], i) ? pass : fail).push(array[i]);
|
|
178
|
+
}
|
|
179
|
+
return [pass, fail];
|
|
180
|
+
}
|
|
181
|
+
function itemsChanged(currentItems, newItems, identityProperty) {
|
|
182
|
+
if (currentItems.length !== newItems.length) {
|
|
183
|
+
return true;
|
|
184
|
+
}
|
|
185
|
+
if (identityProperty === void 0) {
|
|
186
|
+
return !currentItems.every((item) => newItems.includes(item));
|
|
187
|
+
} else {
|
|
188
|
+
return currentItems.some(
|
|
189
|
+
(currentItem) => newItems.findIndex(
|
|
190
|
+
(newItem) => newItem[identityProperty] === currentItem[identityProperty]
|
|
191
|
+
) === -1
|
|
192
|
+
);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
function itemsOrOrderChanged(currentItems, newItems, identityProperty) {
|
|
196
|
+
if (currentItems.length !== newItems.length) {
|
|
197
|
+
return true;
|
|
198
|
+
}
|
|
199
|
+
if (identityProperty === void 0) {
|
|
200
|
+
return currentItems.some((item, index) => newItems[index] !== item);
|
|
201
|
+
} else {
|
|
202
|
+
return currentItems.some(
|
|
203
|
+
(currentItem, index) => newItems[index][identityProperty] !== currentItem[identityProperty]
|
|
204
|
+
);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
var moveItem = (items, item, moveTo) => {
|
|
208
|
+
const fromIndex = items.indexOf(item);
|
|
209
|
+
if (fromIndex === moveTo) {
|
|
210
|
+
return items;
|
|
211
|
+
}
|
|
212
|
+
const newItems = items.slice();
|
|
213
|
+
if (fromIndex === -1) {
|
|
214
|
+
throw Error("moveItem, item to be moved not found");
|
|
215
|
+
}
|
|
216
|
+
newItems.splice(fromIndex, 1);
|
|
217
|
+
if (moveTo === -1) {
|
|
218
|
+
newItems.push(item);
|
|
219
|
+
} else {
|
|
220
|
+
const offset = moveTo > fromIndex ? 0 : 0;
|
|
221
|
+
newItems.splice(moveTo + offset, 0, item);
|
|
222
|
+
}
|
|
223
|
+
return newItems;
|
|
224
|
+
};
|
|
225
|
+
|
|
226
|
+
// src/filter-utils.ts
|
|
227
|
+
var singleValueFilterOps = /* @__PURE__ */ new Set([
|
|
228
|
+
"=",
|
|
229
|
+
"!=",
|
|
230
|
+
">",
|
|
231
|
+
">=",
|
|
232
|
+
"<",
|
|
233
|
+
"<=",
|
|
234
|
+
"starts",
|
|
235
|
+
"ends"
|
|
236
|
+
]);
|
|
237
|
+
var isValidFilterClauseOp = (op) => op === "in" || singleValueFilterOps.has(op);
|
|
238
|
+
var isNamedFilter = (f) => f !== void 0 && f.name !== void 0;
|
|
239
|
+
var isSingleValueFilter = (f) => f !== void 0 && singleValueFilterOps.has(f.op);
|
|
240
|
+
var isFilterClause = (f) => f !== void 0 && (isSingleValueFilter(f) || isMultiValueFilter(f));
|
|
241
|
+
var isMultiValueFilter = (f) => f !== void 0 && f.op === "in";
|
|
242
|
+
var isInFilter = (f) => f.op === "in";
|
|
243
|
+
var isAndFilter = (f) => f.op === "and";
|
|
244
|
+
var isOrFilter = (f) => f.op === "or";
|
|
245
|
+
function isMultiClauseFilter(f) {
|
|
246
|
+
return f !== void 0 && (f.op === "and" || f.op === "or");
|
|
247
|
+
}
|
|
248
|
+
var filterValue = (value) => typeof value === "string" ? `"${value}"` : value;
|
|
249
|
+
var filterAsQuery = (f) => {
|
|
250
|
+
if (isMultiClauseFilter(f)) {
|
|
251
|
+
return f.filters.map((filter) => filterAsQuery(filter)).join(` ${f.op} `);
|
|
252
|
+
} else if (isMultiValueFilter(f)) {
|
|
253
|
+
return `${f.column} ${f.op} [${f.values.join(",")}]`;
|
|
254
|
+
} else {
|
|
255
|
+
return `${f.column} ${f.op} ${filterValue(f.value)}`;
|
|
256
|
+
}
|
|
257
|
+
};
|
|
258
|
+
var removeColumnFromFilter = (column, filter) => {
|
|
259
|
+
if (isMultiClauseFilter(filter)) {
|
|
260
|
+
const [clause1, clause2] = filter.filters;
|
|
261
|
+
if (clause1.column === column.name) {
|
|
262
|
+
return [clause2, filterAsQuery(clause2)];
|
|
263
|
+
}
|
|
264
|
+
if (clause2.column === column.name) {
|
|
265
|
+
return [clause1, filterAsQuery(clause1)];
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
return [void 0, ""];
|
|
269
|
+
};
|
|
270
|
+
|
|
271
|
+
// src/column-utils.ts
|
|
272
|
+
var SORT_ASC = "asc";
|
|
273
|
+
var NO_HEADINGS = [];
|
|
274
|
+
var AggregationType = {
|
|
275
|
+
Average: 2,
|
|
276
|
+
Count: 3,
|
|
277
|
+
Distinct: 6,
|
|
278
|
+
Sum: 1,
|
|
279
|
+
High: 4,
|
|
280
|
+
Low: 5
|
|
281
|
+
};
|
|
282
|
+
function mapSortCriteria(sortCriteria, columnMap, metadataOffset = 0) {
|
|
283
|
+
return sortCriteria.map((s) => {
|
|
284
|
+
if (typeof s === "string") {
|
|
285
|
+
return [columnMap[s] + metadataOffset, "asc"];
|
|
286
|
+
} else if (Array.isArray(s)) {
|
|
287
|
+
const [columnName, sortDir] = s;
|
|
288
|
+
return [columnMap[columnName] + metadataOffset, sortDir || SORT_ASC];
|
|
289
|
+
} else {
|
|
290
|
+
throw Error("columnUtils.mapSortCriteria invalid input");
|
|
291
|
+
}
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
var isKeyedColumn = (column) => {
|
|
295
|
+
return typeof column.key === "number";
|
|
296
|
+
};
|
|
297
|
+
var fromServerDataType = (serverDataType) => {
|
|
298
|
+
switch (serverDataType) {
|
|
299
|
+
case "double":
|
|
300
|
+
case "int":
|
|
301
|
+
case "long":
|
|
302
|
+
return "number";
|
|
303
|
+
case "boolean":
|
|
304
|
+
return "boolean";
|
|
305
|
+
default:
|
|
306
|
+
return "string";
|
|
307
|
+
}
|
|
308
|
+
};
|
|
309
|
+
var isNumericColumn = ({ serverDataType, type }) => {
|
|
310
|
+
if (serverDataType === "int" || serverDataType === "long" || serverDataType === "double") {
|
|
311
|
+
return true;
|
|
312
|
+
}
|
|
313
|
+
if (typeof type === "string") {
|
|
314
|
+
return type === "number";
|
|
315
|
+
}
|
|
316
|
+
if (typeof (type == null ? void 0 : type.name) === "string") {
|
|
317
|
+
return (type == null ? void 0 : type.name) === "number";
|
|
318
|
+
}
|
|
319
|
+
return false;
|
|
320
|
+
};
|
|
321
|
+
var isDateColumn = ({ type }) => (isTypeDescriptor(type) ? type.name : type) === "date";
|
|
322
|
+
var isTimeColumn = ({ type }) => (isTypeDescriptor(type) ? type.name : type) === "time";
|
|
323
|
+
var isDateTimeColumn = (column) => isDateColumn(column) || isTimeColumn(column);
|
|
324
|
+
var notHidden = (column) => column.hidden !== true;
|
|
325
|
+
var isPinned = (column) => typeof column.pin === "string";
|
|
326
|
+
var hasHeadings = (column) => Array.isArray(column.heading) && column.heading.length > 0;
|
|
327
|
+
var isResizing = (column) => column.resizing;
|
|
328
|
+
var isTextColumn = ({ serverDataType }) => serverDataType === void 0 ? false : serverDataType === "char" || serverDataType === "string";
|
|
329
|
+
var toColumnDescriptor = (name) => ({
|
|
330
|
+
name
|
|
331
|
+
});
|
|
332
|
+
var isSimpleColumnType = (value) => typeof value === "string" && ["string", "number", "boolean", "json", "date", "time", "checkbox"].includes(
|
|
333
|
+
value
|
|
334
|
+
);
|
|
335
|
+
var isTypeDescriptor = (type) => typeof type !== "undefined" && typeof type !== "string";
|
|
336
|
+
var EMPTY_COLUMN_MAP = {};
|
|
337
|
+
var isColumnTypeRenderer = (renderer) => typeof (renderer == null ? void 0 : renderer.name) !== "undefined";
|
|
338
|
+
var isMappedValueTypeRenderer = (renderer) => renderer !== void 0 && typeof (renderer == null ? void 0 : renderer.map) !== "undefined";
|
|
339
|
+
function buildColumnMap(columns) {
|
|
340
|
+
const start = metadataKeys.count;
|
|
341
|
+
if (columns) {
|
|
342
|
+
return columns.reduce((map, column, i) => {
|
|
343
|
+
if (typeof column === "string") {
|
|
344
|
+
map[column] = start + i;
|
|
345
|
+
} else if (typeof column.key === "number") {
|
|
346
|
+
map[column.name] = column.key;
|
|
347
|
+
} else {
|
|
348
|
+
map[column.name] = start + i;
|
|
349
|
+
}
|
|
350
|
+
return map;
|
|
351
|
+
}, {});
|
|
352
|
+
} else {
|
|
353
|
+
return EMPTY_COLUMN_MAP;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
function projectUpdates(updates) {
|
|
357
|
+
const results = [];
|
|
358
|
+
const metadataOffset = metadataKeys.count - 2;
|
|
359
|
+
for (let i = 0; i < updates.length; i += 3) {
|
|
360
|
+
results[i] = updates[i] + metadataOffset;
|
|
361
|
+
results[i + 1] = updates[i + 1];
|
|
362
|
+
results[i + 2] = updates[i + 2];
|
|
363
|
+
}
|
|
364
|
+
return results;
|
|
365
|
+
}
|
|
366
|
+
var metadataKeys = {
|
|
367
|
+
IDX: 0,
|
|
368
|
+
RENDER_IDX: 1,
|
|
369
|
+
IS_LEAF: 2,
|
|
370
|
+
IS_EXPANDED: 3,
|
|
371
|
+
DEPTH: 4,
|
|
372
|
+
COUNT: 5,
|
|
373
|
+
KEY: 6,
|
|
374
|
+
SELECTED: 7,
|
|
375
|
+
count: 8,
|
|
376
|
+
// TODO following only used in datamodel
|
|
377
|
+
PARENT_IDX: "parent_idx",
|
|
378
|
+
IDX_POINTER: "idx_pointer",
|
|
379
|
+
FILTER_COUNT: "filter_count",
|
|
380
|
+
NEXT_FILTER_IDX: "next_filter_idx"
|
|
381
|
+
};
|
|
382
|
+
var insertColumn = (columns, column) => {
|
|
383
|
+
const { originalIdx } = column;
|
|
384
|
+
if (typeof originalIdx === "number") {
|
|
385
|
+
for (let i = 0; i < columns.length; i++) {
|
|
386
|
+
const { originalIdx: colIdx = -1 } = columns[i];
|
|
387
|
+
if (colIdx > originalIdx) {
|
|
388
|
+
columns.splice(i, 0, column);
|
|
389
|
+
return columns;
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
columns.push(column);
|
|
394
|
+
return columns;
|
|
395
|
+
};
|
|
396
|
+
var flattenColumnGroup = (columns) => {
|
|
397
|
+
var _a;
|
|
398
|
+
if ((_a = columns[0]) == null ? void 0 : _a.isGroup) {
|
|
399
|
+
const [groupColumn, ...nonGroupedColumns] = columns;
|
|
400
|
+
groupColumn.columns.forEach((groupColumn2) => {
|
|
401
|
+
insertColumn(nonGroupedColumns, groupColumn2);
|
|
402
|
+
});
|
|
403
|
+
return nonGroupedColumns;
|
|
404
|
+
} else {
|
|
405
|
+
return columns;
|
|
406
|
+
}
|
|
407
|
+
};
|
|
408
|
+
function extractGroupColumn(columns, groupBy, confirmed = true) {
|
|
409
|
+
if (groupBy && groupBy.length > 0) {
|
|
410
|
+
const flattenedColumns = flattenColumnGroup(columns);
|
|
411
|
+
const [groupedColumns, rest] = flattenedColumns.reduce(
|
|
412
|
+
(result, column, i) => {
|
|
413
|
+
const [g, r] = result;
|
|
414
|
+
if (groupBy.includes(column.name)) {
|
|
415
|
+
g.push({
|
|
416
|
+
...column,
|
|
417
|
+
originalIdx: i
|
|
418
|
+
});
|
|
419
|
+
} else {
|
|
420
|
+
r.push(column);
|
|
421
|
+
}
|
|
422
|
+
return result;
|
|
423
|
+
},
|
|
424
|
+
[[], []]
|
|
425
|
+
);
|
|
426
|
+
if (groupedColumns.length !== groupBy.length) {
|
|
427
|
+
throw Error(
|
|
428
|
+
`extractGroupColumn: no column definition found for all groupBy cols ${JSON.stringify(
|
|
429
|
+
groupBy
|
|
430
|
+
)} `
|
|
431
|
+
);
|
|
432
|
+
}
|
|
433
|
+
const groupCount = groupBy.length;
|
|
434
|
+
const groupCols = groupBy.map((name, idx) => {
|
|
435
|
+
const column = groupedColumns.find(
|
|
436
|
+
(col) => col.name === name
|
|
437
|
+
);
|
|
438
|
+
return {
|
|
439
|
+
...column,
|
|
440
|
+
groupLevel: groupCount - idx
|
|
441
|
+
};
|
|
442
|
+
});
|
|
443
|
+
const groupCol = {
|
|
444
|
+
key: -1,
|
|
445
|
+
name: "group-col",
|
|
446
|
+
heading: ["group-col"],
|
|
447
|
+
isGroup: true,
|
|
448
|
+
columns: groupCols,
|
|
449
|
+
groupConfirmed: confirmed,
|
|
450
|
+
width: groupCols.map((c) => c.width).reduce((a, b) => a + b) + 100
|
|
451
|
+
};
|
|
452
|
+
return [groupCol, rest];
|
|
453
|
+
}
|
|
454
|
+
return [null, flattenColumnGroup(columns)];
|
|
455
|
+
}
|
|
456
|
+
var isGroupColumn = (column) => column.isGroup === true;
|
|
457
|
+
var isJsonAttribute = (value) => typeof value === "string" && value.endsWith("+");
|
|
458
|
+
var isJsonGroup = (column, row) => {
|
|
459
|
+
var _a;
|
|
460
|
+
return ((_a = column.type) == null ? void 0 : _a.name) === "json" && isJsonAttribute(row[column.key]);
|
|
461
|
+
};
|
|
462
|
+
var isJsonColumn = (column) => {
|
|
463
|
+
var _a;
|
|
464
|
+
return ((_a = column.type) == null ? void 0 : _a.name) === "json";
|
|
465
|
+
};
|
|
466
|
+
var sortPinnedColumns = (columns) => {
|
|
467
|
+
const leftPinnedColumns = [];
|
|
468
|
+
const rightPinnedColumns = [];
|
|
469
|
+
const restColumns = [];
|
|
470
|
+
let pinnedWidthLeft = 4;
|
|
471
|
+
for (const column of columns) {
|
|
472
|
+
switch (column.pin) {
|
|
473
|
+
case "left":
|
|
474
|
+
{
|
|
475
|
+
leftPinnedColumns.push({
|
|
476
|
+
...column,
|
|
477
|
+
endPin: void 0,
|
|
478
|
+
pinnedOffset: pinnedWidthLeft
|
|
479
|
+
});
|
|
480
|
+
pinnedWidthLeft += column.width;
|
|
481
|
+
}
|
|
482
|
+
break;
|
|
483
|
+
case "right":
|
|
484
|
+
rightPinnedColumns.unshift(column);
|
|
485
|
+
break;
|
|
486
|
+
default:
|
|
487
|
+
restColumns.push(column);
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
if (leftPinnedColumns.length) {
|
|
491
|
+
leftPinnedColumns.push({
|
|
492
|
+
...leftPinnedColumns.pop(),
|
|
493
|
+
endPin: true
|
|
494
|
+
});
|
|
495
|
+
}
|
|
496
|
+
const allColumns = leftPinnedColumns.length ? leftPinnedColumns.concat(restColumns) : restColumns;
|
|
497
|
+
if (rightPinnedColumns.length) {
|
|
498
|
+
const measuredRightPinnedColumns = [];
|
|
499
|
+
let pinnedWidthRight = 0;
|
|
500
|
+
for (const column of rightPinnedColumns) {
|
|
501
|
+
measuredRightPinnedColumns.unshift({
|
|
502
|
+
...column,
|
|
503
|
+
pinnedOffset: pinnedWidthRight
|
|
504
|
+
});
|
|
505
|
+
pinnedWidthRight += column.width;
|
|
506
|
+
}
|
|
507
|
+
measuredRightPinnedColumns[0].endPin = true;
|
|
508
|
+
return allColumns.concat(measuredRightPinnedColumns);
|
|
509
|
+
} else {
|
|
510
|
+
return allColumns;
|
|
511
|
+
}
|
|
512
|
+
};
|
|
513
|
+
var getTableHeadings = (columns) => {
|
|
514
|
+
if (columns.some(hasHeadings)) {
|
|
515
|
+
const maxHeadingDepth = columns.reduce(
|
|
516
|
+
(max, { heading: heading2 }) => {
|
|
517
|
+
var _a;
|
|
518
|
+
return Math.max(max, (_a = heading2 == null ? void 0 : heading2.length) != null ? _a : 0);
|
|
519
|
+
},
|
|
520
|
+
0
|
|
521
|
+
);
|
|
522
|
+
let heading = void 0;
|
|
523
|
+
const tableHeadings = [];
|
|
524
|
+
let tableHeadingsRow;
|
|
525
|
+
for (let level = 0; level < maxHeadingDepth; level++) {
|
|
526
|
+
tableHeadingsRow = [];
|
|
527
|
+
columns.forEach(({ heading: columnHeading = NO_HEADINGS, width }) => {
|
|
528
|
+
var _a;
|
|
529
|
+
const label = (_a = columnHeading[level]) != null ? _a : "";
|
|
530
|
+
if (heading && heading.label === label) {
|
|
531
|
+
heading.width += width;
|
|
532
|
+
} else {
|
|
533
|
+
heading = { label, width };
|
|
534
|
+
tableHeadingsRow.push(heading);
|
|
535
|
+
}
|
|
536
|
+
});
|
|
537
|
+
tableHeadings.push(tableHeadingsRow);
|
|
538
|
+
}
|
|
539
|
+
console.log({ maxHeadingDepth, tableHeadings });
|
|
540
|
+
return tableHeadings;
|
|
541
|
+
}
|
|
542
|
+
return NO_HEADINGS;
|
|
543
|
+
};
|
|
544
|
+
var getColumnStyle = ({
|
|
545
|
+
pin,
|
|
546
|
+
pinnedOffset = pin === "left" ? 0 : 4,
|
|
547
|
+
width
|
|
548
|
+
}) => pin === "left" ? {
|
|
549
|
+
left: pinnedOffset,
|
|
550
|
+
width,
|
|
551
|
+
"--pin-width": `${pinnedOffset + width - 5}px`
|
|
552
|
+
} : pin === "right" ? {
|
|
553
|
+
right: pinnedOffset,
|
|
554
|
+
width,
|
|
555
|
+
"--pin-width": `${pinnedOffset + width}px`
|
|
556
|
+
} : { width };
|
|
557
|
+
var setAggregations = (aggregations, column, aggType) => {
|
|
558
|
+
return aggregations.filter((agg) => agg.column !== column.name).concat({ column: column.name, aggType });
|
|
559
|
+
};
|
|
560
|
+
var extractFilterForColumn = (filter, columnName) => {
|
|
561
|
+
if (isMultiClauseFilter(filter)) {
|
|
562
|
+
return collectFiltersForColumn(filter, columnName);
|
|
563
|
+
}
|
|
564
|
+
if (isFilterClause(filter)) {
|
|
565
|
+
return filter.column === columnName ? filter : void 0;
|
|
566
|
+
}
|
|
567
|
+
return void 0;
|
|
568
|
+
};
|
|
569
|
+
var collectFiltersForColumn = (filter, columnName) => {
|
|
570
|
+
const { filters, op } = filter;
|
|
571
|
+
const results = [];
|
|
572
|
+
filters.forEach((filter2) => {
|
|
573
|
+
const ffc = extractFilterForColumn(filter2, columnName);
|
|
574
|
+
if (ffc) {
|
|
575
|
+
results.push(ffc);
|
|
576
|
+
}
|
|
577
|
+
});
|
|
578
|
+
if (results.length === 0) {
|
|
579
|
+
return void 0;
|
|
580
|
+
} else if (results.length === 1) {
|
|
581
|
+
return results[0];
|
|
582
|
+
}
|
|
583
|
+
return {
|
|
584
|
+
op,
|
|
585
|
+
filters: results
|
|
586
|
+
};
|
|
587
|
+
};
|
|
588
|
+
var applyGroupByToColumns = (columns, groupBy, confirmed = true) => {
|
|
589
|
+
var _a;
|
|
590
|
+
if (groupBy.length) {
|
|
591
|
+
const [groupColumn, nonGroupedColumns] = extractGroupColumn(
|
|
592
|
+
columns,
|
|
593
|
+
groupBy,
|
|
594
|
+
confirmed
|
|
595
|
+
);
|
|
596
|
+
if (groupColumn) {
|
|
597
|
+
return [groupColumn].concat(nonGroupedColumns);
|
|
598
|
+
}
|
|
599
|
+
} else if ((_a = columns[0]) == null ? void 0 : _a.isGroup) {
|
|
600
|
+
return flattenColumnGroup(columns);
|
|
601
|
+
}
|
|
602
|
+
return columns;
|
|
603
|
+
};
|
|
604
|
+
var applySortToColumns = (colunms, sort) => colunms.map((column) => {
|
|
605
|
+
const sorted = getSortType(column, sort);
|
|
606
|
+
if (sorted !== void 0) {
|
|
607
|
+
return {
|
|
608
|
+
...column,
|
|
609
|
+
sorted
|
|
610
|
+
};
|
|
611
|
+
} else if (column.sorted) {
|
|
612
|
+
return {
|
|
613
|
+
...column,
|
|
614
|
+
sorted: void 0
|
|
615
|
+
};
|
|
616
|
+
} else {
|
|
617
|
+
return column;
|
|
618
|
+
}
|
|
619
|
+
});
|
|
620
|
+
var applyFilterToColumns = (columns, { filterStruct }) => columns.map((column) => {
|
|
621
|
+
const filter = extractFilterForColumn(filterStruct, column.name);
|
|
622
|
+
if (filter !== void 0) {
|
|
623
|
+
return {
|
|
624
|
+
...column,
|
|
625
|
+
filter
|
|
626
|
+
};
|
|
627
|
+
} else if (column.filter) {
|
|
628
|
+
return {
|
|
629
|
+
...column,
|
|
630
|
+
filter: void 0
|
|
631
|
+
};
|
|
632
|
+
} else {
|
|
633
|
+
return column;
|
|
634
|
+
}
|
|
635
|
+
});
|
|
636
|
+
var isFilteredColumn = (column) => column.filter !== void 0;
|
|
637
|
+
var stripFilterFromColumns = (columns) => columns.map((col) => {
|
|
638
|
+
const { filter, ...rest } = col;
|
|
639
|
+
return filter ? rest : col;
|
|
640
|
+
});
|
|
641
|
+
var getSortType = (column, { sortDefs }) => {
|
|
642
|
+
const sortDef = sortDefs.find((sortCol) => sortCol.column === column.name);
|
|
643
|
+
if (sortDef) {
|
|
644
|
+
return sortDefs.length > 1 ? (sortDefs.indexOf(sortDef) + 1) * (sortDef.sortType === "A" ? 1 : -1) : sortDef.sortType;
|
|
645
|
+
}
|
|
646
|
+
};
|
|
647
|
+
var getColumnName = (name) => {
|
|
648
|
+
const pos = name.indexOf(":");
|
|
649
|
+
if (pos === -1) {
|
|
650
|
+
return name;
|
|
651
|
+
} else {
|
|
652
|
+
return name.slice(0, pos);
|
|
653
|
+
}
|
|
654
|
+
};
|
|
655
|
+
var findColumn = (columns, columnName) => {
|
|
656
|
+
const column = columns.find((col) => col.name === columnName);
|
|
657
|
+
if (column) {
|
|
658
|
+
return column;
|
|
659
|
+
} else {
|
|
660
|
+
const groupColumn = columns.find(
|
|
661
|
+
(col) => col.isGroup
|
|
662
|
+
);
|
|
663
|
+
if (groupColumn) {
|
|
664
|
+
return findColumn(groupColumn.columns, columnName);
|
|
665
|
+
}
|
|
666
|
+
}
|
|
667
|
+
};
|
|
668
|
+
function updateColumn(columns, column, options) {
|
|
669
|
+
const targetColumn = typeof column === "string" ? columns.find((col) => col.name === column) : column;
|
|
670
|
+
if (targetColumn) {
|
|
671
|
+
const replacementColumn = options ? { ...targetColumn, ...options } : targetColumn;
|
|
672
|
+
return columns.map(
|
|
673
|
+
(col) => col.name === replacementColumn.name ? replacementColumn : col
|
|
674
|
+
);
|
|
675
|
+
} else {
|
|
676
|
+
throw Error("column-utils.replaceColun, column not found");
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
var toDataSourceColumns = (column) => column.expression ? `${column.name}:${column.serverDataType}:${column.expression}` : column.name;
|
|
680
|
+
var getRowRecord = (row, columnMap) => {
|
|
681
|
+
return Object.entries(columnMap).reduce(
|
|
682
|
+
(map, [colName, key]) => {
|
|
683
|
+
map[colName] = row[key];
|
|
684
|
+
return map;
|
|
685
|
+
},
|
|
686
|
+
{}
|
|
687
|
+
);
|
|
688
|
+
};
|
|
689
|
+
var isDataLoading = (columns) => {
|
|
690
|
+
return isGroupColumn(columns[0]) && columns[0].groupConfirmed === false;
|
|
691
|
+
};
|
|
692
|
+
var getColumnsInViewport = (columns, vpStart, vpEnd) => {
|
|
693
|
+
var _a;
|
|
694
|
+
const visibleColumns = [];
|
|
695
|
+
let preSpan = 0;
|
|
696
|
+
for (let offset = 0, i = 0; i < columns.length; i++) {
|
|
697
|
+
const column = columns[i];
|
|
698
|
+
if (column.hidden) {
|
|
699
|
+
continue;
|
|
700
|
+
} else if (offset + column.width < vpStart) {
|
|
701
|
+
if (column.pin === "left") {
|
|
702
|
+
visibleColumns.push(column);
|
|
703
|
+
} else if (offset + column.width + ((_a = columns[i + 1]) == null ? void 0 : _a.width) > vpStart) {
|
|
704
|
+
visibleColumns.push(column);
|
|
705
|
+
} else {
|
|
706
|
+
preSpan += column.width;
|
|
707
|
+
}
|
|
708
|
+
} else if (offset > vpEnd) {
|
|
709
|
+
visibleColumns.push(column);
|
|
710
|
+
break;
|
|
711
|
+
} else {
|
|
712
|
+
visibleColumns.push(column);
|
|
713
|
+
}
|
|
714
|
+
offset += column.width;
|
|
715
|
+
}
|
|
716
|
+
return [visibleColumns, preSpan];
|
|
717
|
+
};
|
|
718
|
+
var isNotHidden = (column) => column.hidden !== true;
|
|
719
|
+
var visibleColumnAtIndex = (columns, index) => {
|
|
720
|
+
if (columns.every(isNotHidden)) {
|
|
721
|
+
return columns[index];
|
|
722
|
+
} else {
|
|
723
|
+
return columns.filter(isNotHidden).at(index);
|
|
724
|
+
}
|
|
725
|
+
};
|
|
726
|
+
var { DEPTH, IS_LEAF } = metadataKeys;
|
|
727
|
+
var getGroupValueAndOffset = (columns, row) => {
|
|
728
|
+
const { [DEPTH]: depth, [IS_LEAF]: isLeaf } = row;
|
|
729
|
+
if (isLeaf || depth > columns.length) {
|
|
730
|
+
return [null, depth === null ? 0 : Math.max(0, depth - 1)];
|
|
731
|
+
} else if (depth === 0) {
|
|
732
|
+
return ["$root", 0];
|
|
733
|
+
} else {
|
|
734
|
+
const { key, valueFormatter } = columns[depth - 1];
|
|
735
|
+
const value = valueFormatter(row[key]);
|
|
736
|
+
return [value, depth - 1];
|
|
737
|
+
}
|
|
738
|
+
};
|
|
739
|
+
|
|
740
|
+
// src/cookie-utils.ts
|
|
741
|
+
var getCookieValue = (name) => {
|
|
742
|
+
var _a, _b;
|
|
743
|
+
if (((_a = globalThis.document) == null ? void 0 : _a.cookie) !== void 0) {
|
|
744
|
+
return (_b = globalThis.document.cookie.split("; ").find((row) => row.startsWith(`${name}=`))) == null ? void 0 : _b.split("=")[1];
|
|
745
|
+
}
|
|
746
|
+
};
|
|
747
|
+
|
|
748
|
+
// src/component-registry.ts
|
|
749
|
+
var cellRenderersMap = /* @__PURE__ */ new Map();
|
|
750
|
+
var cellConfigPanelsMap = /* @__PURE__ */ new Map();
|
|
751
|
+
var optionsMap = /* @__PURE__ */ new Map();
|
|
752
|
+
var isTypeCompatible = (rendererType, serverDataType) => {
|
|
753
|
+
if (rendererType === void 0) {
|
|
754
|
+
return true;
|
|
755
|
+
} else if (Array.isArray(rendererType)) {
|
|
756
|
+
return rendererType.includes(serverDataType);
|
|
757
|
+
} else {
|
|
758
|
+
return rendererType === serverDataType;
|
|
759
|
+
}
|
|
760
|
+
};
|
|
761
|
+
var isCellRenderer = (type, component) => type === "cell-renderer";
|
|
762
|
+
var isCellConfigPanel = (type, component) => type === "cell-config-panel";
|
|
763
|
+
function registerComponent(componentName, component, type = "cell-renderer", options) {
|
|
764
|
+
if (isCellRenderer(type, component)) {
|
|
765
|
+
cellRenderersMap.set(componentName, component);
|
|
766
|
+
} else if (isCellConfigPanel(type, component)) {
|
|
767
|
+
cellConfigPanelsMap.set(componentName, component);
|
|
768
|
+
}
|
|
769
|
+
if (options) {
|
|
770
|
+
optionsMap.set(componentName, options);
|
|
771
|
+
}
|
|
772
|
+
}
|
|
773
|
+
var getRegisteredCellRenderers = (serverDataType) => {
|
|
774
|
+
const rendererNames = Array.from(cellRenderersMap.keys());
|
|
775
|
+
const allRenderers = rendererNames.map((name) => ({
|
|
776
|
+
name,
|
|
777
|
+
...optionsMap.get(name)
|
|
778
|
+
}));
|
|
779
|
+
if (serverDataType) {
|
|
780
|
+
return allRenderers.filter(
|
|
781
|
+
(renderer) => isTypeCompatible(renderer.serverDataType, serverDataType)
|
|
782
|
+
);
|
|
783
|
+
} else {
|
|
784
|
+
return allRenderers;
|
|
785
|
+
}
|
|
786
|
+
};
|
|
787
|
+
function getCellRenderer(renderer) {
|
|
788
|
+
if (renderer && "name" in renderer) {
|
|
789
|
+
return cellRenderersMap.get(renderer.name);
|
|
790
|
+
}
|
|
791
|
+
}
|
|
792
|
+
function getCellConfigPanelRenderer(name) {
|
|
793
|
+
return cellConfigPanelsMap.get(name);
|
|
794
|
+
}
|
|
795
|
+
|
|
796
|
+
// src/range-utils.ts
|
|
797
|
+
function getFullRange({ from, to }, bufferSize = 0, rowCount = Number.MAX_SAFE_INTEGER) {
|
|
798
|
+
if (bufferSize === 0) {
|
|
799
|
+
if (rowCount < from) {
|
|
800
|
+
return { from: 0, to: 0 };
|
|
801
|
+
} else {
|
|
802
|
+
return { from, to: Math.min(to, rowCount) };
|
|
803
|
+
}
|
|
804
|
+
} else if (from === 0) {
|
|
805
|
+
return { from, to: Math.min(to + bufferSize, rowCount) };
|
|
806
|
+
} else {
|
|
807
|
+
const rangeSize = to - from;
|
|
808
|
+
const buff = Math.round(bufferSize / 2);
|
|
809
|
+
const shortfallBefore = from - buff < 0;
|
|
810
|
+
const shortFallAfter = rowCount - (to + buff) < 0;
|
|
811
|
+
if (shortfallBefore && shortFallAfter) {
|
|
812
|
+
return { from: 0, to: rowCount };
|
|
813
|
+
} else if (shortfallBefore) {
|
|
814
|
+
return { from: 0, to: rangeSize + bufferSize };
|
|
815
|
+
} else if (shortFallAfter) {
|
|
816
|
+
return {
|
|
817
|
+
from: Math.max(0, rowCount - (rangeSize + bufferSize)),
|
|
818
|
+
to: rowCount
|
|
819
|
+
};
|
|
820
|
+
} else {
|
|
821
|
+
return { from: from - buff, to: to + buff };
|
|
822
|
+
}
|
|
823
|
+
}
|
|
824
|
+
}
|
|
825
|
+
function resetRange({ from, to, bufferSize = 0 }) {
|
|
826
|
+
return {
|
|
827
|
+
from: 0,
|
|
828
|
+
to: to - from,
|
|
829
|
+
bufferSize,
|
|
830
|
+
reset: true
|
|
831
|
+
};
|
|
832
|
+
}
|
|
833
|
+
var withinRange = (value, { from, to }) => value >= from && value < to;
|
|
834
|
+
var rangeNewItems = ({ from: from1, to: to1 }, newRange) => {
|
|
835
|
+
const { from: from2, to: to2 } = newRange;
|
|
836
|
+
const noOverlap = from2 >= to1 || to2 <= from1;
|
|
837
|
+
const newFullySubsumesOld = from2 < from1 && to2 > to1;
|
|
838
|
+
return noOverlap || newFullySubsumesOld ? newRange : to2 > to1 ? { from: to1, to: to2 } : { from: from2, to: from1 };
|
|
839
|
+
};
|
|
840
|
+
var WindowRange = class {
|
|
841
|
+
constructor(from, to) {
|
|
842
|
+
this.from = from;
|
|
843
|
+
this.to = to;
|
|
844
|
+
}
|
|
845
|
+
isWithin(index) {
|
|
846
|
+
return withinRange(index, this);
|
|
847
|
+
}
|
|
848
|
+
//find the overlap of this range and a new one
|
|
849
|
+
overlap(from, to) {
|
|
850
|
+
return from >= this.to || to < this.from ? [0, 0] : [Math.max(from, this.from), Math.min(to, this.to)];
|
|
851
|
+
}
|
|
852
|
+
copy() {
|
|
853
|
+
return new WindowRange(this.from, this.to);
|
|
854
|
+
}
|
|
855
|
+
};
|
|
856
|
+
|
|
857
|
+
// src/DataWindow.ts
|
|
858
|
+
var { KEY } = metadataKeys;
|
|
859
|
+
var DataWindow = class {
|
|
860
|
+
constructor({ from, to }) {
|
|
861
|
+
this.rowCount = 0;
|
|
862
|
+
this.setRowCount = (rowCount) => {
|
|
863
|
+
if (rowCount < this.data.length) {
|
|
864
|
+
this.data.length = rowCount;
|
|
865
|
+
}
|
|
866
|
+
this.rowCount = rowCount;
|
|
867
|
+
};
|
|
868
|
+
this.range = new WindowRange(from, to);
|
|
869
|
+
this.data = new Array(to - from);
|
|
870
|
+
}
|
|
871
|
+
// return true if existing row was updated
|
|
872
|
+
add(data) {
|
|
873
|
+
const [index] = data;
|
|
874
|
+
if (this.isWithinRange(index)) {
|
|
875
|
+
const internalIndex = index - this.range.from;
|
|
876
|
+
const isUpdate = this.data[internalIndex] !== void 0;
|
|
877
|
+
this.data[internalIndex] = data;
|
|
878
|
+
return isUpdate;
|
|
879
|
+
} else {
|
|
880
|
+
return false;
|
|
881
|
+
}
|
|
882
|
+
}
|
|
883
|
+
getAtIndex(index) {
|
|
884
|
+
return this.range.isWithin(index) && this.data[index - this.range.from] != null ? this.data[index - this.range.from] : void 0;
|
|
885
|
+
}
|
|
886
|
+
getByKey(key) {
|
|
887
|
+
return this.data.find((row) => row[KEY] === key);
|
|
888
|
+
}
|
|
889
|
+
isWithinRange(index) {
|
|
890
|
+
return this.range.isWithin(index) && index <= this.rowCount;
|
|
891
|
+
}
|
|
892
|
+
setRange(from, to) {
|
|
893
|
+
if (from !== this.range.from || to !== this.range.to) {
|
|
894
|
+
const [overlapFrom, overlapTo] = this.range.overlap(from, to);
|
|
895
|
+
const newData = new Array(to - from);
|
|
896
|
+
for (let i = overlapFrom; i < overlapTo; i++) {
|
|
897
|
+
const data = this.getAtIndex(i);
|
|
898
|
+
if (data) {
|
|
899
|
+
const index = i - from;
|
|
900
|
+
newData[index] = data;
|
|
901
|
+
}
|
|
902
|
+
}
|
|
903
|
+
this.data = newData;
|
|
904
|
+
this.range.from = from;
|
|
905
|
+
this.range.to = to;
|
|
906
|
+
}
|
|
907
|
+
}
|
|
908
|
+
hasData(from, to) {
|
|
909
|
+
const offset = this.range.from;
|
|
910
|
+
const start = from - offset;
|
|
911
|
+
const end = Math.min(to - offset - 1, this.rowCount - 1);
|
|
912
|
+
return this.data[start] !== void 0 && this.data[end] !== void 0;
|
|
913
|
+
}
|
|
914
|
+
getData(from, to) {
|
|
915
|
+
var _a;
|
|
916
|
+
const { from: clientFrom, to: clientTo } = this.range;
|
|
917
|
+
const startOffset = Math.max(0, from - clientFrom);
|
|
918
|
+
const endOffset = Math.min(to - clientFrom, (_a = this.rowCount) != null ? _a : to);
|
|
919
|
+
return this.data.slice(startOffset, endOffset);
|
|
920
|
+
}
|
|
921
|
+
};
|
|
922
|
+
|
|
923
|
+
// src/common-types.ts
|
|
924
|
+
var MEASURES = {
|
|
925
|
+
horizontal: {
|
|
926
|
+
positionProp: "left",
|
|
927
|
+
sizeProp: "width"
|
|
928
|
+
},
|
|
929
|
+
vertical: {
|
|
930
|
+
positionProp: "top",
|
|
931
|
+
sizeProp: "height"
|
|
932
|
+
}
|
|
933
|
+
};
|
|
934
|
+
|
|
935
|
+
// src/data-utils.ts
|
|
936
|
+
var UP1 = "up1";
|
|
937
|
+
var UP2 = "up2";
|
|
938
|
+
var DOWN1 = "down1";
|
|
939
|
+
var DOWN2 = "down2";
|
|
940
|
+
var isValidNumber = (n) => typeof n === "number" && isFinite(n);
|
|
941
|
+
var EMPTY = {};
|
|
942
|
+
var shallowEquals = (o1 = EMPTY, o2 = EMPTY) => {
|
|
943
|
+
const props1 = Object.keys(o1);
|
|
944
|
+
const props2 = Object.keys(o2);
|
|
945
|
+
return props1.length === props2.length && props1.every((key) => o1[key] === o2[key]);
|
|
946
|
+
};
|
|
947
|
+
function getMovingValueDirection(newValue, direction, prevValue, decimalPlaces) {
|
|
948
|
+
if (!isFinite(newValue) || prevValue === void 0 || direction === void 0) {
|
|
949
|
+
return "";
|
|
950
|
+
} else {
|
|
951
|
+
let diff = newValue - prevValue;
|
|
952
|
+
if (diff) {
|
|
953
|
+
if (typeof decimalPlaces === "number") {
|
|
954
|
+
diff = +newValue.toFixed(decimalPlaces) - +prevValue.toFixed(decimalPlaces);
|
|
955
|
+
}
|
|
956
|
+
}
|
|
957
|
+
if (diff) {
|
|
958
|
+
if (direction === "") {
|
|
959
|
+
if (diff < 0) {
|
|
960
|
+
return DOWN1;
|
|
961
|
+
} else {
|
|
962
|
+
return UP1;
|
|
963
|
+
}
|
|
964
|
+
} else if (diff > 0) {
|
|
965
|
+
if (direction === DOWN1 || direction === DOWN2 || direction === UP2) {
|
|
966
|
+
return UP1;
|
|
967
|
+
} else {
|
|
968
|
+
return UP2;
|
|
969
|
+
}
|
|
970
|
+
} else if (direction === UP1 || direction === UP2 || direction === DOWN2) {
|
|
971
|
+
return DOWN1;
|
|
972
|
+
} else {
|
|
973
|
+
return DOWN2;
|
|
974
|
+
}
|
|
975
|
+
} else {
|
|
976
|
+
return "";
|
|
977
|
+
}
|
|
978
|
+
}
|
|
979
|
+
}
|
|
980
|
+
|
|
981
|
+
// src/date-utils.ts
|
|
982
|
+
var isDatePattern = (pattern) => pattern === "dd.mm.yyyy";
|
|
983
|
+
var isTimePattern = (pattern) => pattern === "kk:mm:ss";
|
|
984
|
+
var isDateTimePattern = (pattern) => pattern !== void 0 && isDatePattern(pattern) || isTimePattern(pattern);
|
|
985
|
+
var leadZero = (digit) => {
|
|
986
|
+
return digit < 10 ? `0` + digit : digit.toString();
|
|
987
|
+
};
|
|
988
|
+
var formatDate = (date, format = "dd.mm.yyyy") => {
|
|
989
|
+
if (isDatePattern(format)) {
|
|
990
|
+
const dd = date.getDate();
|
|
991
|
+
const mm = date.getMonth();
|
|
992
|
+
const yyyy = date.getFullYear();
|
|
993
|
+
return `${leadZero(dd)}.${leadZero(mm + 1)}.${yyyy}`;
|
|
994
|
+
} else if (isTimePattern(format)) {
|
|
995
|
+
const hh = date.getHours();
|
|
996
|
+
const mm = date.getMinutes();
|
|
997
|
+
const ss = date.getSeconds();
|
|
998
|
+
return `${leadZero(hh)}:${leadZero(mm)}:${leadZero(ss)}`;
|
|
999
|
+
} else {
|
|
1000
|
+
return date.toUTCString();
|
|
1001
|
+
}
|
|
1002
|
+
};
|
|
1003
|
+
|
|
1004
|
+
// src/logging-utils.ts
|
|
1005
|
+
var logLevels = ["error", "warn", "info", "debug"];
|
|
1006
|
+
var isValidLogLevel = (value) => typeof value === "string" && logLevels.includes(value);
|
|
1007
|
+
var DEFAULT_LOG_LEVEL = "error";
|
|
1008
|
+
var NO_OP = () => void 0;
|
|
1009
|
+
var DEFAULT_DEBUG_LEVEL = false ? "error" : "info";
|
|
1010
|
+
var { loggingLevel = DEFAULT_DEBUG_LEVEL } = getLoggingSettings();
|
|
1011
|
+
var logger = (category) => {
|
|
1012
|
+
const debugEnabled2 = loggingLevel === "debug";
|
|
1013
|
+
const infoEnabled = debugEnabled2 || loggingLevel === "info";
|
|
1014
|
+
const warnEnabled = infoEnabled || loggingLevel === "warn";
|
|
1015
|
+
const errorEnabled = warnEnabled || loggingLevel === "error";
|
|
1016
|
+
const info = infoEnabled ? (message) => console.info(`[${category}] ${message}`) : NO_OP;
|
|
1017
|
+
const warn = warnEnabled ? (message) => console.warn(`[${category}] ${message}`) : NO_OP;
|
|
1018
|
+
const debug2 = debugEnabled2 ? (message) => console.debug(`[${category}] ${message}`) : NO_OP;
|
|
1019
|
+
const error = errorEnabled ? (message) => console.error(`[${category}] ${message}`) : NO_OP;
|
|
1020
|
+
if (false) {
|
|
1021
|
+
return {
|
|
1022
|
+
errorEnabled,
|
|
1023
|
+
error
|
|
1024
|
+
};
|
|
1025
|
+
} else {
|
|
1026
|
+
return {
|
|
1027
|
+
debugEnabled: debugEnabled2,
|
|
1028
|
+
infoEnabled,
|
|
1029
|
+
warnEnabled,
|
|
1030
|
+
errorEnabled,
|
|
1031
|
+
info,
|
|
1032
|
+
warn,
|
|
1033
|
+
debug: debug2,
|
|
1034
|
+
error
|
|
1035
|
+
};
|
|
1036
|
+
}
|
|
1037
|
+
};
|
|
1038
|
+
function getLoggingSettings() {
|
|
1039
|
+
if (typeof loggingSettings !== "undefined") {
|
|
1040
|
+
return loggingSettings;
|
|
1041
|
+
} else {
|
|
1042
|
+
return {
|
|
1043
|
+
loggingLevel: getLoggingLevelFromCookie()
|
|
1044
|
+
};
|
|
1045
|
+
}
|
|
1046
|
+
}
|
|
1047
|
+
function getLoggingLevelFromCookie() {
|
|
1048
|
+
const value = getCookieValue("vuu-logging-level");
|
|
1049
|
+
if (isValidLogLevel(value)) {
|
|
1050
|
+
return value;
|
|
1051
|
+
} else {
|
|
1052
|
+
return DEFAULT_LOG_LEVEL;
|
|
1053
|
+
}
|
|
1054
|
+
}
|
|
1055
|
+
var getLoggingConfigForWorker = () => {
|
|
1056
|
+
return `const loggingSettings = { loggingLevel: "${getLoggingLevelFromCookie()}"};`;
|
|
1057
|
+
};
|
|
1058
|
+
|
|
1059
|
+
// src/debug-utils.ts
|
|
1060
|
+
var { debug, debugEnabled } = logger("range-monitor");
|
|
1061
|
+
var RangeMonitor = class {
|
|
1062
|
+
constructor(source) {
|
|
1063
|
+
this.source = source;
|
|
1064
|
+
this.range = { from: 0, to: 0 };
|
|
1065
|
+
this.timestamp = 0;
|
|
1066
|
+
}
|
|
1067
|
+
isSet() {
|
|
1068
|
+
return this.timestamp !== 0;
|
|
1069
|
+
}
|
|
1070
|
+
set({ from, to }) {
|
|
1071
|
+
const { timestamp } = this;
|
|
1072
|
+
this.range.from = from;
|
|
1073
|
+
this.range.to = to;
|
|
1074
|
+
this.timestamp = performance.now();
|
|
1075
|
+
if (timestamp) {
|
|
1076
|
+
debugEnabled && debug(
|
|
1077
|
+
`<${this.source}> [${from}-${to}], ${(this.timestamp - timestamp).toFixed(0)} ms elapsed`
|
|
1078
|
+
);
|
|
1079
|
+
} else {
|
|
1080
|
+
return 0;
|
|
1081
|
+
}
|
|
1082
|
+
}
|
|
1083
|
+
};
|
|
1084
|
+
|
|
1085
|
+
// src/html-utils.ts
|
|
1086
|
+
var createEl = (elementType, className, textContent) => {
|
|
1087
|
+
const el = document.createElement(elementType);
|
|
1088
|
+
if (className) {
|
|
1089
|
+
el.className = className;
|
|
1090
|
+
}
|
|
1091
|
+
if (textContent) {
|
|
1092
|
+
el.textContent = textContent;
|
|
1093
|
+
}
|
|
1094
|
+
return el;
|
|
1095
|
+
};
|
|
1096
|
+
var getFocusableElement = (el, tabIndex) => {
|
|
1097
|
+
if (el) {
|
|
1098
|
+
if (el.hasAttribute("tabindex")) {
|
|
1099
|
+
const rootTabIndex = parseInt(el.getAttribute("tabindex"));
|
|
1100
|
+
if (!isNaN(rootTabIndex) && (tabIndex === void 0 || rootTabIndex === tabIndex)) {
|
|
1101
|
+
return el;
|
|
1102
|
+
}
|
|
1103
|
+
}
|
|
1104
|
+
const focusableEl = typeof tabIndex === "number" ? el.querySelector(`[tabindex="${tabIndex}"]`) : el.querySelector("[tabindex]");
|
|
1105
|
+
if (focusableEl) {
|
|
1106
|
+
return focusableEl;
|
|
1107
|
+
}
|
|
1108
|
+
}
|
|
1109
|
+
};
|
|
1110
|
+
var focusFirstFocusableElement = (el, tabIndex) => {
|
|
1111
|
+
requestAnimationFrame(() => {
|
|
1112
|
+
const focusableElement = getFocusableElement(el, tabIndex);
|
|
1113
|
+
if (focusableElement) {
|
|
1114
|
+
focusableElement.focus();
|
|
1115
|
+
}
|
|
1116
|
+
});
|
|
1117
|
+
};
|
|
1118
|
+
|
|
1119
|
+
// src/event-emitter.ts
|
|
1120
|
+
function isArrayOfListeners(listeners) {
|
|
1121
|
+
return Array.isArray(listeners);
|
|
1122
|
+
}
|
|
1123
|
+
function isOnlyListener(listeners) {
|
|
1124
|
+
return !Array.isArray(listeners);
|
|
1125
|
+
}
|
|
1126
|
+
var _events;
|
|
1127
|
+
var EventEmitter = class {
|
|
1128
|
+
constructor() {
|
|
1129
|
+
__privateAdd(this, _events, /* @__PURE__ */ new Map());
|
|
1130
|
+
}
|
|
1131
|
+
addListener(event, listener) {
|
|
1132
|
+
const listeners = __privateGet(this, _events).get(event);
|
|
1133
|
+
if (!listeners) {
|
|
1134
|
+
__privateGet(this, _events).set(event, listener);
|
|
1135
|
+
} else if (isArrayOfListeners(listeners)) {
|
|
1136
|
+
listeners.push(listener);
|
|
1137
|
+
} else if (isOnlyListener(listeners)) {
|
|
1138
|
+
__privateGet(this, _events).set(event, [listeners, listener]);
|
|
1139
|
+
}
|
|
1140
|
+
}
|
|
1141
|
+
removeListener(event, listener) {
|
|
1142
|
+
if (!__privateGet(this, _events).has(event)) {
|
|
1143
|
+
return;
|
|
1144
|
+
}
|
|
1145
|
+
const listenerOrListeners = __privateGet(this, _events).get(event);
|
|
1146
|
+
let position = -1;
|
|
1147
|
+
if (listenerOrListeners === listener) {
|
|
1148
|
+
__privateGet(this, _events).delete(event);
|
|
1149
|
+
} else if (Array.isArray(listenerOrListeners)) {
|
|
1150
|
+
for (let i = length; i-- > 0; ) {
|
|
1151
|
+
if (listenerOrListeners[i] === listener) {
|
|
1152
|
+
position = i;
|
|
1153
|
+
break;
|
|
1154
|
+
}
|
|
1155
|
+
}
|
|
1156
|
+
if (position < 0) {
|
|
1157
|
+
return;
|
|
1158
|
+
}
|
|
1159
|
+
if (listenerOrListeners.length === 1) {
|
|
1160
|
+
listenerOrListeners.length = 0;
|
|
1161
|
+
__privateGet(this, _events).delete(event);
|
|
1162
|
+
} else {
|
|
1163
|
+
listenerOrListeners.splice(position, 1);
|
|
1164
|
+
}
|
|
1165
|
+
}
|
|
1166
|
+
}
|
|
1167
|
+
removeAllListeners(event) {
|
|
1168
|
+
if (event && __privateGet(this, _events).has(event)) {
|
|
1169
|
+
__privateGet(this, _events).delete(event);
|
|
1170
|
+
} else if (event === void 0) {
|
|
1171
|
+
__privateGet(this, _events).clear();
|
|
1172
|
+
}
|
|
1173
|
+
}
|
|
1174
|
+
emit(event, ...args) {
|
|
1175
|
+
if (__privateGet(this, _events)) {
|
|
1176
|
+
const handler = __privateGet(this, _events).get(event);
|
|
1177
|
+
if (handler) {
|
|
1178
|
+
this.invokeHandler(handler, args);
|
|
1179
|
+
}
|
|
1180
|
+
}
|
|
1181
|
+
}
|
|
1182
|
+
once(event, listener) {
|
|
1183
|
+
const handler = (...args) => {
|
|
1184
|
+
this.removeListener(event, handler);
|
|
1185
|
+
listener(...args);
|
|
1186
|
+
};
|
|
1187
|
+
this.on(event, handler);
|
|
1188
|
+
}
|
|
1189
|
+
on(event, listener) {
|
|
1190
|
+
this.addListener(event, listener);
|
|
1191
|
+
}
|
|
1192
|
+
invokeHandler(handler, args) {
|
|
1193
|
+
if (isArrayOfListeners(handler)) {
|
|
1194
|
+
handler.slice().forEach((listener) => this.invokeHandler(listener, args));
|
|
1195
|
+
} else {
|
|
1196
|
+
switch (args.length) {
|
|
1197
|
+
case 0:
|
|
1198
|
+
handler();
|
|
1199
|
+
break;
|
|
1200
|
+
case 1:
|
|
1201
|
+
handler(args[0]);
|
|
1202
|
+
break;
|
|
1203
|
+
case 2:
|
|
1204
|
+
handler(args[0], args[1]);
|
|
1205
|
+
break;
|
|
1206
|
+
default:
|
|
1207
|
+
handler.call(null, ...args);
|
|
1208
|
+
}
|
|
1209
|
+
}
|
|
1210
|
+
}
|
|
1211
|
+
};
|
|
1212
|
+
_events = new WeakMap();
|
|
1213
|
+
|
|
1214
|
+
// src/round-decimal.ts
|
|
1215
|
+
var PUNCTUATION_STR = String.fromCharCode(8200);
|
|
1216
|
+
var DIGIT_STR = String.fromCharCode(8199);
|
|
1217
|
+
var DECIMALS_AUTO = -1;
|
|
1218
|
+
var Space = {
|
|
1219
|
+
DIGIT: DIGIT_STR,
|
|
1220
|
+
TWO_DIGITS: DIGIT_STR + DIGIT_STR,
|
|
1221
|
+
THREE_DIGITS: DIGIT_STR + DIGIT_STR + DIGIT_STR,
|
|
1222
|
+
FULL_PADDING: [
|
|
1223
|
+
null,
|
|
1224
|
+
PUNCTUATION_STR + DIGIT_STR,
|
|
1225
|
+
PUNCTUATION_STR + DIGIT_STR + DIGIT_STR,
|
|
1226
|
+
PUNCTUATION_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR,
|
|
1227
|
+
PUNCTUATION_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR
|
|
1228
|
+
]
|
|
1229
|
+
};
|
|
1230
|
+
var Zero = {
|
|
1231
|
+
DIGIT: "0",
|
|
1232
|
+
TWO_DIGITS: "00",
|
|
1233
|
+
THREE_DIGITS: "000",
|
|
1234
|
+
FULL_PADDING: [null, "0", "00", "000", "0000"]
|
|
1235
|
+
};
|
|
1236
|
+
function padLeft(value, maxLength = 6) {
|
|
1237
|
+
return (LEADING_FILL + value).slice(-maxLength);
|
|
1238
|
+
}
|
|
1239
|
+
var LEADING_FILL = DIGIT_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR;
|
|
1240
|
+
var Align = {
|
|
1241
|
+
Right: "right",
|
|
1242
|
+
Center: "center",
|
|
1243
|
+
Left: "left"
|
|
1244
|
+
};
|
|
1245
|
+
function pad(n, dp, Pad) {
|
|
1246
|
+
let len = n.length;
|
|
1247
|
+
const diff = dp - len;
|
|
1248
|
+
if (diff > 0) {
|
|
1249
|
+
if (diff === 1) {
|
|
1250
|
+
n = n + Pad.DIGIT;
|
|
1251
|
+
} else if (diff === 2) {
|
|
1252
|
+
n = n + Pad.TWO_DIGITS;
|
|
1253
|
+
} else if (diff === 3) {
|
|
1254
|
+
n = n + Pad.THREE_DIGITS;
|
|
1255
|
+
}
|
|
1256
|
+
} else {
|
|
1257
|
+
if (diff < 0) {
|
|
1258
|
+
n = n.slice(0, dp);
|
|
1259
|
+
len = dp;
|
|
1260
|
+
}
|
|
1261
|
+
if (Pad === Space && n.charAt(len - 1) === "0") {
|
|
1262
|
+
n = n.replace(/0+$/, "");
|
|
1263
|
+
return pad(n, dp, Pad);
|
|
1264
|
+
}
|
|
1265
|
+
}
|
|
1266
|
+
return n;
|
|
1267
|
+
}
|
|
1268
|
+
function roundDecimal(value, align = Align.Right, decimals = 4, zeroPad, alignOnDecimals) {
|
|
1269
|
+
if (value === void 0 || typeof value !== "number" || isNaN(value)) {
|
|
1270
|
+
return "";
|
|
1271
|
+
}
|
|
1272
|
+
let integral, fraction, Pad;
|
|
1273
|
+
const [part1, part2 = ""] = value.toString().split(".");
|
|
1274
|
+
const actualDecimals = part2.length;
|
|
1275
|
+
integral = parseFloat(part1).toLocaleString();
|
|
1276
|
+
if (align === Align.Left && alignOnDecimals) {
|
|
1277
|
+
integral = padLeft(integral);
|
|
1278
|
+
}
|
|
1279
|
+
if (decimals === DECIMALS_AUTO || actualDecimals === decimals) {
|
|
1280
|
+
fraction = part2;
|
|
1281
|
+
} else if (actualDecimals > decimals) {
|
|
1282
|
+
fraction = parseFloat("0." + part2).toFixed(decimals).slice(2);
|
|
1283
|
+
} else {
|
|
1284
|
+
if (Pad = zeroPad ? Zero : alignOnDecimals && align !== Align.Left ? Space : null) {
|
|
1285
|
+
if (actualDecimals === 0) {
|
|
1286
|
+
fraction = Pad.FULL_PADDING[decimals];
|
|
1287
|
+
} else {
|
|
1288
|
+
fraction = pad(part2, decimals, Pad);
|
|
1289
|
+
}
|
|
1290
|
+
} else {
|
|
1291
|
+
fraction = part2;
|
|
1292
|
+
}
|
|
1293
|
+
}
|
|
1294
|
+
return integral + (fraction ? "." + fraction : "");
|
|
1295
|
+
}
|
|
1296
|
+
|
|
1297
|
+
// src/formatting-utils.ts
|
|
1298
|
+
var DEFAULT_NUMERIC_FORMAT = {};
|
|
1299
|
+
var defaultValueFormatter = (value) => value == null ? "" : typeof value === "string" ? value : value.toString();
|
|
1300
|
+
var dateFormatter = (column) => {
|
|
1301
|
+
const { type } = column;
|
|
1302
|
+
let pattern = "dd.mm.yyyy";
|
|
1303
|
+
if (isTypeDescriptor(type) && type.formatting) {
|
|
1304
|
+
if (isDateTimePattern(type.formatting.pattern)) {
|
|
1305
|
+
pattern = type.formatting.pattern;
|
|
1306
|
+
}
|
|
1307
|
+
}
|
|
1308
|
+
return (value) => {
|
|
1309
|
+
if (typeof value === "number" && value !== 0) {
|
|
1310
|
+
return formatDate(new Date(value), pattern);
|
|
1311
|
+
} else {
|
|
1312
|
+
return "";
|
|
1313
|
+
}
|
|
1314
|
+
};
|
|
1315
|
+
};
|
|
1316
|
+
var numericFormatter = ({
|
|
1317
|
+
align = "right",
|
|
1318
|
+
type
|
|
1319
|
+
}) => {
|
|
1320
|
+
var _a;
|
|
1321
|
+
if (type === void 0 || typeof type === "string") {
|
|
1322
|
+
return defaultValueFormatter;
|
|
1323
|
+
} else {
|
|
1324
|
+
const {
|
|
1325
|
+
alignOnDecimals = false,
|
|
1326
|
+
decimals,
|
|
1327
|
+
zeroPad = false
|
|
1328
|
+
} = (_a = type.formatting) != null ? _a : DEFAULT_NUMERIC_FORMAT;
|
|
1329
|
+
return (value) => {
|
|
1330
|
+
if (typeof value === "string" && (value.startsWith("\u03A3") || value.startsWith("["))) {
|
|
1331
|
+
return value;
|
|
1332
|
+
}
|
|
1333
|
+
const number = typeof value === "number" ? value : typeof value === "string" ? parseFloat(value) : void 0;
|
|
1334
|
+
return roundDecimal(number, align, decimals, zeroPad, alignOnDecimals);
|
|
1335
|
+
};
|
|
1336
|
+
}
|
|
1337
|
+
};
|
|
1338
|
+
var mapFormatter = (map) => {
|
|
1339
|
+
return (value) => {
|
|
1340
|
+
var _a;
|
|
1341
|
+
return (_a = map[value]) != null ? _a : "";
|
|
1342
|
+
};
|
|
1343
|
+
};
|
|
1344
|
+
var getValueFormatter = (column) => {
|
|
1345
|
+
if (isDateTimeColumn(column)) {
|
|
1346
|
+
return dateFormatter(column);
|
|
1347
|
+
}
|
|
1348
|
+
const { serverDataType, type } = column;
|
|
1349
|
+
if (isTypeDescriptor(type) && isMappedValueTypeRenderer(type == null ? void 0 : type.renderer)) {
|
|
1350
|
+
return mapFormatter(type.renderer.map);
|
|
1351
|
+
} else if (serverDataType === "string" || serverDataType === "char") {
|
|
1352
|
+
return (value) => value;
|
|
1353
|
+
} else if (serverDataType === "double") {
|
|
1354
|
+
return numericFormatter(column);
|
|
1355
|
+
}
|
|
1356
|
+
return defaultValueFormatter;
|
|
1357
|
+
};
|
|
1358
|
+
|
|
1359
|
+
// src/getUniqueId.ts
|
|
1360
|
+
var getUniqueId = () => `hw-${Math.round(Math.random() * 1e5)}`;
|
|
1361
|
+
|
|
1362
|
+
// src/group-utils.ts
|
|
1363
|
+
function addGroupColumn(groupBy, column) {
|
|
1364
|
+
if (groupBy) {
|
|
1365
|
+
return groupBy.concat(column.name);
|
|
1366
|
+
} else {
|
|
1367
|
+
return [column.name];
|
|
1368
|
+
}
|
|
1369
|
+
}
|
|
1370
|
+
|
|
1371
|
+
// src/input-utils.ts
|
|
1372
|
+
var actionKeys = {
|
|
1373
|
+
Enter: "Enter",
|
|
1374
|
+
Delete: "Delete"
|
|
1375
|
+
};
|
|
1376
|
+
var navigationKeys = {
|
|
1377
|
+
Home: "Home",
|
|
1378
|
+
End: "End",
|
|
1379
|
+
ArrowRight: "ArrowRight",
|
|
1380
|
+
ArrowLeft: "ArrowLeft",
|
|
1381
|
+
ArrowDown: "ArrowDown",
|
|
1382
|
+
ArrowUp: "ArrowUp",
|
|
1383
|
+
Tab: "Tab"
|
|
1384
|
+
};
|
|
1385
|
+
var functionKeys = {
|
|
1386
|
+
F1: "F1",
|
|
1387
|
+
F2: "F2",
|
|
1388
|
+
F3: "F3",
|
|
1389
|
+
F4: "F4",
|
|
1390
|
+
F5: "F5",
|
|
1391
|
+
F6: "F6",
|
|
1392
|
+
F7: "F7",
|
|
1393
|
+
F8: "F8",
|
|
1394
|
+
F9: "F9",
|
|
1395
|
+
F10: "F10",
|
|
1396
|
+
F11: "F11",
|
|
1397
|
+
F12: "F12"
|
|
1398
|
+
};
|
|
1399
|
+
var specialKeys = {
|
|
1400
|
+
...actionKeys,
|
|
1401
|
+
...navigationKeys,
|
|
1402
|
+
...functionKeys
|
|
1403
|
+
};
|
|
1404
|
+
var isSpecialKey = (key) => key in specialKeys;
|
|
1405
|
+
var isCharacterKey = (evt) => {
|
|
1406
|
+
if (isSpecialKey(evt.key)) {
|
|
1407
|
+
return false;
|
|
1408
|
+
}
|
|
1409
|
+
if (typeof evt.which === "number" && evt.which > 0) {
|
|
1410
|
+
return !evt.ctrlKey && !evt.metaKey && !evt.altKey && evt.which !== 8;
|
|
1411
|
+
}
|
|
1412
|
+
};
|
|
1413
|
+
var isQuoteKey = (evt) => {
|
|
1414
|
+
return evt.key === '"' || evt.key === "'";
|
|
1415
|
+
};
|
|
1416
|
+
|
|
1417
|
+
// src/invariant.ts
|
|
1418
|
+
function invariant(condition, message) {
|
|
1419
|
+
if (!condition) {
|
|
1420
|
+
const error = new Error(message);
|
|
1421
|
+
error.name = "Invariant Violation";
|
|
1422
|
+
error.framesToPop = 1;
|
|
1423
|
+
throw error;
|
|
1424
|
+
}
|
|
1425
|
+
}
|
|
1426
|
+
|
|
1427
|
+
// src/itemToString.ts
|
|
1428
|
+
var isPlainObject = (obj) => Object.prototype.toString.call(obj) === "[object Object]";
|
|
1429
|
+
function itemToString(item) {
|
|
1430
|
+
if (typeof item === "string") {
|
|
1431
|
+
return item;
|
|
1432
|
+
} else if (!isPlainObject(item)) {
|
|
1433
|
+
return String(item);
|
|
1434
|
+
}
|
|
1435
|
+
if (Object.prototype.hasOwnProperty.call(item, "label")) {
|
|
1436
|
+
return String(item.label);
|
|
1437
|
+
}
|
|
1438
|
+
console.warn(
|
|
1439
|
+
[
|
|
1440
|
+
"itemToString: you've likely forgotten to set the label prop on the item object.",
|
|
1441
|
+
"You can also provide your own `itemToString` implementation."
|
|
1442
|
+
].join("\n")
|
|
1443
|
+
);
|
|
1444
|
+
return "";
|
|
1445
|
+
}
|
|
1446
|
+
|
|
1447
|
+
// src/json-utils.ts
|
|
1448
|
+
var { COUNT } = metadataKeys;
|
|
1449
|
+
var isJsonData = (value) => typeof value === "object" && value !== null;
|
|
1450
|
+
var vuuRowDataItemTypes = ["boolean", "number", "string"];
|
|
1451
|
+
var isVuuRowDataItem = (value) => vuuRowDataItemTypes.includes(typeof value);
|
|
1452
|
+
var typeofVuuDataItem = (value) => typeof value === "boolean" ? "boolean" : typeof value === "number" ? "number" : "string";
|
|
1453
|
+
var getCellValue = (attribute, attributeValue) => {
|
|
1454
|
+
if (isJsonData(attributeValue)) {
|
|
1455
|
+
return { attribute: `${attribute}+`, attributeValue: "", type: "json" };
|
|
1456
|
+
} else if (isVuuRowDataItem(attributeValue)) {
|
|
1457
|
+
return {
|
|
1458
|
+
attribute,
|
|
1459
|
+
attributeValue,
|
|
1460
|
+
type: typeofVuuDataItem(attributeValue)
|
|
1461
|
+
};
|
|
1462
|
+
} else {
|
|
1463
|
+
throw Error(`unsupported type ${typeof attributeValue} in JSON`);
|
|
1464
|
+
}
|
|
1465
|
+
};
|
|
1466
|
+
var jsonColumnType = {
|
|
1467
|
+
name: "json",
|
|
1468
|
+
renderer: {
|
|
1469
|
+
name: "json"
|
|
1470
|
+
}
|
|
1471
|
+
};
|
|
1472
|
+
var jsonToDataSourceRows = (json) => {
|
|
1473
|
+
const cols = [];
|
|
1474
|
+
cols.push(
|
|
1475
|
+
{
|
|
1476
|
+
name: "col 1",
|
|
1477
|
+
type: jsonColumnType
|
|
1478
|
+
},
|
|
1479
|
+
{
|
|
1480
|
+
name: "col 2",
|
|
1481
|
+
type: jsonColumnType
|
|
1482
|
+
}
|
|
1483
|
+
);
|
|
1484
|
+
const rows = [];
|
|
1485
|
+
addChildValues(rows, json, cols);
|
|
1486
|
+
return [cols, rows];
|
|
1487
|
+
};
|
|
1488
|
+
var addChildValues = (rows, json, cols, index = { value: 0 }, keyBase = "$root", depth = 0) => {
|
|
1489
|
+
let leafCount = 0;
|
|
1490
|
+
let rowCount = 0;
|
|
1491
|
+
if (depth === cols.length - 1) {
|
|
1492
|
+
cols.push({
|
|
1493
|
+
name: `col ${cols.length + 1}`,
|
|
1494
|
+
hidden: true,
|
|
1495
|
+
type: jsonColumnType
|
|
1496
|
+
});
|
|
1497
|
+
}
|
|
1498
|
+
const columnEntries = Object.entries(json);
|
|
1499
|
+
for (let i = 0; i < columnEntries.length; i++, index.value += 1) {
|
|
1500
|
+
const [key, value] = columnEntries[i];
|
|
1501
|
+
const { attribute, attributeValue, type } = getCellValue(key, value);
|
|
1502
|
+
const isLeaf = type !== "json";
|
|
1503
|
+
const blanks = Array(depth).fill("");
|
|
1504
|
+
const fullKey = `${keyBase}|${key}`;
|
|
1505
|
+
const row = [index.value, index.value, isLeaf, false, depth, 0, fullKey, 0, ...blanks, attribute, attributeValue];
|
|
1506
|
+
rows.push(row);
|
|
1507
|
+
rowCount += 1;
|
|
1508
|
+
if (isJsonData(value)) {
|
|
1509
|
+
const [nestedLeafCount, nestedRowCount] = addChildValues(
|
|
1510
|
+
rows,
|
|
1511
|
+
value,
|
|
1512
|
+
cols,
|
|
1513
|
+
{ value: index.value + 1 },
|
|
1514
|
+
fullKey,
|
|
1515
|
+
depth + 1
|
|
1516
|
+
);
|
|
1517
|
+
row[COUNT] = nestedLeafCount;
|
|
1518
|
+
leafCount += nestedLeafCount;
|
|
1519
|
+
rowCount += nestedRowCount;
|
|
1520
|
+
index.value += nestedRowCount;
|
|
1521
|
+
} else {
|
|
1522
|
+
leafCount += 1;
|
|
1523
|
+
}
|
|
1524
|
+
}
|
|
1525
|
+
return [leafCount, rowCount];
|
|
1526
|
+
};
|
|
1527
|
+
|
|
1528
|
+
// src/keyboard-utils.ts
|
|
1529
|
+
var ArrowUp = "ArrowUp";
|
|
1530
|
+
var ArrowDown = "ArrowDown";
|
|
1531
|
+
var ArrowLeft = "ArrowLeft";
|
|
1532
|
+
var ArrowRight = "ArrowRight";
|
|
1533
|
+
var Enter = "Enter";
|
|
1534
|
+
var Escape = "Escape";
|
|
1535
|
+
var Home = "Home";
|
|
1536
|
+
var End = "End";
|
|
1537
|
+
var PageUp = "PageUp";
|
|
1538
|
+
var PageDown = "PageDown";
|
|
1539
|
+
var Space2 = " ";
|
|
1540
|
+
var Tab = "Tab";
|
|
1541
|
+
|
|
1542
|
+
// src/keyset.ts
|
|
1543
|
+
var KeySet = class {
|
|
1544
|
+
constructor(range) {
|
|
1545
|
+
this.keys = /* @__PURE__ */ new Map();
|
|
1546
|
+
this.free = [];
|
|
1547
|
+
this.nextKeyValue = 0;
|
|
1548
|
+
this.reset(range);
|
|
1549
|
+
}
|
|
1550
|
+
next() {
|
|
1551
|
+
if (this.free.length > 0) {
|
|
1552
|
+
return this.free.pop();
|
|
1553
|
+
} else {
|
|
1554
|
+
return this.nextKeyValue++;
|
|
1555
|
+
}
|
|
1556
|
+
}
|
|
1557
|
+
reset({ from, to }) {
|
|
1558
|
+
this.keys.forEach((keyValue, rowIndex) => {
|
|
1559
|
+
if (rowIndex < from || rowIndex >= to) {
|
|
1560
|
+
this.free.push(keyValue);
|
|
1561
|
+
this.keys.delete(rowIndex);
|
|
1562
|
+
}
|
|
1563
|
+
});
|
|
1564
|
+
const size = to - from;
|
|
1565
|
+
if (this.keys.size + this.free.length > size) {
|
|
1566
|
+
this.free.length = Math.max(0, size - this.keys.size);
|
|
1567
|
+
}
|
|
1568
|
+
for (let rowIndex = from; rowIndex < to; rowIndex++) {
|
|
1569
|
+
if (!this.keys.has(rowIndex)) {
|
|
1570
|
+
const nextKeyValue = this.next();
|
|
1571
|
+
this.keys.set(rowIndex, nextKeyValue);
|
|
1572
|
+
}
|
|
1573
|
+
}
|
|
1574
|
+
if (this.nextKeyValue > this.keys.size) {
|
|
1575
|
+
this.nextKeyValue = this.keys.size;
|
|
1576
|
+
}
|
|
1577
|
+
}
|
|
1578
|
+
keyFor(rowIndex) {
|
|
1579
|
+
const key = this.keys.get(rowIndex);
|
|
1580
|
+
if (key === void 0) {
|
|
1581
|
+
console.log(`key not found
|
|
2
1582
|
keys: ${this.toDebugString()}
|
|
3
1583
|
free : ${this.free.join(",")}
|
|
4
|
-
`)
|
|
1584
|
+
`);
|
|
1585
|
+
throw Error(`KeySet, no key found for rowIndex ${rowIndex}`);
|
|
1586
|
+
}
|
|
1587
|
+
return key;
|
|
1588
|
+
}
|
|
1589
|
+
toDebugString() {
|
|
1590
|
+
return Array.from(this.keys.entries()).map((k, v) => `${k}=>${v}`).join(",");
|
|
1591
|
+
}
|
|
1592
|
+
};
|
|
1593
|
+
|
|
1594
|
+
// src/menu-utils.ts
|
|
1595
|
+
var isGroupMenuItemDescriptor = (menuItem) => menuItem !== void 0 && "children" in menuItem;
|
|
1596
|
+
|
|
1597
|
+
// src/nanoid/index.ts
|
|
1598
|
+
var uuid = (size = 21) => {
|
|
1599
|
+
let id = "";
|
|
1600
|
+
let bytes = crypto.getRandomValues(new Uint8Array(size));
|
|
1601
|
+
while (size--) {
|
|
1602
|
+
let byte = bytes[size] & 63;
|
|
1603
|
+
if (byte < 36) {
|
|
1604
|
+
id += byte.toString(36);
|
|
1605
|
+
} else if (byte < 62) {
|
|
1606
|
+
id += (byte - 26).toString(36).toUpperCase();
|
|
1607
|
+
} else if (byte < 63) {
|
|
1608
|
+
id += "_";
|
|
1609
|
+
} else {
|
|
1610
|
+
id += "-";
|
|
1611
|
+
}
|
|
1612
|
+
}
|
|
1613
|
+
return id;
|
|
1614
|
+
};
|
|
1615
|
+
|
|
1616
|
+
// src/perf-utils.ts
|
|
1617
|
+
function debounce(callback, timeInterval) {
|
|
1618
|
+
let timeout;
|
|
1619
|
+
return (...args) => {
|
|
1620
|
+
clearTimeout(timeout);
|
|
1621
|
+
timeout = window.setTimeout(() => callback(...args), timeInterval);
|
|
1622
|
+
};
|
|
1623
|
+
}
|
|
1624
|
+
function throttle(callback, limit) {
|
|
1625
|
+
let wait = false;
|
|
1626
|
+
let lastArgs = void 0;
|
|
1627
|
+
function checkLastArgs() {
|
|
1628
|
+
if (lastArgs == void 0) {
|
|
1629
|
+
wait = false;
|
|
1630
|
+
} else {
|
|
1631
|
+
callback(...lastArgs);
|
|
1632
|
+
lastArgs = void 0;
|
|
1633
|
+
setTimeout(checkLastArgs, limit);
|
|
1634
|
+
}
|
|
1635
|
+
}
|
|
1636
|
+
return (...args) => {
|
|
1637
|
+
if (wait) {
|
|
1638
|
+
lastArgs = args;
|
|
1639
|
+
} else {
|
|
1640
|
+
callback(...args);
|
|
1641
|
+
wait = true;
|
|
1642
|
+
setTimeout(checkLastArgs, limit);
|
|
1643
|
+
}
|
|
1644
|
+
};
|
|
1645
|
+
}
|
|
1646
|
+
|
|
1647
|
+
// src/row-utils.ts
|
|
1648
|
+
var { IDX } = metadataKeys;
|
|
1649
|
+
var actualRowPositioning = (rowHeight) => [
|
|
1650
|
+
(row) => row[IDX] * rowHeight,
|
|
1651
|
+
(position) => Math.floor(position / rowHeight)
|
|
1652
|
+
];
|
|
1653
|
+
var virtualRowPositioning = (rowHeight, additionalPixelsNeeded, pctScrollTop) => [
|
|
1654
|
+
(row) => {
|
|
1655
|
+
const rowOffset = pctScrollTop.current * additionalPixelsNeeded;
|
|
1656
|
+
return row[IDX] * rowHeight - rowOffset;
|
|
1657
|
+
},
|
|
1658
|
+
(position) => {
|
|
1659
|
+
const rowOffset = pctScrollTop.current * additionalPixelsNeeded;
|
|
1660
|
+
const result = Math.floor((position + rowOffset) / rowHeight);
|
|
1661
|
+
return result;
|
|
1662
|
+
}
|
|
1663
|
+
];
|
|
1664
|
+
|
|
1665
|
+
// src/selection-utils.ts
|
|
1666
|
+
var NO_SELECTION = [];
|
|
1667
|
+
var { SELECTED } = metadataKeys;
|
|
1668
|
+
var RowSelected = {
|
|
1669
|
+
False: 0,
|
|
1670
|
+
True: 1,
|
|
1671
|
+
First: 2,
|
|
1672
|
+
Last: 4
|
|
1673
|
+
};
|
|
1674
|
+
var isRowSelected = (row) => (row[SELECTED] & RowSelected.True) === RowSelected.True;
|
|
1675
|
+
var inAscendingOrder = (item1, item2) => {
|
|
1676
|
+
const n1 = typeof item1 === "number" ? item1 : item1[0];
|
|
1677
|
+
const n2 = typeof item2 === "number" ? item2 : item2[0];
|
|
1678
|
+
return n1 - n2;
|
|
1679
|
+
};
|
|
1680
|
+
var deselectItem = (selectionModel, selected, itemIndex, rangeSelect, keepExistingSelection = false) => {
|
|
1681
|
+
const singleSelect = selectionModel === "single";
|
|
1682
|
+
const multiSelect = selectionModel === "extended" || selectionModel === "checkbox";
|
|
1683
|
+
const actsLikeSingleSelect = singleSelect || multiSelect && !keepExistingSelection && !rangeSelect;
|
|
1684
|
+
if (actsLikeSingleSelect || !rangeSelect && !keepExistingSelection) {
|
|
1685
|
+
return NO_SELECTION;
|
|
1686
|
+
} else if (!rangeSelect && keepExistingSelection) {
|
|
1687
|
+
return removeSelectedItem(selected, itemIndex);
|
|
1688
|
+
}
|
|
1689
|
+
return NO_SELECTION;
|
|
1690
|
+
};
|
|
1691
|
+
var newSelectedFillsGapOrExtends = (selection, itemIndex) => {
|
|
1692
|
+
for (let i = 0; i < selection.length; i++) {
|
|
1693
|
+
const item = selection[i];
|
|
1694
|
+
if (typeof item === "number") {
|
|
1695
|
+
if (item === itemIndex - 1) {
|
|
1696
|
+
return true;
|
|
1697
|
+
} else if (item > itemIndex) {
|
|
1698
|
+
return false;
|
|
1699
|
+
}
|
|
1700
|
+
} else if (item[0] === itemIndex + 1 || item[1] === itemIndex - 1) {
|
|
1701
|
+
return true;
|
|
1702
|
+
} else if (item[0] > itemIndex) {
|
|
1703
|
+
return false;
|
|
1704
|
+
}
|
|
1705
|
+
}
|
|
1706
|
+
return false;
|
|
1707
|
+
};
|
|
1708
|
+
var fillGapOrExtendSelection = (selection, itemIndex) => {
|
|
1709
|
+
for (let i = 0; i < selection.length; i++) {
|
|
1710
|
+
const item = selection[i];
|
|
1711
|
+
if (typeof item === "number") {
|
|
1712
|
+
if (item === itemIndex - 1) {
|
|
1713
|
+
const nextSelectionItem = selection[i + 1];
|
|
1714
|
+
if (nextSelectionItem === itemIndex + 1) {
|
|
1715
|
+
const newRange = [item, nextSelectionItem];
|
|
1716
|
+
return selection.slice(0, i).concat([newRange]).concat(selection.slice(i + 2));
|
|
1717
|
+
} else {
|
|
1718
|
+
const newRange = [item, itemIndex];
|
|
1719
|
+
return selection.slice(0, i).concat([newRange]).concat(selection.slice(i + 1));
|
|
1720
|
+
}
|
|
1721
|
+
} else if (item > itemIndex) {
|
|
1722
|
+
break;
|
|
1723
|
+
}
|
|
1724
|
+
} else if (item[0] === itemIndex + 1) {
|
|
1725
|
+
const newRange = [itemIndex, item[1]];
|
|
1726
|
+
return selection.slice(0, i).concat([newRange]).concat(selection.slice(i + 1));
|
|
1727
|
+
} else if (item[1] === itemIndex - 1) {
|
|
1728
|
+
const nextItem = selection[i + 1];
|
|
1729
|
+
if (Array.isArray(nextItem) && nextItem[0] === itemIndex + 1) {
|
|
1730
|
+
const newRange = [item[0], nextItem[1]];
|
|
1731
|
+
return selection.slice(0, i).concat([newRange]).concat(selection.slice(i + 2));
|
|
1732
|
+
} else if (typeof nextItem === "number" && nextItem === itemIndex + 1) {
|
|
1733
|
+
const newRange = [item[0], nextItem];
|
|
1734
|
+
return selection.slice(0, i).concat([newRange]).concat(selection.slice(i + 2));
|
|
1735
|
+
} else {
|
|
1736
|
+
const newRange = [item[0], itemIndex];
|
|
1737
|
+
return selection.slice(0, i).concat([newRange]).concat(selection.slice(i + 1));
|
|
1738
|
+
}
|
|
1739
|
+
}
|
|
1740
|
+
}
|
|
1741
|
+
return selection;
|
|
1742
|
+
};
|
|
1743
|
+
var selectItem = (selectionModel, selected, itemIndex, rangeSelect, keepExistingSelection = false, activeItemIndex = -1) => {
|
|
1744
|
+
const singleSelect = selectionModel === "single";
|
|
1745
|
+
const multiSelect = selectionModel === "extended" || selectionModel === "checkbox";
|
|
1746
|
+
const actsLikeSingleSelect = singleSelect || multiSelect && !keepExistingSelection && !rangeSelect;
|
|
1747
|
+
if (selectionModel === "none") {
|
|
1748
|
+
return NO_SELECTION;
|
|
1749
|
+
} else if (actsLikeSingleSelect) {
|
|
1750
|
+
return [itemIndex];
|
|
1751
|
+
} else if (rangeSelect) {
|
|
1752
|
+
if (selected.length === 0) {
|
|
1753
|
+
return [itemIndex];
|
|
1754
|
+
} else {
|
|
1755
|
+
const range = itemIndex > activeItemIndex ? [activeItemIndex, itemIndex] : [itemIndex, activeItemIndex];
|
|
1756
|
+
return insertRange(selected, range);
|
|
1757
|
+
}
|
|
1758
|
+
} else if (!rangeSelect) {
|
|
1759
|
+
if (newSelectedFillsGapOrExtends(selected, itemIndex)) {
|
|
1760
|
+
return fillGapOrExtendSelection(selected, itemIndex);
|
|
1761
|
+
} else {
|
|
1762
|
+
return selected == null ? void 0 : selected.concat(itemIndex).sort(inAscendingOrder);
|
|
1763
|
+
}
|
|
1764
|
+
} else if (multiSelect) {
|
|
1765
|
+
}
|
|
1766
|
+
return NO_SELECTION;
|
|
1767
|
+
};
|
|
1768
|
+
function removeSelectedItem(selected, itemIndex) {
|
|
1769
|
+
if (selected.includes(itemIndex)) {
|
|
1770
|
+
return selected.filter((selectedItem) => selectedItem !== itemIndex);
|
|
1771
|
+
} else {
|
|
1772
|
+
const newSelected = [];
|
|
1773
|
+
for (const selectedItem of selected) {
|
|
1774
|
+
if (Array.isArray(selectedItem)) {
|
|
1775
|
+
if (rangeIncludes(selectedItem, itemIndex)) {
|
|
1776
|
+
newSelected.push(...splitRange(selectedItem, itemIndex));
|
|
1777
|
+
} else {
|
|
1778
|
+
newSelected.push(selectedItem);
|
|
1779
|
+
}
|
|
1780
|
+
} else {
|
|
1781
|
+
newSelected.push(selectedItem);
|
|
1782
|
+
}
|
|
1783
|
+
}
|
|
1784
|
+
return newSelected;
|
|
1785
|
+
}
|
|
1786
|
+
}
|
|
1787
|
+
function insertRange(selected, range) {
|
|
1788
|
+
const [from, to] = range;
|
|
1789
|
+
return selected.reduce((newSelected, selectedItem) => {
|
|
1790
|
+
if (typeof selectedItem === "number") {
|
|
1791
|
+
if (selectedItem < from || selectedItem > to) {
|
|
1792
|
+
newSelected.push(selectedItem);
|
|
1793
|
+
} else if (!includedInRange(newSelected.at(-1), selectedItem)) {
|
|
1794
|
+
newSelected.push(range);
|
|
1795
|
+
}
|
|
1796
|
+
} else if (overlappingRange(selectedItem, range)) {
|
|
1797
|
+
newSelected.push(mergeRanges(selectedItem, range));
|
|
1798
|
+
} else {
|
|
1799
|
+
if (range[1] < selectedItem[0]) {
|
|
1800
|
+
newSelected.push(range);
|
|
1801
|
+
}
|
|
1802
|
+
newSelected.push(selectedItem);
|
|
1803
|
+
}
|
|
1804
|
+
return newSelected;
|
|
1805
|
+
}, []);
|
|
1806
|
+
}
|
|
1807
|
+
var overlappingRange = (r1, r2) => r1[1] >= r2[0] && r1[1] <= r2[1] || r1[0] >= r2[0] && r1[0] <= r2[1];
|
|
1808
|
+
var mergeRanges = (r1, r2) => [
|
|
1809
|
+
Math.min(r1[0], r2[0]),
|
|
1810
|
+
Math.max(r1[1], r2[1])
|
|
1811
|
+
];
|
|
1812
|
+
var includedInRange = (selectedItem, index) => {
|
|
1813
|
+
if (typeof selectedItem === "undefined" || typeof selectedItem === "number") {
|
|
1814
|
+
return false;
|
|
1815
|
+
} else
|
|
1816
|
+
return rangeIncludes(selectedItem, index);
|
|
1817
|
+
};
|
|
1818
|
+
var rangeIncludes = (range, index) => index >= range[0] && index <= range[1];
|
|
1819
|
+
var SINGLE_SELECTED_ROW = RowSelected.True + RowSelected.First + RowSelected.Last;
|
|
1820
|
+
var FIRST_SELECTED_ROW_OF_BLOCK = RowSelected.True + RowSelected.First;
|
|
1821
|
+
var LAST_SELECTED_ROW_OF_BLOCK = RowSelected.True + RowSelected.Last;
|
|
1822
|
+
var getSelectionStatus = (selected, itemIndex) => {
|
|
1823
|
+
for (const item of selected) {
|
|
1824
|
+
if (typeof item === "number") {
|
|
1825
|
+
if (item === itemIndex) {
|
|
1826
|
+
return SINGLE_SELECTED_ROW;
|
|
1827
|
+
}
|
|
1828
|
+
} else if (rangeIncludes(item, itemIndex)) {
|
|
1829
|
+
if (itemIndex === item[0]) {
|
|
1830
|
+
return FIRST_SELECTED_ROW_OF_BLOCK;
|
|
1831
|
+
} else if (itemIndex === item[1]) {
|
|
1832
|
+
return LAST_SELECTED_ROW_OF_BLOCK;
|
|
1833
|
+
} else {
|
|
1834
|
+
return RowSelected.True;
|
|
1835
|
+
}
|
|
1836
|
+
}
|
|
1837
|
+
}
|
|
1838
|
+
return RowSelected.False;
|
|
1839
|
+
};
|
|
1840
|
+
var isSelected = (selected, itemIndex) => {
|
|
1841
|
+
for (const item of selected) {
|
|
1842
|
+
if (typeof item === "number") {
|
|
1843
|
+
if (item === itemIndex) {
|
|
1844
|
+
return true;
|
|
1845
|
+
} else if (item > itemIndex) {
|
|
1846
|
+
return false;
|
|
1847
|
+
}
|
|
1848
|
+
} else if (rangeIncludes(item, itemIndex)) {
|
|
1849
|
+
return true;
|
|
1850
|
+
} else if (item[0] > itemIndex) {
|
|
1851
|
+
return false;
|
|
1852
|
+
}
|
|
1853
|
+
}
|
|
1854
|
+
return false;
|
|
1855
|
+
};
|
|
1856
|
+
var expandSelection = (selected) => {
|
|
1857
|
+
if (selected.every((selectedItem) => typeof selectedItem === "number")) {
|
|
1858
|
+
return selected;
|
|
1859
|
+
}
|
|
1860
|
+
const expandedSelected = [];
|
|
1861
|
+
for (const selectedItem of selected) {
|
|
1862
|
+
if (typeof selectedItem === "number") {
|
|
1863
|
+
expandedSelected.push(selectedItem);
|
|
1864
|
+
} else {
|
|
1865
|
+
for (let i = selectedItem[0]; i <= selectedItem[1]; i++) {
|
|
1866
|
+
expandedSelected.push(i);
|
|
1867
|
+
}
|
|
1868
|
+
}
|
|
1869
|
+
}
|
|
1870
|
+
return expandedSelected;
|
|
1871
|
+
};
|
|
1872
|
+
function splitRange([from, to], itemIndex) {
|
|
1873
|
+
if (itemIndex === from) {
|
|
1874
|
+
return [[from + 1, to]];
|
|
1875
|
+
} else if (itemIndex === to) {
|
|
1876
|
+
return [[from, to - 1]];
|
|
1877
|
+
} else if (to - from === 2) {
|
|
1878
|
+
return [from, to];
|
|
1879
|
+
} else if (itemIndex === to - 1) {
|
|
1880
|
+
return [[from, to - 2], to];
|
|
1881
|
+
} else {
|
|
1882
|
+
return [
|
|
1883
|
+
[from, itemIndex - 1],
|
|
1884
|
+
[itemIndex + 1, to]
|
|
1885
|
+
];
|
|
1886
|
+
}
|
|
1887
|
+
}
|
|
1888
|
+
|
|
1889
|
+
// src/sort-utils.ts
|
|
1890
|
+
var toggle = (sortType) => sortType === "A" ? "D" : "A";
|
|
1891
|
+
var applySort = ({ sortDefs }, { name: column }, extendSort = false, sortType) => {
|
|
1892
|
+
if (extendSort) {
|
|
1893
|
+
return {
|
|
1894
|
+
sortDefs: sortDefs.concat({
|
|
1895
|
+
column,
|
|
1896
|
+
sortType: sortType != null ? sortType : "A"
|
|
1897
|
+
})
|
|
1898
|
+
};
|
|
1899
|
+
}
|
|
1900
|
+
const newSortType = typeof sortType === "string" ? sortType : sortDefs.length === 1 && sortDefs[0].column === column ? toggle(sortDefs[0].sortType) : "A";
|
|
1901
|
+
return {
|
|
1902
|
+
sortDefs: [{ column, sortType: newSortType }]
|
|
1903
|
+
};
|
|
1904
|
+
};
|
|
1905
|
+
var setSortColumn = ({ sortDefs }, column, sortType) => {
|
|
1906
|
+
if (sortType === void 0) {
|
|
1907
|
+
const columnSort = sortDefs.find((item) => item.column === column.name);
|
|
1908
|
+
if (columnSort) {
|
|
1909
|
+
return {
|
|
1910
|
+
sortDefs: [
|
|
1911
|
+
{
|
|
1912
|
+
column: column.name,
|
|
1913
|
+
sortType: columnSort.sortType === "A" ? "D" : "A"
|
|
1914
|
+
}
|
|
1915
|
+
]
|
|
1916
|
+
};
|
|
1917
|
+
}
|
|
1918
|
+
}
|
|
1919
|
+
return { sortDefs: [{ column: column.name, sortType: sortType != null ? sortType : "A" }] };
|
|
1920
|
+
};
|
|
1921
|
+
var addSortColumn = ({ sortDefs }, column, sortType = "A") => {
|
|
1922
|
+
const sortEntry = { column: column.name, sortType };
|
|
1923
|
+
if (sortDefs.length > 0) {
|
|
1924
|
+
return {
|
|
1925
|
+
sortDefs: sortDefs.concat(sortEntry)
|
|
1926
|
+
};
|
|
1927
|
+
} else {
|
|
1928
|
+
return { sortDefs: [sortEntry] };
|
|
1929
|
+
}
|
|
1930
|
+
};
|
|
1931
|
+
|
|
1932
|
+
// src/text-utils.ts
|
|
1933
|
+
var lastWord = (text) => {
|
|
1934
|
+
const trimmedText = text.trim();
|
|
1935
|
+
const pos = trimmedText.lastIndexOf(" ");
|
|
1936
|
+
if (pos === -1) {
|
|
1937
|
+
return trimmedText;
|
|
1938
|
+
} else {
|
|
1939
|
+
return trimmedText.slice(pos + 1);
|
|
1940
|
+
}
|
|
1941
|
+
};
|
|
1942
|
+
|
|
1943
|
+
// src/url-utils.ts
|
|
1944
|
+
var getUrlParameter = (paramName, defaultValue) => {
|
|
1945
|
+
var _a;
|
|
1946
|
+
return (_a = new URL(document.location.href).searchParams.get(paramName)) != null ? _a : defaultValue;
|
|
1947
|
+
};
|
|
1948
|
+
var hasUrlParameter = (paramName) => new URL(document.location.href).searchParams.has(paramName);
|
|
5
1949
|
//# sourceMappingURL=index.js.map
|