@vuu-ui/vuu-utils 0.5.9 → 0.5.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (22) hide show
  1. package/cjs/index.js +1 -1
  2. package/cjs/index.js.map +4 -4
  3. package/esm/index.js +1 -1
  4. package/esm/index.js.map +4 -4
  5. package/package.json +5 -2
  6. package/types/{DataWindow.d.ts → packages/vuu-utils/src/DataWindow.d.ts} +0 -0
  7. package/types/{array-utils.d.ts → packages/vuu-utils/src/array-utils.d.ts} +0 -0
  8. package/types/{column-utils.d.ts → packages/vuu-utils/src/column-utils.d.ts} +7 -2
  9. package/types/{data-utils.d.ts → packages/vuu-utils/src/data-utils.d.ts} +0 -0
  10. package/types/{date-utils.d.ts → packages/vuu-utils/src/date-utils.d.ts} +0 -0
  11. package/types/{event-emitter.d.ts → packages/vuu-utils/src/event-emitter.d.ts} +0 -0
  12. package/types/{getUniqueId.d.ts → packages/vuu-utils/src/getUniqueId.d.ts} +0 -0
  13. package/types/{index.d.ts → packages/vuu-utils/src/index.d.ts} +1 -0
  14. package/types/{input-utils.d.ts → packages/vuu-utils/src/input-utils.d.ts} +0 -0
  15. package/types/{invariant.d.ts → packages/vuu-utils/src/invariant.d.ts} +0 -0
  16. package/types/{nanoid → packages/vuu-utils/src/nanoid}/index.d.ts +0 -0
  17. package/types/{range-utils.d.ts → packages/vuu-utils/src/range-utils.d.ts} +0 -0
  18. package/types/{round-decimal.d.ts → packages/vuu-utils/src/round-decimal.d.ts} +0 -0
  19. package/types/{row-utils.d.ts → packages/vuu-utils/src/row-utils.d.ts} +0 -0
  20. package/types/packages/vuu-utils/src/sort-utils.d.ts +5 -0
  21. package/types/{text-utils.d.ts → packages/vuu-utils/src/text-utils.d.ts} +0 -0
  22. package/types/showcase/src/examples/DataGrid/columnMetaData.d.ts +233 -0
package/cjs/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var y=Object.defineProperty;var U=Object.getOwnPropertyDescriptor;var G=Object.getOwnPropertyNames;var O=Object.prototype.hasOwnProperty;var P=(t,e)=>{for(var n in e)y(t,n,{get:e[n],enumerable:!0})},W=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of G(e))!O.call(t,o)&&o!==n&&y(t,o,{get:()=>e[o],enumerable:!(r=U(e,o))||r.enumerable});return t};var H=t=>W(y({},"__esModule",{value:!0}),t);var _e={};P(_e,{DOWN1:()=>x,DOWN2:()=>D,DataWindow:()=>I,EventEmitter:()=>R,UP1:()=>d,UP2:()=>b,WindowRange:()=>c,addRowsToIndex:()=>C,buildColumnMap:()=>Q,formatDate:()=>oe,getFullRange:()=>z,getMovingValueDirection:()=>re,getUniqueId:()=>se,indexRows:()=>Te,invariant:()=>he,isCharacterKey:()=>me,isEmptyRow:()=>ye,isKeyedColumn:()=>j,isQuoteKey:()=>pe,isValidNumber:()=>ne,itemsChanged:()=>$,lastWord:()=>Re,mapSortCriteria:()=>V,metadataKeys:()=>m,partition:()=>X,projectColumns:()=>J,projectUpdates:()=>Z,resetRange:()=>ee,roundDecimal:()=>Ee,toColumnDescriptor:()=>B,update:()=>Ie,uuid:()=>ge});module.exports=H(_e);function X(t,e,n=[],r=[]){for(let o=0,i=t.length;o<i;o++)(e(t[o],o)?n:r).push(t[o]);return[n,r]}function $(t,e,n){return t.length!==e.length?!0:n===void 0?!t.every(r=>e.includes(r)):t.some(r=>e.findIndex(o=>o[n]===r[n])===-1)}var Y="asc";function V(t,e,n=0){return t.map(r=>{if(typeof r=="string")return[e[r]+n,"asc"];if(Array.isArray(r)){let[o,i]=r;return[e[o]+n,i||Y]}else throw Error("columnUtils.mapSortCriteria invalid input")})}function j(t){return typeof t.key=="number"}var B=t=>({name:t}),q={};function Q(t){let e=m.count;return t?t.reduce((n,r,o)=>(typeof r=="string"?n[r]=e+o:typeof r.key=="number"?n[r.name]=r.key:n[r.name]=e+o,n),{}):q}function Z(t){let e=[],n=m.count-2;for(let r=0;r<t.length;r+=3)e[r]=t[r]+n,e[r+1]=t[r+1],e[r+2]=t[r+2];return e}function J(t,e){let n=e.length,{IDX:r,RENDER_IDX:o,DEPTH:i,COUNT:a,KEY:u,SELECTED:p,count:f}=m;return(h,S,K=[])=>(T,M)=>{let N=T[r],l=[];for(let g=0;g<n;g++){let k=t[e[g].name];l[f+g]=T[k]}return l[r]=h+M+S,l[o]=0,l[i]=0,l[a]=0,l[u]=T[t.KEY],l[p]=K.includes(N)?1:0,l}}var m={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"};function z({from:t,to:e},n=0,r=Number.MAX_SAFE_INTEGER){if(n===0)return{from:t,to:Math.min(e,r)};if(t===0)return{from:t,to:Math.min(e+n,r)};{let o=e-t,i=Math.round(n/2),a=t-i<0,u=r-(e+i)<0;return a&&u?{from:0,to:r}:a?{from:0,to:o+n}:u?{from:Math.max(0,r-(o+n)),to:r}:{from:t-i,to:e+i}}}function ee({from:t,to:e,bufferSize:n=0}){return{from:0,to:e-t,bufferSize:n,reset:!0}}var c=class{constructor(e,n){this.from=e,this.to=n}isWithin(e){return e>=this.from&&e<this.to}overlap(e,n){return e>=this.to||n<this.from?[0,0]:[Math.max(e,this.from),Math.min(n,this.to)]}copy(){return new c(this.from,this.to)}};var{KEY:te}=m,v=t=>console.log(`%c[DataWindow] ${t}`,"color: purple;font-weight: bold;"),I=class{constructor({from:e,to:n}){this.rowCount=0;this.setRowCount=e=>{e<this.data.length&&(this.data.length=e),this.rowCount=e};v(`constructor ${e} - ${n}`),this.range=new c(e,n),this.data=new Array(n-e)}add(e){let[n]=e;if(this.isWithinRange(n)){let r=n-this.range.from,o=this.data[r]!==void 0;return this.data[r]=e,o}else return!1}getAtIndex(e){return this.range.isWithin(e)&&this.data[e-this.range.from]!=null?this.data[e-this.range.from]:void 0}getByKey(e){return this.data.find(n=>n[te]===e)}isWithinRange(e){return this.range.isWithin(e)&&e<=this.rowCount}setRange(e,n){if(v(`setRange ${e} ${n}`),e!==this.range.from||n!==this.range.to){let[r,o]=this.range.overlap(e,n),i=new Array(n-e);for(let a=r;a<o;a++){let u=this.getAtIndex(a);if(u){let p=a-e;i[p]=u}}this.data=i,this.range.from=e,this.range.to=n}}hasData(e,n){let r=this.range.from,o=e-r,i=Math.min(n-r-1,this.rowCount-1);return this.data[o]!==void 0&&this.data[i]!==void 0}getData(e,n){var u;let{from:r,to:o}=this.range,i=Math.max(0,e-r),a=Math.min(n-r,(u=this.rowCount)!=null?u:n);return this.data.slice(i,a)}};var d="up1",b="up2",x="down1",D="down2",ne=t=>typeof t=="number"&&isFinite(t);function re(t,e,n,r){if(!isFinite(t)||n===void 0||e===void 0)return"";{let o=t-n;return o&&typeof r=="number"&&(o=+t.toFixed(r)-+n.toFixed(r)),o?e===""?o<0?x:d:o>0?e===x||e===D||e===b?d:b:e===d||e===b||e===D?x:D:""}}var oe=(t,e)=>t.toUTCString();function w(t){return Array.isArray(t)}function ie(t){return!Array.isArray(t)}var R=class{constructor(){this._events={}}addListener(e,n){this._events||(this._events={});let r=this._events[e];r?w(r)?r.push(n):ie(r)&&(this._events[e]=[r,n]):this._events[e]=n}removeListener(e,n){if(!this._events||!this._events[e])return;let r=this._events[e],o=-1;if(r===n)delete this._events[e];else if(Array.isArray(r)){for(let i=length;i-- >0;)if(r[i]===n){o=i;break}if(o<0)return;r.length===1?(r.length=0,delete this._events[e]):r.splice(o,1)}}removeAllListeners(e){if(this._events)e===void 0?delete this._events:delete this._events[e];else return}emit(e,...n){if(this._events){let r=this._events[e];r&&_(r,e,n);let o=this._events["*"];o&&_(o,e,n)}}once(e,n){let r=(o,i)=>{this.removeListener(o,r),n(o,i)};this.on(e,r)}on(e,n){return this.addListener(e,n)}};function _(t,e,n){if(w(t))t.slice().forEach(r=>_(r,e,n));else switch(n.length){case 0:t(e);break;case 1:t(e,n[0]);break;case 2:t(e,n[0],n[1]);break;default:t.call(null,e,...n)}}var se=()=>`hw-${Math.round(Math.random()*1e5)}`;var ae={Enter:"Enter",Delete:"Delete"},ue={Home:"Home",End:"End",ArrowRight:"ArrowRight",ArrowLeft:"ArrowLeft",ArrowDown:"ArrowDown",ArrowUp:"ArrowUp",Tab:"Tab"},le={F1:"F1",F2:"F2",F3:"F3",F4:"F4",F5:"F5",F6:"F6",F7:"F7",F8:"F8",F9:"F9",F10:"F10",F11:"F11",F12:"F12"},fe={...ae,...ue,...le},ce=t=>t in fe,me=t=>{if(ce(t.key))return!1;if(typeof t.which=="number"&&t.which>0)return!t.ctrlKey&&!t.metaKey&&!t.altKey&&t.which!==8},pe=t=>t.key==='"'||t.key==="'";function he(t,e){if(!t){let n=new Error(e);throw n.name="Invariant Violation",n.framesToPop=1,n}}var ge=(t=21)=>{let e="",n=crypto.getRandomValues(new Uint8Array(t));for(;t--;){let r=n[t]&63;r<36?e+=r.toString(36):r<62?e+=(r-26).toString(36).toUpperCase():r<63?e+="_":e+="-"}return e};var E=String.fromCharCode(8200),s=String.fromCharCode(8199),de=-1,F={DIGIT:s,TWO_DIGITS:s+s,THREE_DIGITS:s+s+s,FULL_PADDING:[null,E+s,E+s+s,E+s+s+s,E+s+s+s+s]},be={DIGIT:"0",TWO_DIGITS:"00",THREE_DIGITS:"000",FULL_PADDING:[null,"0","00","000","0000"]};function xe(t,e=6){return(De+t).slice(-e)}var De=s+s+s+s+s+s+s+s+s,L={Right:"right",Center:"center",Left:"left"};function A(t,e,n){let r=t.length,o=e-r;if(o>0)o===1?t=t+n.DIGIT:o===2?t=t+n.TWO_DIGITS:o===3&&(t=t+n.THREE_DIGITS);else if(o<0&&(t=t.slice(0,e),r=e),n===F&&t.charAt(r-1)==="0")return t=t.replace(/0+$/,""),A(t,e,n);return t}function Ee(t,e=L.Right,n=4,r,o){if(t===void 0||typeof t!="number"||isNaN(t))return"";let i,a,u,[p,f=""]=t.toString().split("."),h=f.length;return i=parseFloat(p).toLocaleString(),e===L.Left&&o&&(i=xe(i)),n===de||h===n?a=f:h>n?a=parseFloat("0."+f).toFixed(n).slice(2):(u=r?be:o&&e!==L.Left?F:null)?h===0?a=u.FULL_PADDING[n]:a=A(f,n,u):a=f,i+(a?"."+a:"")}function C(t,e,n){for(let r=0,o=t.length;r<o;r++)e[t[r][n]]=r;return e}function Te(t,e){return C(t,{},e)}function ye(t){return t[0]===void 0}function Ie(t,e){let n=t.slice(),[[r]]=t;for(let o=0;o<e.length;o++){let i=e[o][0]-r;if(t[i]){let a=t[i].slice();for(let u=1;u<e[o].length;u+=3)a[e[o][u]]=e[o][u+2];n[i]=a}else console.log("row not found in rows")}return n}var Re=t=>{let e=t.trim(),n=e.lastIndexOf(" ");return n===-1?e:e.slice(n+1)};
1
+ "use strict";var T=Object.defineProperty;var U=Object.getOwnPropertyDescriptor;var O=Object.getOwnPropertyNames;var V=Object.prototype.hasOwnProperty;var P=(t,e)=>{for(var n in e)T(t,n,{get:e[n],enumerable:!0})},W=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of O(e))!V.call(t,o)&&o!==n&&T(t,o,{get:()=>e[o],enumerable:!(r=U(e,o))||r.enumerable});return t};var H=t=>W(T({},"__esModule",{value:!0}),t);var Ge={};P(Ge,{DOWN1:()=>b,DOWN2:()=>C,DataWindow:()=>R,EventEmitter:()=>_,UP1:()=>x,UP2:()=>D,WindowRange:()=>p,addRowsToIndex:()=>G,addSortColumn:()=>Fe,applySort:()=>ve,buildColumnMap:()=>B,extractGroupColumn:()=>ne,flattenColumnGroup:()=>L,formatDate:()=>ae,getFullRange:()=>oe,getMovingValueDirection:()=>le,getUniqueId:()=>fe,indexRows:()=>Re,invariant:()=>be,isCharacterKey:()=>xe,isEmptyRow:()=>_e,isGroupColumn:()=>re,isKeyedColumn:()=>q,isNumericColumn:()=>J,isQuoteKey:()=>De,isValidNumber:()=>ue,itemsChanged:()=>$,lastWord:()=>Ke,mapSortCriteria:()=>j,metadataKeys:()=>g,partition:()=>X,projectColumns:()=>ee,projectUpdates:()=>z,resetRange:()=>ie,roundDecimal:()=>Le,setSortColumn:()=>Se,toColumnDescriptor:()=>Q,update:()=>we,uuid:()=>Ce});module.exports=H(Ge);function X(t,e,n=[],r=[]){for(let o=0,i=t.length;o<i;o++)(e(t[o],o)?n:r).push(t[o]);return[n,r]}function $(t,e,n){return t.length!==e.length?!0:n===void 0?!t.every(r=>e.includes(r)):t.some(r=>e.findIndex(o=>o[n]===r[n])===-1)}var Y="asc";function j(t,e,n=0){return t.map(r=>{if(typeof r=="string")return[e[r]+n,"asc"];if(Array.isArray(r)){let[o,i]=r;return[e[o]+n,i||Y]}else throw Error("columnUtils.mapSortCriteria invalid input")})}var q=t=>typeof t.key=="number",J=({serverDataType:t})=>t===void 0?!1:t==="int"||t==="long"||t==="double",Q=t=>({name:t}),Z={};function B(t){let e=g.count;return t?t.reduce((n,r,o)=>(typeof r=="string"?n[r]=e+o:typeof r.key=="number"?n[r.name]=r.key:n[r.name]=e+o,n),{}):Z}function z(t){let e=[],n=g.count-2;for(let r=0;r<t.length;r+=3)e[r]=t[r]+n,e[r+1]=t[r+1],e[r+2]=t[r+2];return e}function ee(t,e){let n=e.length,{IDX:r,RENDER_IDX:o,DEPTH:i,COUNT:s,KEY:l,SELECTED:c,count:a}=g;return(f,h,E=[])=>(I,N)=>{let M=I[r],m=[];for(let d=0;d<n;d++){let k=t[e[d].name];m[a+d]=I[k]}return m[r]=f+N+h,m[o]=0,m[i]=0,m[s]=0,m[l]=I[t.KEY],m[c]=E.includes(M)?1:0,m}}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"},te=(t,e)=>{let{originalIdx:n}=e;if(typeof n=="number")for(let r=0;r<t.length;r++){let{originalIdx:o=-1}=t[r];if(o>n)return t.splice(r,0,e),t}return t.push(e),t},L=t=>{var e;if((e=t[0])!=null&&e.isGroup){let[n,...r]=t;return n.columns.forEach(o=>{te(r,o)}),r}else return t};function ne(t,e){if(e&&e.length>0){let n=L(t),[r,o]=n.reduce((c,a,f)=>{let[h,E]=c;return e.includes(a.name)?h.push({...a,originalIdx:f}):E.push(a),c},[[],[]]);if(r.length!==e.length)throw Error(`extractGroupColumn: no column definition found for all groupBy cols ${JSON.stringify(e)} `);let i=e.length,s=e.map((c,a)=>({...r.find(h=>h.name===c),groupLevel:i-a}));return[{key:-1,name:"group-col",heading:["group-col"],isGroup:!0,columns:s,width:s.map(c=>c.width).reduce((c,a)=>c+a)+100},o]}return[null,L(t)]}var re=t=>t.isGroup===!0;function oe({from:t,to:e},n=0,r=Number.MAX_SAFE_INTEGER){if(n===0)return{from:t,to:Math.min(e,r)};if(t===0)return{from:t,to:Math.min(e+n,r)};{let o=e-t,i=Math.round(n/2),s=t-i<0,l=r-(e+i)<0;return s&&l?{from:0,to:r}:s?{from:0,to:o+n}:l?{from:Math.max(0,r-(o+n)),to:r}:{from:t-i,to:e+i}}}function ie({from:t,to:e,bufferSize:n=0}){return{from:0,to:e-t,bufferSize:n,reset:!0}}var p=class{constructor(e,n){this.from=e,this.to=n}isWithin(e){return e>=this.from&&e<this.to}overlap(e,n){return e>=this.to||n<this.from?[0,0]:[Math.max(e,this.from),Math.min(n,this.to)]}copy(){return new p(this.from,this.to)}};var{KEY:se}=g,v=t=>console.log(`%c[DataWindow] ${t}`,"color: purple;font-weight: bold;"),R=class{constructor({from:e,to:n}){this.rowCount=0;this.setRowCount=e=>{e<this.data.length&&(this.data.length=e),this.rowCount=e};v(`constructor ${e} - ${n}`),this.range=new p(e,n),this.data=new Array(n-e)}add(e){let[n]=e;if(this.isWithinRange(n)){let r=n-this.range.from,o=this.data[r]!==void 0;return this.data[r]=e,o}else return!1}getAtIndex(e){return this.range.isWithin(e)&&this.data[e-this.range.from]!=null?this.data[e-this.range.from]:void 0}getByKey(e){return this.data.find(n=>n[se]===e)}isWithinRange(e){return this.range.isWithin(e)&&e<=this.rowCount}setRange(e,n){if(v(`setRange ${e} ${n}`),e!==this.range.from||n!==this.range.to){let[r,o]=this.range.overlap(e,n),i=new Array(n-e);for(let s=r;s<o;s++){let l=this.getAtIndex(s);if(l){let c=s-e;i[c]=l}}this.data=i,this.range.from=e,this.range.to=n}}hasData(e,n){let r=this.range.from,o=e-r,i=Math.min(n-r-1,this.rowCount-1);return this.data[o]!==void 0&&this.data[i]!==void 0}getData(e,n){var l;let{from:r,to:o}=this.range,i=Math.max(0,e-r),s=Math.min(n-r,(l=this.rowCount)!=null?l:n);return this.data.slice(i,s)}};var x="up1",D="up2",b="down1",C="down2",ue=t=>typeof t=="number"&&isFinite(t);function le(t,e,n,r){if(!isFinite(t)||n===void 0||e===void 0)return"";{let o=t-n;return o&&typeof r=="number"&&(o=+t.toFixed(r)-+n.toFixed(r)),o?e===""?o<0?b:x:o>0?e===b||e===C||e===D?x:D:e===x||e===D||e===C?b:C:""}}var ae=(t,e)=>t.toUTCString();function S(t){return Array.isArray(t)}function ce(t){return!Array.isArray(t)}var _=class{constructor(){this._events={}}addListener(e,n){this._events||(this._events={});let r=this._events[e];r?S(r)?r.push(n):ce(r)&&(this._events[e]=[r,n]):this._events[e]=n}removeListener(e,n){if(!this._events||!this._events[e])return;let r=this._events[e],o=-1;if(r===n)delete this._events[e];else if(Array.isArray(r)){for(let i=length;i-- >0;)if(r[i]===n){o=i;break}if(o<0)return;r.length===1?(r.length=0,delete this._events[e]):r.splice(o,1)}}removeAllListeners(e){if(this._events)e===void 0?delete this._events:delete this._events[e];else return}emit(e,...n){if(this._events){let r=this._events[e];r&&w(r,e,n);let o=this._events["*"];o&&w(o,e,n)}}once(e,n){let r=(o,i)=>{this.removeListener(o,r),n(o,i)};this.on(e,r)}on(e,n){return this.addListener(e,n)}};function w(t,e,n){if(S(t))t.slice().forEach(r=>w(r,e,n));else switch(n.length){case 0:t(e);break;case 1:t(e,n[0]);break;case 2:t(e,n[0],n[1]);break;default:t.call(null,e,...n)}}var fe=()=>`hw-${Math.round(Math.random()*1e5)}`;var me={Enter:"Enter",Delete:"Delete"},pe={Home:"Home",End:"End",ArrowRight:"ArrowRight",ArrowLeft:"ArrowLeft",ArrowDown:"ArrowDown",ArrowUp:"ArrowUp",Tab:"Tab"},ge={F1:"F1",F2:"F2",F3:"F3",F4:"F4",F5:"F5",F6:"F6",F7:"F7",F8:"F8",F9:"F9",F10:"F10",F11:"F11",F12:"F12"},he={...me,...pe,...ge},de=t=>t in he,xe=t=>{if(de(t.key))return!1;if(typeof t.which=="number"&&t.which>0)return!t.ctrlKey&&!t.metaKey&&!t.altKey&&t.which!==8},De=t=>t.key==='"'||t.key==="'";function be(t,e){if(!t){let n=new Error(e);throw n.name="Invariant Violation",n.framesToPop=1,n}}var Ce=(t=21)=>{let e="",n=crypto.getRandomValues(new Uint8Array(t));for(;t--;){let r=n[t]&63;r<36?e+=r.toString(36):r<62?e+=(r-26).toString(36).toUpperCase():r<63?e+="_":e+="-"}return e};var y=String.fromCharCode(8200),u=String.fromCharCode(8199),ye=-1,F={DIGIT:u,TWO_DIGITS:u+u,THREE_DIGITS:u+u+u,FULL_PADDING:[null,y+u,y+u+u,y+u+u+u,y+u+u+u+u]},Ee={DIGIT:"0",TWO_DIGITS:"00",THREE_DIGITS:"000",FULL_PADDING:[null,"0","00","000","0000"]};function Ie(t,e=6){return(Te+t).slice(-e)}var Te=u+u+u+u+u+u+u+u+u,A={Right:"right",Center:"center",Left:"left"};function K(t,e,n){let r=t.length,o=e-r;if(o>0)o===1?t=t+n.DIGIT:o===2?t=t+n.TWO_DIGITS:o===3&&(t=t+n.THREE_DIGITS);else if(o<0&&(t=t.slice(0,e),r=e),n===F&&t.charAt(r-1)==="0")return t=t.replace(/0+$/,""),K(t,e,n);return t}function Le(t,e=A.Right,n=4,r,o){if(t===void 0||typeof t!="number"||isNaN(t))return"";let i,s,l,[c,a=""]=t.toString().split("."),f=a.length;return i=parseFloat(c).toLocaleString(),e===A.Left&&o&&(i=Ie(i)),n===ye||f===n?s=a:f>n?s=parseFloat("0."+a).toFixed(n).slice(2):(l=r?Ee:o&&e!==A.Left?F:null)?f===0?s=l.FULL_PADDING[n]:s=K(a,n,l):s=a,i+(s?"."+s:"")}function G(t,e,n){for(let r=0,o=t.length;r<o;r++)e[t[r][n]]=r;return e}function Re(t,e){return G(t,{},e)}function _e(t){return t[0]===void 0}function we(t,e){let n=t.slice(),[[r]]=t;for(let o=0;o<e.length;o++){let i=e[o][0]-r;if(t[i]){let s=t[i].slice();for(let l=1;l<e[o].length;l+=3)s[e[o][l]]=e[o][l+2];n[i]=s}else console.log("row not found in rows")}return n}var Ae=t=>t==="A"?"D":"A",ve=({sortDefs:t},{name:e},n=!1,r)=>{if(n)return{sortDefs:t.concat({column:e,sortType:r!=null?r:"A"})};let o=typeof r=="string"?r:t.length===1&&t[0].column===e?Ae(t[0].sortType):"A";return{sortDefs:[{column:e,sortType:o}]}},Se=({sortDefs:t},e,n)=>{if(n===void 0){let r=t.find(o=>o.column===e.name);if(r)return{sortDefs:[{column:e.name,sortType:r.sortType==="A"?"D":"A"}]}}return{sortDefs:[{column:e.name,sortType:n!=null?n:"A"}]}},Fe=({sortDefs:t},e,n="A")=>{let r={column:e.name,sortType:n};return t.length>0?{sortDefs:t.concat(r)}:{sortDefs:[r]}};var Ke=t=>{let e=t.trim(),n=e.lastIndexOf(" ");return n===-1?e:e.slice(n+1)};
2
2
  //# sourceMappingURL=index.js.map
package/cjs/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../packages/vuu-utils/src/index.ts", "../../../packages/vuu-utils/src/array-utils.ts", "../../../packages/vuu-utils/src/column-utils.ts", "../../../packages/vuu-utils/src/range-utils.ts", "../../../packages/vuu-utils/src/DataWindow.ts", "../../../packages/vuu-utils/src/data-utils.ts", "../../../packages/vuu-utils/src/date-utils.ts", "../../../packages/vuu-utils/src/event-emitter.ts", "../../../packages/vuu-utils/src/getUniqueId.ts", "../../../packages/vuu-utils/src/input-utils.ts", "../../../packages/vuu-utils/src/invariant.ts", "../../../packages/vuu-utils/src/nanoid/index.ts", "../../../packages/vuu-utils/src/round-decimal.ts", "../../../packages/vuu-utils/src/row-utils.ts", "../../../packages/vuu-utils/src/text-utils.ts"],
4
- "sourcesContent": ["export * from \"./array-utils\";\nexport * from \"./column-utils\";\nexport * from \"./DataWindow\";\nexport * from \"./data-utils\";\nexport * from \"./date-utils\";\nexport * from \"./event-emitter\";\nexport * from \"./getUniqueId\";\nexport * from \"./input-utils\";\nexport * from \"./invariant\";\nexport * from \"./nanoid\";\nexport * from \"./round-decimal\";\nexport * from \"./range-utils\";\nexport * from \"./row-utils\";\nexport * from \"./text-utils\";\n", "export type PartitionTest<T> = (value: T, index: number) => boolean;\n\nexport function partition<T>(\n array: T[],\n test: PartitionTest<T>,\n pass: T[] = [],\n fail: T[] = []\n): [T[], T[]] {\n for (let i = 0, len = array.length; i < len; i++) {\n (test(array[i], i) ? pass : fail).push(array[i]);\n }\n return [pass, fail];\n}\n\n// Note order of items can be different between arrays\n// If an identityProperty is not defined, item identity is used\nexport function itemsChanged<T = unknown>(\n currentItems: T[],\n newItems: T[],\n identityProperty?: string\n) {\n if (currentItems.length !== newItems.length) {\n return true;\n }\n if (identityProperty === undefined) {\n return !currentItems.every((item) => newItems.includes(item));\n } else {\n return currentItems.some(\n (currentItem) =>\n newItems.findIndex(\n (newItem) =>\n (newItem as { [key: string]: unknown })[identityProperty] ===\n (currentItem as { [key: string]: unknown })[identityProperty]\n ) === -1\n );\n }\n}\n", "import {\n ColumnDescriptor,\n KeyedColumnDescriptor,\n} from \"@vuu-ui/vuu-datagrid-types\";\nimport { Row } from \"./row-utils\";\n\nexport interface ColumnMap {\n [columnName: string]: number;\n}\n\nconst SORT_ASC = \"asc\";\n\nexport type SortCriteriaItem = string | [string, \"asc\"]; // TODO where is 'desc'?\n\nexport function mapSortCriteria(\n sortCriteria: SortCriteriaItem[],\n columnMap: ColumnMap,\n metadataOffset = 0\n): [number, \"asc\"][] {\n return sortCriteria.map((s) => {\n if (typeof s === \"string\") {\n return [columnMap[s] + metadataOffset, \"asc\"];\n } else if (Array.isArray(s)) {\n const [columnName, sortDir] = s;\n return [columnMap[columnName] + metadataOffset, sortDir || SORT_ASC];\n } else {\n throw Error(\"columnUtils.mapSortCriteria invalid input\");\n }\n });\n}\n\nexport function isKeyedColumn(\n column: ColumnDescriptor\n): column is KeyedColumnDescriptor {\n return typeof (column as KeyedColumnDescriptor).key === \"number\";\n}\n\nexport const toColumnDescriptor = (name: string): ColumnDescriptor => ({\n name,\n});\n\nconst EMPTY_COLUMN_MAP = {} as const;\n\nexport function buildColumnMap(\n columns?: (KeyedColumnDescriptor | string)[]\n): ColumnMap {\n const start = metadataKeys.count;\n if (columns) {\n return columns.reduce((map, column, i) => {\n if (typeof column === \"string\") {\n map[column] = start + i;\n } else if (typeof column.key === \"number\") {\n map[column.name] = column.key;\n } else {\n map[column.name] = start + i;\n }\n return map;\n }, {} as ColumnMap);\n } else {\n return EMPTY_COLUMN_MAP;\n }\n}\n\nexport function projectUpdates(updates: number[]): number[] {\n const results: number[] = [];\n const metadataOffset = metadataKeys.count - 2;\n for (let i = 0; i < updates.length; i += 3) {\n results[i] = updates[i] + metadataOffset;\n results[i + 1] = updates[i + 1];\n results[i + 2] = updates[i + 2];\n }\n return results;\n}\n\nexport function projectColumns(\n tableRowColumnMap: ColumnMap,\n columns: ColumnDescriptor[]\n) {\n const columnCount = columns.length;\n const { IDX, RENDER_IDX, DEPTH, COUNT, KEY, SELECTED, count } = metadataKeys;\n return (startIdx: number, offset: number, selectedRows: Row[] = []) =>\n (row: Row, i: number) => {\n // selectedRows are indices of rows within underlying dataset (not sorted or filtered)\n // row is the original row from this set, with original index in IDX pos, which might\n // be overwritten with a different value below if rows are sorted/filtered\n const baseRowIdx: any = row[IDX]; // TODO\n const out = [];\n for (let i = 0; i < columnCount; i++) {\n const colIdx = tableRowColumnMap[columns[i].name];\n out[count + i] = row[colIdx];\n }\n\n out[IDX] = startIdx + i + offset;\n out[RENDER_IDX] = 0;\n out[DEPTH] = 0;\n out[COUNT] = 0;\n out[KEY] = row[tableRowColumnMap.KEY];\n out[SELECTED] = selectedRows.includes(baseRowIdx) ? 1 : 0;\n return out;\n };\n}\n\nexport const metadataKeys = {\n IDX: 0,\n RENDER_IDX: 1,\n IS_LEAF: 2,\n IS_EXPANDED: 3,\n DEPTH: 4,\n COUNT: 5,\n KEY: 6,\n SELECTED: 7,\n count: 8,\n // TODO following only used in datamodel\n PARENT_IDX: \"parent_idx\",\n IDX_POINTER: \"idx_pointer\",\n FILTER_COUNT: \"filter_count\",\n NEXT_FILTER_IDX: \"next_filter_idx\",\n} as const;\n", "export interface VuuRange {\n from: number;\n to: number;\n bufferSize?: number;\n reset?: boolean;\n}\n\ninterface FromToRange {\n from: number;\n to: number;\n}\n\nexport function getFullRange(\n { from, to }: VuuRange,\n bufferSize: number = 0,\n rowCount: number = Number.MAX_SAFE_INTEGER\n): FromToRange {\n if (bufferSize === 0) {\n return { from, to: Math.min(to, rowCount) };\n } else if (from === 0) {\n return { from, to: Math.min(to + bufferSize, rowCount) };\n } else {\n const rangeSize = to - from;\n const buff = Math.round(bufferSize / 2);\n const shortfallBefore = from - buff < 0;\n const shortFallAfter = rowCount - (to + buff) < 0;\n\n if (shortfallBefore && shortFallAfter) {\n return { from: 0, to: rowCount };\n } else if (shortfallBefore) {\n return { from: 0, to: rangeSize + bufferSize };\n } else if (shortFallAfter) {\n return { from: Math.max(0, rowCount - (rangeSize + bufferSize)), to: rowCount };\n } else {\n return { from: from - buff, to: to + buff };\n }\n }\n}\n\nexport function resetRange({ from, to, bufferSize = 0 }: VuuRange): VuuRange {\n return {\n from: 0,\n to: to - from,\n bufferSize,\n reset: true\n };\n}\n\nexport class WindowRange {\n public from: number;\n public to: number;\n\n constructor(from: number, to: number) {\n this.from = from;\n this.to = to;\n }\n\n public isWithin(index: number) {\n return index >= this.from && index < this.to;\n }\n\n //find the overlap of this range and a new one\n public overlap(from: number, to: number): [number, number] {\n return from >= this.to || to < this.from\n ? [0, 0]\n : [Math.max(from, this.from), Math.min(to, this.to)];\n }\n\n public copy(): WindowRange {\n return new WindowRange(this.from, this.to);\n }\n}\n", "import { WindowRange } from \"./range-utils\";\nimport { metadataKeys } from \"./column-utils\";\n\nexport type DataItem = string | number | boolean;\nexport type DataRow = [\n /** index */\n number,\n /** render index */\n number,\n /** isLeaf */\n boolean,\n /** isExpanded */\n boolean,\n /** depth */\n number,\n /** child count */\n number,\n /** key */\n string,\n /** selected */\n number,\n /** data values */\n ...DataItem[]\n];\nexport type RangeLike = { from: number; to: number };\n\nconst { KEY } = metadataKeys;\n\nconst log = (message: string) =>\n console.log(`%c[DataWindow] ${message}`, \"color: purple;font-weight: bold;\");\nexport class DataWindow {\n private range: WindowRange;\n public data: DataRow[];\n public rowCount = 0;\n constructor({ from, to }: RangeLike) {\n log(`constructor ${from} - ${to}`);\n this.range = new WindowRange(from, to);\n //internal data is always 0 based, we add range.from to determine an offset\n this.data = new Array(to - from);\n // window.dataWindow = this.data;\n // log(`constructor initial range ${from} - ${to}`);\n }\n\n setRowCount = (rowCount: number) => {\n // log(`rowCount => ${rowCount}`);\n if (rowCount < this.data.length) {\n this.data.length = rowCount;\n }\n this.rowCount = rowCount;\n };\n\n // return true if existing row was updated\n add(data: DataRow) {\n const [index] = data;\n if (this.isWithinRange(index)) {\n const internalIndex = index - this.range.from;\n const isUpdate = this.data[internalIndex] !== undefined;\n this.data[internalIndex] = data;\n return isUpdate;\n } else {\n return false;\n }\n }\n\n getAtIndex(index: number) {\n return this.range.isWithin(index) &&\n this.data[index - this.range.from] != null\n ? this.data[index - this.range.from]\n : undefined;\n }\n\n getByKey(key: string) {\n return this.data.find((row) => row[KEY] === key);\n }\n\n isWithinRange(index: number) {\n return this.range.isWithin(index) && index <= this.rowCount;\n }\n\n setRange(from: number, to: number) {\n log(`setRange ${from} ${to}`);\n if (from !== this.range.from || to !== this.range.to) {\n const [overlapFrom, overlapTo] = this.range.overlap(from, to);\n const newData = new Array(to - from);\n for (let i = overlapFrom; i < overlapTo; i++) {\n const data = this.getAtIndex(i);\n if (data) {\n const index = i - from;\n newData[index] = data;\n }\n }\n this.data = newData;\n this.range.from = from;\n this.range.to = to;\n }\n }\n\n hasData(from: number, to: number) {\n const offset = this.range.from;\n const start = from - offset;\n const end = Math.min(to - offset - 1, this.rowCount - 1);\n return this.data[start] !== undefined && this.data[end] !== undefined;\n }\n\n getData(from: number, to: number): any[] {\n const { from: clientFrom, to: clientTo } = this.range;\n const startOffset = Math.max(0, from - clientFrom);\n const endOffset = Math.min(to - clientFrom, this.rowCount ?? to);\n return this.data.slice(startOffset, endOffset);\n }\n}\n", "export type valueChangeDirection = \"up1\" | \"up2\" | \"down1\" | \"down2\" | \"\";\n\nexport const UP1 = \"up1\";\nexport const UP2 = \"up2\";\nexport const DOWN1 = \"down1\";\nexport const DOWN2 = \"down2\";\n\nexport const isValidNumber = (n: unknown): n is number =>\n typeof n === \"number\" && isFinite(n);\n\nexport function getMovingValueDirection(\n newValue: number,\n direction?: valueChangeDirection,\n prevValue?: number,\n /** the number of decimal places to take into account when highlighting a change */\n decimalPlaces?: number\n): valueChangeDirection {\n if (\n !isFinite(newValue) ||\n prevValue === undefined ||\n direction === undefined\n ) {\n return \"\";\n } else {\n let diff = newValue - prevValue;\n if (diff) {\n // make sure there is still a diff when reduced to number of decimals to be displayed\n if (typeof decimalPlaces === \"number\") {\n diff =\n +newValue.toFixed(decimalPlaces) - +prevValue.toFixed(decimalPlaces);\n }\n }\n\n if (diff) {\n if (direction === \"\") {\n if (diff < 0) {\n return DOWN1;\n } else {\n return UP1;\n }\n } else if (diff > 0) {\n if (direction === DOWN1 || direction === DOWN2 || direction === UP2) {\n return UP1;\n } else {\n return UP2;\n }\n } else if (\n direction === UP1 ||\n direction === UP2 ||\n direction === DOWN2\n ) {\n return DOWN1;\n } else {\n return DOWN2;\n }\n } else {\n return \"\";\n }\n }\n}\n", "//TODO\nexport const formatDate = (date: Date, format: string) => {\n return date.toUTCString();\n};\n", "export interface Event {}\n\nexport type EventListener = (evtName: string, ...args: any[]) => void;\n\nexport type EventListenerMap = {\n [eventName: string]: EventListener[] | EventListener;\n};\n\nfunction isArrayOfListeners(\n listeners: EventListener | EventListener[]\n): listeners is EventListener[] {\n return Array.isArray(listeners);\n}\n\nfunction isOnlyListener(\n listeners: EventListener | EventListener[]\n): listeners is EventListener {\n return !Array.isArray(listeners);\n}\n\nexport interface IEventEmitter {\n emit: (type: string, ...args: unknown[]) => void;\n}\n\nexport class EventEmitter implements IEventEmitter {\n private _events?: EventListenerMap;\n\n constructor() {\n this._events = {};\n }\n\n addListener(type: string, listener: EventListener) {\n if (!this._events) {\n this._events = {};\n }\n\n const listeners = this._events[type];\n\n if (!listeners) {\n this._events[type] = listener;\n } else if (isArrayOfListeners(listeners)) {\n listeners.push(listener);\n } else if (isOnlyListener(listeners)) {\n this._events[type] = [listeners, listener];\n }\n }\n\n removeListener(type: string, listener: EventListener) {\n if (!this._events || !this._events[type]) {\n return;\n }\n\n const listenerOrListeners = this._events[type];\n let position = -1;\n\n if (listenerOrListeners === listener) {\n delete this._events[type];\n } else if (Array.isArray(listenerOrListeners)) {\n for (let i = length; i-- > 0; ) {\n if (listenerOrListeners[i] === listener) {\n position = i;\n break;\n }\n }\n\n if (position < 0) {\n return;\n }\n\n if (listenerOrListeners.length === 1) {\n listenerOrListeners.length = 0;\n delete this._events[type];\n } else {\n listenerOrListeners.splice(position, 1);\n }\n }\n }\n\n removeAllListeners(type: string) {\n if (!this._events) {\n return;\n } else if (type === undefined) {\n delete this._events;\n } else {\n delete this._events[type];\n }\n }\n\n emit(type: string, ...args: unknown[]) {\n if (this._events) {\n const handler = this._events[type];\n if (handler) {\n invokeHandler(handler, type, args);\n }\n const wildcardHandler = this._events[\"*\"];\n if (wildcardHandler) {\n invokeHandler(wildcardHandler, type, args);\n }\n }\n }\n\n once(type: string, listener: EventListener) {\n const handler = (evtName: string, message: unknown) => {\n this.removeListener(evtName, handler);\n listener(evtName, message);\n };\n\n this.on(type, handler);\n }\n\n on(type: string, listener: EventListener) {\n return this.addListener(type, listener);\n }\n}\n\nfunction invokeHandler(\n handler: EventListener | EventListener[],\n type: string,\n args: unknown[]\n) {\n if (isArrayOfListeners(handler)) {\n handler.slice().forEach((listener) => invokeHandler(listener, type, args));\n } else {\n switch (args.length) {\n case 0:\n handler(type);\n break;\n case 1:\n handler(type, args[0]);\n break;\n case 2:\n handler(type, args[0], args[1]);\n break;\n // slower\n default:\n handler.call(null, type, ...args);\n }\n }\n}\n", "export const getUniqueId = () => `hw-${Math.round(Math.random() * 1e5)}`;\n", "const actionKeys = {\n Enter: 'Enter',\n Delete: 'Delete'\n};\n\nconst navigationKeys = {\n Home: 'Home',\n End: 'End',\n ArrowRight: 'ArrowRight',\n ArrowLeft: 'ArrowLeft',\n ArrowDown: 'ArrowDown',\n ArrowUp: 'ArrowUp',\n Tab: 'Tab'\n};\nconst functionKeys = {\n F1: 'F1',\n F2: 'F2',\n F3: 'F3',\n F4: 'F4',\n F5: 'F5',\n F6: 'F6',\n F7: 'F7',\n F8: 'F8',\n F9: 'F9',\n F10: 'F10',\n F11: 'F11',\n F12: 'F12'\n};\n\nconst specialKeys = {\n ...actionKeys,\n ...navigationKeys,\n ...functionKeys\n};\ntype specialKey = keyof typeof specialKeys;\n\nconst isSpecialKey = (key: string): key is specialKey => key in specialKeys;\n\nexport const isCharacterKey = (evt: KeyboardEvent) => {\n if (isSpecialKey(evt.key)) {\n return false;\n }\n if (typeof evt.which === 'number' && evt.which > 0) {\n return !evt.ctrlKey && !evt.metaKey && !evt.altKey && evt.which !== 8;\n }\n};\n\nexport const isQuoteKey = (evt: KeyboardEvent) => {\n return evt.key === '\"' || evt.key === \"'\";\n};\n", "export function invariant(condition: boolean, message: string) {\n if (!condition) {\n const error = new Error(message);\n error.name = 'Invariant Violation';\n // TODO what is framesToPop?\n // @ts-ignore\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n}\n", "// This is the index.browser.js file from nanoid\n// couldn't get original code to work as npm import without crypro warnings -\n// seemed to be picking up node version, not browser version\n\nexport const uuid = (size: number = 21): string => {\n let id: string = '';\n let bytes = crypto.getRandomValues(new Uint8Array(size));\n\n // A compact alternative for `for (var i = 0; i < step; i++)`.\n while (size--) {\n // It is incorrect to use bytes exceeding the alphabet size.\n // The following mask reduces the random byte in the 0-255 value\n // range to the 0-63 value range. Therefore, adding hacks, such\n // as empty string fallback or magic numbers, is unneccessary because\n // the bitmask trims bytes down to the alphabet size.\n let byte = bytes[size] & 63;\n if (byte < 36) {\n // `0-9a-z`\n id += byte.toString(36);\n } else if (byte < 62) {\n // `A-Z`\n id += (byte - 26).toString(36).toUpperCase();\n } else if (byte < 63) {\n id += '_';\n } else {\n id += '-';\n }\n }\n return id;\n};\n", "const PUNCTUATION_STR = String.fromCharCode(8200);\nconst DIGIT_STR = String.fromCharCode(8199);\nconst DECIMALS_AUTO = -1;\n\ntype PadMap = {\n DIGIT: string;\n TWO_DIGITS: string;\n THREE_DIGITS: string;\n FULL_PADDING: [null, string, string, string, string];\n};\n\nconst Space: PadMap = {\n DIGIT: DIGIT_STR,\n TWO_DIGITS: DIGIT_STR + DIGIT_STR,\n THREE_DIGITS: DIGIT_STR + DIGIT_STR + DIGIT_STR,\n FULL_PADDING: [\n null,\n PUNCTUATION_STR + DIGIT_STR,\n PUNCTUATION_STR + DIGIT_STR + DIGIT_STR,\n PUNCTUATION_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR,\n PUNCTUATION_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR,\n ],\n};\n\nconst Zero: PadMap = {\n DIGIT: \"0\",\n TWO_DIGITS: \"00\",\n THREE_DIGITS: \"000\",\n FULL_PADDING: [null, \"0\", \"00\", \"000\", \"0000\"],\n};\n\nfunction padLeft(value: string, maxLength = 6) {\n return (LEADING_FILL + value).slice(-maxLength);\n}\n\nconst LEADING_FILL =\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR;\n\nconst Align = {\n Right: \"right\",\n Center: \"center\",\n Left: \"left\",\n};\n\nfunction pad(n: string, dp: number, Pad: PadMap): string {\n let len = n.length;\n const diff = dp - len;\n\n if (diff > 0) {\n if (diff === 1) {\n n = n + Pad.DIGIT;\n } else if (diff === 2) {\n n = n + Pad.TWO_DIGITS;\n } else if (diff === 3) {\n n = n + Pad.THREE_DIGITS;\n }\n } else {\n if (diff < 0) {\n n = n.slice(0, dp);\n len = dp;\n }\n\n if (Pad === Space && n.charAt(len - 1) === \"0\") {\n n = n.replace(/0+$/, \"\");\n return pad(n, dp, Pad);\n }\n }\n return n;\n}\n\nexport function roundDecimal(\n value?: number,\n align = Align.Right,\n decimals = 4,\n zeroPad?: boolean,\n alignOnDecimals?: boolean\n) {\n if (value === undefined || typeof value !== \"number\" || isNaN(value)) {\n return \"\";\n }\n let integral, fraction, Pad;\n\n const [part1, part2 = \"\"] = value.toString().split(\".\");\n const actualDecimals = part2.length;\n\n integral = parseFloat(part1).toLocaleString();\n\n if (align === Align.Left && alignOnDecimals) {\n integral = padLeft(integral);\n }\n\n if (decimals === DECIMALS_AUTO || actualDecimals === decimals) {\n fraction = part2;\n } else if (actualDecimals > decimals) {\n fraction = parseFloat(\"0.\" + part2)\n .toFixed(decimals)\n .slice(2);\n } else {\n /* eslint-disable no-cond-assign */\n if (\n (Pad = zeroPad\n ? Zero\n : alignOnDecimals && align !== Align.Left\n ? Space\n : null)\n ) {\n if (actualDecimals === 0) {\n fraction = Pad.FULL_PADDING[decimals];\n } else {\n fraction = pad(part2, decimals, Pad);\n }\n } else {\n fraction = part2;\n }\n }\n\n return integral + (fraction ? \".\" + fraction : \"\");\n}\n", "export type RowIndex = {\n [field: string]: number;\n}\n\n// TODO\nexport type Row = {\n [strKey: string]: any;\n} & any[];\n\nexport function addRowsToIndex(rows: Row[], index: RowIndex, indexField: string) {\n for (let idx = 0, len = rows.length; idx < len; idx++) {\n index[rows[idx][indexField]] = idx;\n }\n return index;\n}\n\nexport function indexRows(rows: Row[], indexField: string) {\n return addRowsToIndex(rows, {}, indexField);\n}\n\nexport function isEmptyRow(row: Row) {\n return row[0] === undefined;\n}\n\n// TODO rename\nexport function update(rows: Row[], updates: any) { // TODO\n const results = rows.slice();\n const [[offsetIdx]] = rows;\n for (let i = 0; i < updates.length; i++) {\n const idx = updates[i][0] - offsetIdx;\n // slow, refactor for performance\n if (rows[idx]) {\n const row = rows[idx].slice();\n for (let j = 1; j < updates[i].length; j += 3) {\n row[updates[i][j]] = updates[i][j + 2];\n }\n results[idx] = row;\n } else {\n console.log(`row not found in rows`);\n }\n }\n\n return results;\n}\n", "export const lastWord = (text: string): string => {\n const trimmedText = text.trim();\n const pos = trimmedText.lastIndexOf(' ');\n if (pos === -1) {\n return trimmedText;\n } else {\n return trimmedText.slice(pos + 1);\n }\n};\n"],
5
- "mappings": "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",
6
- "names": ["src_exports", "__export", "DOWN1", "DOWN2", "DataWindow", "EventEmitter", "UP1", "UP2", "WindowRange", "addRowsToIndex", "buildColumnMap", "formatDate", "getFullRange", "getMovingValueDirection", "getUniqueId", "indexRows", "invariant", "isCharacterKey", "isEmptyRow", "isKeyedColumn", "isQuoteKey", "isValidNumber", "itemsChanged", "lastWord", "mapSortCriteria", "metadataKeys", "partition", "projectColumns", "projectUpdates", "resetRange", "roundDecimal", "toColumnDescriptor", "update", "uuid", "__toCommonJS", "partition", "array", "test", "pass", "fail", "i", "len", "itemsChanged", "currentItems", "newItems", "identityProperty", "item", "currentItem", "newItem", "SORT_ASC", "mapSortCriteria", "sortCriteria", "columnMap", "metadataOffset", "s", "columnName", "sortDir", "isKeyedColumn", "column", "toColumnDescriptor", "name", "EMPTY_COLUMN_MAP", "buildColumnMap", "columns", "start", "metadataKeys", "map", "i", "projectUpdates", "updates", "results", "projectColumns", "tableRowColumnMap", "columnCount", "IDX", "RENDER_IDX", "DEPTH", "COUNT", "KEY", "SELECTED", "count", "startIdx", "offset", "selectedRows", "row", "baseRowIdx", "out", "colIdx", "getFullRange", "from", "to", "bufferSize", "rowCount", "rangeSize", "buff", "shortfallBefore", "shortFallAfter", "resetRange", "WindowRange", "index", "KEY", "metadataKeys", "log", "message", "DataWindow", "from", "to", "rowCount", "WindowRange", "data", "index", "internalIndex", "isUpdate", "key", "row", "overlapFrom", "overlapTo", "newData", "i", "offset", "start", "end", "_a", "clientFrom", "clientTo", "startOffset", "endOffset", "UP1", "UP2", "DOWN1", "DOWN2", "isValidNumber", "n", "getMovingValueDirection", "newValue", "direction", "prevValue", "decimalPlaces", "diff", "formatDate", "date", "format", "isArrayOfListeners", "listeners", "isOnlyListener", "EventEmitter", "type", "listener", "listenerOrListeners", "position", "args", "handler", "invokeHandler", "wildcardHandler", "evtName", "message", "getUniqueId", "actionKeys", "navigationKeys", "functionKeys", "specialKeys", "isSpecialKey", "key", "isCharacterKey", "evt", "isQuoteKey", "invariant", "condition", "message", "error", "uuid", "size", "id", "bytes", "byte", "PUNCTUATION_STR", "DIGIT_STR", "DECIMALS_AUTO", "Space", "Zero", "padLeft", "value", "maxLength", "LEADING_FILL", "Align", "pad", "n", "dp", "Pad", "len", "diff", "roundDecimal", "align", "decimals", "zeroPad", "alignOnDecimals", "integral", "fraction", "part1", "part2", "actualDecimals", "addRowsToIndex", "rows", "index", "indexField", "idx", "len", "indexRows", "isEmptyRow", "row", "update", "updates", "results", "offsetIdx", "i", "j", "lastWord", "text", "trimmedText", "pos"]
3
+ "sources": ["../../../packages/vuu-utils/src/index.ts", "../../../packages/vuu-utils/src/array-utils.ts", "../../../packages/vuu-utils/src/column-utils.ts", "../../../packages/vuu-utils/src/range-utils.ts", "../../../packages/vuu-utils/src/DataWindow.ts", "../../../packages/vuu-utils/src/data-utils.ts", "../../../packages/vuu-utils/src/date-utils.ts", "../../../packages/vuu-utils/src/event-emitter.ts", "../../../packages/vuu-utils/src/getUniqueId.ts", "../../../packages/vuu-utils/src/input-utils.ts", "../../../packages/vuu-utils/src/invariant.ts", "../../../packages/vuu-utils/src/nanoid/index.ts", "../../../packages/vuu-utils/src/round-decimal.ts", "../../../packages/vuu-utils/src/row-utils.ts", "../../../packages/vuu-utils/src/sort-utils.ts", "../../../packages/vuu-utils/src/text-utils.ts"],
4
+ "sourcesContent": ["export * from \"./array-utils\";\nexport * from \"./column-utils\";\nexport * from \"./DataWindow\";\nexport * from \"./data-utils\";\nexport * from \"./date-utils\";\nexport * from \"./event-emitter\";\nexport * from \"./getUniqueId\";\nexport * from \"./input-utils\";\nexport * from \"./invariant\";\nexport * from \"./nanoid\";\nexport * from \"./round-decimal\";\nexport * from \"./range-utils\";\nexport * from \"./row-utils\";\nexport * from \"./sort-utils\";\nexport * from \"./text-utils\";\n", "export type PartitionTest<T> = (value: T, index: number) => boolean;\n\nexport function partition<T>(\n array: T[],\n test: PartitionTest<T>,\n pass: T[] = [],\n fail: T[] = []\n): [T[], T[]] {\n for (let i = 0, len = array.length; i < len; i++) {\n (test(array[i], i) ? pass : fail).push(array[i]);\n }\n return [pass, fail];\n}\n\n// Note order of items can be different between arrays\n// If an identityProperty is not defined, item identity is used\nexport function itemsChanged<T = unknown>(\n currentItems: T[],\n newItems: T[],\n identityProperty?: string\n) {\n if (currentItems.length !== newItems.length) {\n return true;\n }\n if (identityProperty === undefined) {\n return !currentItems.every((item) => newItems.includes(item));\n } else {\n return currentItems.some(\n (currentItem) =>\n newItems.findIndex(\n (newItem) =>\n (newItem as { [key: string]: unknown })[identityProperty] ===\n (currentItem as { [key: string]: unknown })[identityProperty]\n ) === -1\n );\n }\n}\n", "import {\n ColumnDescriptor,\n GroupColumnDescriptor,\n KeyedColumnDescriptor,\n} from \"@vuu-ui/vuu-datagrid-types\";\nimport { VuuGroupBy } from \"@vuu-ui/vuu-protocol-types\";\nimport { instrumentPriceColumns } from \"../../../showcase/src/examples/DataGrid/columnMetaData\";\nimport { Row } from \"./row-utils\";\n\nexport interface ColumnMap {\n [columnName: string]: number;\n}\n\nconst SORT_ASC = \"asc\";\n\nexport type SortCriteriaItem = string | [string, \"asc\"]; // TODO where is 'desc'?\n\nexport function mapSortCriteria(\n sortCriteria: SortCriteriaItem[],\n columnMap: ColumnMap,\n metadataOffset = 0\n): [number, \"asc\"][] {\n return sortCriteria.map((s) => {\n if (typeof s === \"string\") {\n return [columnMap[s] + metadataOffset, \"asc\"];\n } else if (Array.isArray(s)) {\n const [columnName, sortDir] = s;\n return [columnMap[columnName] + metadataOffset, sortDir || SORT_ASC];\n } else {\n throw Error(\"columnUtils.mapSortCriteria invalid input\");\n }\n });\n}\n\nexport const isKeyedColumn = (\n column: ColumnDescriptor\n): column is KeyedColumnDescriptor => {\n return typeof (column as KeyedColumnDescriptor).key === \"number\";\n};\n\nexport const isNumericColumn = ({ serverDataType }: ColumnDescriptor) =>\n serverDataType === undefined\n ? false\n : serverDataType === \"int\" ||\n serverDataType === \"long\" ||\n serverDataType === \"double\";\n\nexport const toColumnDescriptor = (name: string): ColumnDescriptor => ({\n name,\n});\n\nconst EMPTY_COLUMN_MAP = {} as const;\n\nexport function buildColumnMap(\n columns?: (KeyedColumnDescriptor | string)[]\n): ColumnMap {\n const start = metadataKeys.count;\n if (columns) {\n return columns.reduce((map, column, i) => {\n if (typeof column === \"string\") {\n map[column] = start + i;\n } else if (typeof column.key === \"number\") {\n map[column.name] = column.key;\n } else {\n map[column.name] = start + i;\n }\n return map;\n }, {} as ColumnMap);\n } else {\n return EMPTY_COLUMN_MAP;\n }\n}\n\nexport function projectUpdates(updates: number[]): number[] {\n const results: number[] = [];\n const metadataOffset = metadataKeys.count - 2;\n for (let i = 0; i < updates.length; i += 3) {\n results[i] = updates[i] + metadataOffset;\n results[i + 1] = updates[i + 1];\n results[i + 2] = updates[i + 2];\n }\n return results;\n}\n\nexport function projectColumns(\n tableRowColumnMap: ColumnMap,\n columns: ColumnDescriptor[]\n) {\n const columnCount = columns.length;\n const { IDX, RENDER_IDX, DEPTH, COUNT, KEY, SELECTED, count } = metadataKeys;\n return (startIdx: number, offset: number, selectedRows: Row[] = []) =>\n (row: Row, i: number) => {\n // selectedRows are indices of rows within underlying dataset (not sorted or filtered)\n // row is the original row from this set, with original index in IDX pos, which might\n // be overwritten with a different value below if rows are sorted/filtered\n const baseRowIdx: any = row[IDX]; // TODO\n const out = [];\n for (let i = 0; i < columnCount; i++) {\n const colIdx = tableRowColumnMap[columns[i].name];\n out[count + i] = row[colIdx];\n }\n\n out[IDX] = startIdx + i + offset;\n out[RENDER_IDX] = 0;\n out[DEPTH] = 0;\n out[COUNT] = 0;\n out[KEY] = row[tableRowColumnMap.KEY];\n out[SELECTED] = selectedRows.includes(baseRowIdx) ? 1 : 0;\n return out;\n };\n}\n\nexport const metadataKeys = {\n IDX: 0,\n RENDER_IDX: 1,\n IS_LEAF: 2,\n IS_EXPANDED: 3,\n DEPTH: 4,\n COUNT: 5,\n KEY: 6,\n SELECTED: 7,\n count: 8,\n // TODO following only used in datamodel\n PARENT_IDX: \"parent_idx\",\n IDX_POINTER: \"idx_pointer\",\n FILTER_COUNT: \"filter_count\",\n NEXT_FILTER_IDX: \"next_filter_idx\",\n} as const;\n\n// This method mutates the passed columns array\nconst insertColumn = (\n columns: KeyedColumnDescriptor[],\n column: KeyedColumnDescriptor\n) => {\n const { originalIdx } = column;\n if (typeof originalIdx === \"number\") {\n for (let i = 0; i < columns.length; i++) {\n const { originalIdx: colIdx = -1 } = columns[i];\n if (colIdx > originalIdx) {\n columns.splice(i, 0, column);\n return columns;\n }\n }\n }\n columns.push(column);\n return columns;\n};\n\nexport const flattenColumnGroup = (\n columns: KeyedColumnDescriptor[]\n): KeyedColumnDescriptor[] => {\n if (columns[0]?.isGroup) {\n const [groupColumn, ...nonGroupedColumns] = columns as [\n GroupColumnDescriptor,\n ...KeyedColumnDescriptor[]\n ];\n groupColumn.columns.forEach((groupColumn) => {\n insertColumn(nonGroupedColumns, groupColumn);\n });\n return nonGroupedColumns;\n } else {\n return columns;\n }\n};\n\nexport function extractGroupColumn(\n columns: KeyedColumnDescriptor[],\n groupBy?: VuuGroupBy\n): [GroupColumnDescriptor | null, KeyedColumnDescriptor[]] {\n if (groupBy && groupBy.length > 0) {\n const flattenedColumns = flattenColumnGroup(columns);\n // Note: groupedColumns will be in column order, not groupBy order\n const [groupedColumns, rest] = flattenedColumns.reduce(\n (result, column, i) => {\n const [g, r] = result;\n if (groupBy.includes(column.name)) {\n g.push({\n ...column,\n originalIdx: i,\n });\n } else {\n r.push(column);\n }\n\n return result;\n },\n [[], []] as [KeyedColumnDescriptor[], KeyedColumnDescriptor[]]\n );\n if (groupedColumns.length !== groupBy.length) {\n throw Error(\n `extractGroupColumn: no column definition found for all groupBy cols ${JSON.stringify(\n groupBy\n )} `\n );\n }\n const groupCount = groupBy.length;\n const groupCols: KeyedColumnDescriptor[] = groupBy.map((name, idx) => {\n // Keep the cols in same order defined on groupBy\n const column = groupedColumns.find(\n (col) => col.name === name\n ) as KeyedColumnDescriptor;\n return {\n ...column,\n groupLevel: groupCount - idx,\n };\n });\n\n const groupCol = {\n key: -1,\n name: \"group-col\",\n heading: [\"group-col\"],\n isGroup: true,\n columns: groupCols,\n width: groupCols.map((c) => c.width).reduce((a, b) => a + b) + 100,\n } as GroupColumnDescriptor;\n\n return [groupCol, rest];\n }\n return [null, flattenColumnGroup(columns)];\n}\n\nexport const isGroupColumn = (\n column: KeyedColumnDescriptor\n): column is GroupColumnDescriptor => column.isGroup === true;\n", "export interface VuuRange {\n from: number;\n to: number;\n bufferSize?: number;\n reset?: boolean;\n}\n\ninterface FromToRange {\n from: number;\n to: number;\n}\n\nexport function getFullRange(\n { from, to }: VuuRange,\n bufferSize: number = 0,\n rowCount: number = Number.MAX_SAFE_INTEGER\n): FromToRange {\n if (bufferSize === 0) {\n return { from, to: Math.min(to, rowCount) };\n } else if (from === 0) {\n return { from, to: Math.min(to + bufferSize, rowCount) };\n } else {\n const rangeSize = to - from;\n const buff = Math.round(bufferSize / 2);\n const shortfallBefore = from - buff < 0;\n const shortFallAfter = rowCount - (to + buff) < 0;\n\n if (shortfallBefore && shortFallAfter) {\n return { from: 0, to: rowCount };\n } else if (shortfallBefore) {\n return { from: 0, to: rangeSize + bufferSize };\n } else if (shortFallAfter) {\n return { from: Math.max(0, rowCount - (rangeSize + bufferSize)), to: rowCount };\n } else {\n return { from: from - buff, to: to + buff };\n }\n }\n}\n\nexport function resetRange({ from, to, bufferSize = 0 }: VuuRange): VuuRange {\n return {\n from: 0,\n to: to - from,\n bufferSize,\n reset: true\n };\n}\n\nexport class WindowRange {\n public from: number;\n public to: number;\n\n constructor(from: number, to: number) {\n this.from = from;\n this.to = to;\n }\n\n public isWithin(index: number) {\n return index >= this.from && index < this.to;\n }\n\n //find the overlap of this range and a new one\n public overlap(from: number, to: number): [number, number] {\n return from >= this.to || to < this.from\n ? [0, 0]\n : [Math.max(from, this.from), Math.min(to, this.to)];\n }\n\n public copy(): WindowRange {\n return new WindowRange(this.from, this.to);\n }\n}\n", "import { WindowRange } from \"./range-utils\";\nimport { metadataKeys } from \"./column-utils\";\n\nexport type DataItem = string | number | boolean;\nexport type DataRow = [\n /** index */\n number,\n /** render index */\n number,\n /** isLeaf */\n boolean,\n /** isExpanded */\n boolean,\n /** depth */\n number,\n /** child count */\n number,\n /** key */\n string,\n /** selected */\n number,\n /** data values */\n ...DataItem[]\n];\nexport type RangeLike = { from: number; to: number };\n\nconst { KEY } = metadataKeys;\n\nconst log = (message: string) =>\n console.log(`%c[DataWindow] ${message}`, \"color: purple;font-weight: bold;\");\nexport class DataWindow {\n private range: WindowRange;\n public data: DataRow[];\n public rowCount = 0;\n constructor({ from, to }: RangeLike) {\n log(`constructor ${from} - ${to}`);\n this.range = new WindowRange(from, to);\n //internal data is always 0 based, we add range.from to determine an offset\n this.data = new Array(to - from);\n // window.dataWindow = this.data;\n // log(`constructor initial range ${from} - ${to}`);\n }\n\n setRowCount = (rowCount: number) => {\n // log(`rowCount => ${rowCount}`);\n if (rowCount < this.data.length) {\n this.data.length = rowCount;\n }\n this.rowCount = rowCount;\n };\n\n // return true if existing row was updated\n add(data: DataRow) {\n const [index] = data;\n if (this.isWithinRange(index)) {\n const internalIndex = index - this.range.from;\n const isUpdate = this.data[internalIndex] !== undefined;\n this.data[internalIndex] = data;\n return isUpdate;\n } else {\n return false;\n }\n }\n\n getAtIndex(index: number) {\n return this.range.isWithin(index) &&\n this.data[index - this.range.from] != null\n ? this.data[index - this.range.from]\n : undefined;\n }\n\n getByKey(key: string) {\n return this.data.find((row) => row[KEY] === key);\n }\n\n isWithinRange(index: number) {\n return this.range.isWithin(index) && index <= this.rowCount;\n }\n\n setRange(from: number, to: number) {\n log(`setRange ${from} ${to}`);\n if (from !== this.range.from || to !== this.range.to) {\n const [overlapFrom, overlapTo] = this.range.overlap(from, to);\n const newData = new Array(to - from);\n for (let i = overlapFrom; i < overlapTo; i++) {\n const data = this.getAtIndex(i);\n if (data) {\n const index = i - from;\n newData[index] = data;\n }\n }\n this.data = newData;\n this.range.from = from;\n this.range.to = to;\n }\n }\n\n hasData(from: number, to: number) {\n const offset = this.range.from;\n const start = from - offset;\n const end = Math.min(to - offset - 1, this.rowCount - 1);\n return this.data[start] !== undefined && this.data[end] !== undefined;\n }\n\n getData(from: number, to: number): any[] {\n const { from: clientFrom, to: clientTo } = this.range;\n const startOffset = Math.max(0, from - clientFrom);\n const endOffset = Math.min(to - clientFrom, this.rowCount ?? to);\n return this.data.slice(startOffset, endOffset);\n }\n}\n", "export type valueChangeDirection = \"up1\" | \"up2\" | \"down1\" | \"down2\" | \"\";\n\nexport const UP1 = \"up1\";\nexport const UP2 = \"up2\";\nexport const DOWN1 = \"down1\";\nexport const DOWN2 = \"down2\";\n\nexport const isValidNumber = (n: unknown): n is number =>\n typeof n === \"number\" && isFinite(n);\n\nexport function getMovingValueDirection(\n newValue: number,\n direction?: valueChangeDirection,\n prevValue?: number,\n /** the number of decimal places to take into account when highlighting a change */\n decimalPlaces?: number\n): valueChangeDirection {\n if (\n !isFinite(newValue) ||\n prevValue === undefined ||\n direction === undefined\n ) {\n return \"\";\n } else {\n let diff = newValue - prevValue;\n if (diff) {\n // make sure there is still a diff when reduced to number of decimals to be displayed\n if (typeof decimalPlaces === \"number\") {\n diff =\n +newValue.toFixed(decimalPlaces) - +prevValue.toFixed(decimalPlaces);\n }\n }\n\n if (diff) {\n if (direction === \"\") {\n if (diff < 0) {\n return DOWN1;\n } else {\n return UP1;\n }\n } else if (diff > 0) {\n if (direction === DOWN1 || direction === DOWN2 || direction === UP2) {\n return UP1;\n } else {\n return UP2;\n }\n } else if (\n direction === UP1 ||\n direction === UP2 ||\n direction === DOWN2\n ) {\n return DOWN1;\n } else {\n return DOWN2;\n }\n } else {\n return \"\";\n }\n }\n}\n", "//TODO\nexport const formatDate = (date: Date, format: string) => {\n return date.toUTCString();\n};\n", "export interface Event {}\n\nexport type EventListener = (evtName: string, ...args: any[]) => void;\n\nexport type EventListenerMap = {\n [eventName: string]: EventListener[] | EventListener;\n};\n\nfunction isArrayOfListeners(\n listeners: EventListener | EventListener[]\n): listeners is EventListener[] {\n return Array.isArray(listeners);\n}\n\nfunction isOnlyListener(\n listeners: EventListener | EventListener[]\n): listeners is EventListener {\n return !Array.isArray(listeners);\n}\n\nexport interface IEventEmitter {\n emit: (type: string, ...args: unknown[]) => void;\n}\n\nexport class EventEmitter implements IEventEmitter {\n private _events?: EventListenerMap;\n\n constructor() {\n this._events = {};\n }\n\n addListener(type: string, listener: EventListener) {\n if (!this._events) {\n this._events = {};\n }\n\n const listeners = this._events[type];\n\n if (!listeners) {\n this._events[type] = listener;\n } else if (isArrayOfListeners(listeners)) {\n listeners.push(listener);\n } else if (isOnlyListener(listeners)) {\n this._events[type] = [listeners, listener];\n }\n }\n\n removeListener(type: string, listener: EventListener) {\n if (!this._events || !this._events[type]) {\n return;\n }\n\n const listenerOrListeners = this._events[type];\n let position = -1;\n\n if (listenerOrListeners === listener) {\n delete this._events[type];\n } else if (Array.isArray(listenerOrListeners)) {\n for (let i = length; i-- > 0; ) {\n if (listenerOrListeners[i] === listener) {\n position = i;\n break;\n }\n }\n\n if (position < 0) {\n return;\n }\n\n if (listenerOrListeners.length === 1) {\n listenerOrListeners.length = 0;\n delete this._events[type];\n } else {\n listenerOrListeners.splice(position, 1);\n }\n }\n }\n\n removeAllListeners(type: string) {\n if (!this._events) {\n return;\n } else if (type === undefined) {\n delete this._events;\n } else {\n delete this._events[type];\n }\n }\n\n emit(type: string, ...args: unknown[]) {\n if (this._events) {\n const handler = this._events[type];\n if (handler) {\n invokeHandler(handler, type, args);\n }\n const wildcardHandler = this._events[\"*\"];\n if (wildcardHandler) {\n invokeHandler(wildcardHandler, type, args);\n }\n }\n }\n\n once(type: string, listener: EventListener) {\n const handler = (evtName: string, message: unknown) => {\n this.removeListener(evtName, handler);\n listener(evtName, message);\n };\n\n this.on(type, handler);\n }\n\n on(type: string, listener: EventListener) {\n return this.addListener(type, listener);\n }\n}\n\nfunction invokeHandler(\n handler: EventListener | EventListener[],\n type: string,\n args: unknown[]\n) {\n if (isArrayOfListeners(handler)) {\n handler.slice().forEach((listener) => invokeHandler(listener, type, args));\n } else {\n switch (args.length) {\n case 0:\n handler(type);\n break;\n case 1:\n handler(type, args[0]);\n break;\n case 2:\n handler(type, args[0], args[1]);\n break;\n // slower\n default:\n handler.call(null, type, ...args);\n }\n }\n}\n", "export const getUniqueId = () => `hw-${Math.round(Math.random() * 1e5)}`;\n", "const actionKeys = {\n Enter: 'Enter',\n Delete: 'Delete'\n};\n\nconst navigationKeys = {\n Home: 'Home',\n End: 'End',\n ArrowRight: 'ArrowRight',\n ArrowLeft: 'ArrowLeft',\n ArrowDown: 'ArrowDown',\n ArrowUp: 'ArrowUp',\n Tab: 'Tab'\n};\nconst functionKeys = {\n F1: 'F1',\n F2: 'F2',\n F3: 'F3',\n F4: 'F4',\n F5: 'F5',\n F6: 'F6',\n F7: 'F7',\n F8: 'F8',\n F9: 'F9',\n F10: 'F10',\n F11: 'F11',\n F12: 'F12'\n};\n\nconst specialKeys = {\n ...actionKeys,\n ...navigationKeys,\n ...functionKeys\n};\ntype specialKey = keyof typeof specialKeys;\n\nconst isSpecialKey = (key: string): key is specialKey => key in specialKeys;\n\nexport const isCharacterKey = (evt: KeyboardEvent) => {\n if (isSpecialKey(evt.key)) {\n return false;\n }\n if (typeof evt.which === 'number' && evt.which > 0) {\n return !evt.ctrlKey && !evt.metaKey && !evt.altKey && evt.which !== 8;\n }\n};\n\nexport const isQuoteKey = (evt: KeyboardEvent) => {\n return evt.key === '\"' || evt.key === \"'\";\n};\n", "export function invariant(condition: boolean, message: string) {\n if (!condition) {\n const error = new Error(message);\n error.name = 'Invariant Violation';\n // TODO what is framesToPop?\n // @ts-ignore\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n}\n", "// This is the index.browser.js file from nanoid\n// couldn't get original code to work as npm import without crypro warnings -\n// seemed to be picking up node version, not browser version\n\nexport const uuid = (size: number = 21): string => {\n let id: string = '';\n let bytes = crypto.getRandomValues(new Uint8Array(size));\n\n // A compact alternative for `for (var i = 0; i < step; i++)`.\n while (size--) {\n // It is incorrect to use bytes exceeding the alphabet size.\n // The following mask reduces the random byte in the 0-255 value\n // range to the 0-63 value range. Therefore, adding hacks, such\n // as empty string fallback or magic numbers, is unneccessary because\n // the bitmask trims bytes down to the alphabet size.\n let byte = bytes[size] & 63;\n if (byte < 36) {\n // `0-9a-z`\n id += byte.toString(36);\n } else if (byte < 62) {\n // `A-Z`\n id += (byte - 26).toString(36).toUpperCase();\n } else if (byte < 63) {\n id += '_';\n } else {\n id += '-';\n }\n }\n return id;\n};\n", "const PUNCTUATION_STR = String.fromCharCode(8200);\nconst DIGIT_STR = String.fromCharCode(8199);\nconst DECIMALS_AUTO = -1;\n\ntype PadMap = {\n DIGIT: string;\n TWO_DIGITS: string;\n THREE_DIGITS: string;\n FULL_PADDING: [null, string, string, string, string];\n};\n\nconst Space: PadMap = {\n DIGIT: DIGIT_STR,\n TWO_DIGITS: DIGIT_STR + DIGIT_STR,\n THREE_DIGITS: DIGIT_STR + DIGIT_STR + DIGIT_STR,\n FULL_PADDING: [\n null,\n PUNCTUATION_STR + DIGIT_STR,\n PUNCTUATION_STR + DIGIT_STR + DIGIT_STR,\n PUNCTUATION_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR,\n PUNCTUATION_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR,\n ],\n};\n\nconst Zero: PadMap = {\n DIGIT: \"0\",\n TWO_DIGITS: \"00\",\n THREE_DIGITS: \"000\",\n FULL_PADDING: [null, \"0\", \"00\", \"000\", \"0000\"],\n};\n\nfunction padLeft(value: string, maxLength = 6) {\n return (LEADING_FILL + value).slice(-maxLength);\n}\n\nconst LEADING_FILL =\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR;\n\nconst Align = {\n Right: \"right\",\n Center: \"center\",\n Left: \"left\",\n};\n\nfunction pad(n: string, dp: number, Pad: PadMap): string {\n let len = n.length;\n const diff = dp - len;\n\n if (diff > 0) {\n if (diff === 1) {\n n = n + Pad.DIGIT;\n } else if (diff === 2) {\n n = n + Pad.TWO_DIGITS;\n } else if (diff === 3) {\n n = n + Pad.THREE_DIGITS;\n }\n } else {\n if (diff < 0) {\n n = n.slice(0, dp);\n len = dp;\n }\n\n if (Pad === Space && n.charAt(len - 1) === \"0\") {\n n = n.replace(/0+$/, \"\");\n return pad(n, dp, Pad);\n }\n }\n return n;\n}\n\nexport function roundDecimal(\n value?: number,\n align = Align.Right,\n decimals = 4,\n zeroPad?: boolean,\n alignOnDecimals?: boolean\n) {\n if (value === undefined || typeof value !== \"number\" || isNaN(value)) {\n return \"\";\n }\n let integral, fraction, Pad;\n\n const [part1, part2 = \"\"] = value.toString().split(\".\");\n const actualDecimals = part2.length;\n\n integral = parseFloat(part1).toLocaleString();\n\n if (align === Align.Left && alignOnDecimals) {\n integral = padLeft(integral);\n }\n\n if (decimals === DECIMALS_AUTO || actualDecimals === decimals) {\n fraction = part2;\n } else if (actualDecimals > decimals) {\n fraction = parseFloat(\"0.\" + part2)\n .toFixed(decimals)\n .slice(2);\n } else {\n /* eslint-disable no-cond-assign */\n if (\n (Pad = zeroPad\n ? Zero\n : alignOnDecimals && align !== Align.Left\n ? Space\n : null)\n ) {\n if (actualDecimals === 0) {\n fraction = Pad.FULL_PADDING[decimals];\n } else {\n fraction = pad(part2, decimals, Pad);\n }\n } else {\n fraction = part2;\n }\n }\n\n return integral + (fraction ? \".\" + fraction : \"\");\n}\n", "export type RowIndex = {\n [field: string]: number;\n}\n\n// TODO\nexport type Row = {\n [strKey: string]: any;\n} & any[];\n\nexport function addRowsToIndex(rows: Row[], index: RowIndex, indexField: string) {\n for (let idx = 0, len = rows.length; idx < len; idx++) {\n index[rows[idx][indexField]] = idx;\n }\n return index;\n}\n\nexport function indexRows(rows: Row[], indexField: string) {\n return addRowsToIndex(rows, {}, indexField);\n}\n\nexport function isEmptyRow(row: Row) {\n return row[0] === undefined;\n}\n\n// TODO rename\nexport function update(rows: Row[], updates: any) { // TODO\n const results = rows.slice();\n const [[offsetIdx]] = rows;\n for (let i = 0; i < updates.length; i++) {\n const idx = updates[i][0] - offsetIdx;\n // slow, refactor for performance\n if (rows[idx]) {\n const row = rows[idx].slice();\n for (let j = 1; j < updates[i].length; j += 3) {\n row[updates[i][j]] = updates[i][j + 2];\n }\n results[idx] = row;\n } else {\n console.log(`row not found in rows`);\n }\n }\n\n return results;\n}\n", "import {\n ColumnDescriptor,\n KeyedColumnDescriptor,\n} from \"@vuu-ui/vuu-datagrid-types\";\nimport { VuuSort, VuuSortCol, VuuSortType } from \"@vuu-ui/vuu-protocol-types\";\n\nconst toggle = (sortType: VuuSortType) => (sortType === \"A\" ? \"D\" : \"A\");\n\n// Given an existing sort spec and a column we wish to sort by,\n// construct and return a new sort spec.\nexport const applySort = (\n { sortDefs }: VuuSort,\n { name: column }: ColumnDescriptor,\n extendSort = false,\n sortType?: VuuSortType\n): VuuSort => {\n if (extendSort) {\n return {\n sortDefs: sortDefs.concat({\n column,\n sortType: sortType ?? \"A\",\n }),\n };\n }\n\n const newSortType =\n typeof sortType === \"string\"\n ? sortType\n : sortDefs.length === 1 && sortDefs[0].column === column\n ? toggle(sortDefs[0].sortType)\n : \"A\";\n return {\n sortDefs: [{ column, sortType: newSortType }],\n };\n};\n\nexport const setSortColumn = (\n { sortDefs }: VuuSort,\n column: KeyedColumnDescriptor,\n sortType?: \"A\" | \"D\"\n): VuuSort => {\n if (sortType === undefined) {\n const columnSort = sortDefs.find((item) => item.column === column.name);\n if (columnSort) {\n return {\n sortDefs: [\n {\n column: column.name,\n sortType: columnSort.sortType === \"A\" ? \"D\" : \"A\",\n },\n ],\n };\n }\n }\n return { sortDefs: [{ column: column.name, sortType: sortType ?? \"A\" }] };\n};\n\nexport const addSortColumn = (\n { sortDefs }: VuuSort,\n column: KeyedColumnDescriptor,\n sortType: \"A\" | \"D\" = \"A\"\n): VuuSort => {\n const sortEntry: VuuSortCol = { column: column.name, sortType };\n if (sortDefs.length > 0) {\n return {\n sortDefs: sortDefs.concat(sortEntry),\n };\n } else {\n return { sortDefs: [sortEntry] };\n }\n};\n", "export const lastWord = (text: string): string => {\n const trimmedText = text.trim();\n const pos = trimmedText.lastIndexOf(' ');\n if (pos === -1) {\n return trimmedText;\n } else {\n return trimmedText.slice(pos + 1);\n }\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["src_exports", "__export", "DOWN1", "DOWN2", "DataWindow", "EventEmitter", "UP1", "UP2", "WindowRange", "addRowsToIndex", "addSortColumn", "applySort", "buildColumnMap", "extractGroupColumn", "flattenColumnGroup", "formatDate", "getFullRange", "getMovingValueDirection", "getUniqueId", "indexRows", "invariant", "isCharacterKey", "isEmptyRow", "isGroupColumn", "isKeyedColumn", "isNumericColumn", "isQuoteKey", "isValidNumber", "itemsChanged", "lastWord", "mapSortCriteria", "metadataKeys", "partition", "projectColumns", "projectUpdates", "resetRange", "roundDecimal", "setSortColumn", "toColumnDescriptor", "update", "uuid", "__toCommonJS", "partition", "array", "test", "pass", "fail", "i", "len", "itemsChanged", "currentItems", "newItems", "identityProperty", "item", "currentItem", "newItem", "SORT_ASC", "mapSortCriteria", "sortCriteria", "columnMap", "metadataOffset", "s", "columnName", "sortDir", "isKeyedColumn", "column", "isNumericColumn", "serverDataType", "toColumnDescriptor", "name", "EMPTY_COLUMN_MAP", "buildColumnMap", "columns", "start", "metadataKeys", "map", "i", "projectUpdates", "updates", "results", "projectColumns", "tableRowColumnMap", "columnCount", "IDX", "RENDER_IDX", "DEPTH", "COUNT", "KEY", "SELECTED", "count", "startIdx", "offset", "selectedRows", "row", "baseRowIdx", "out", "colIdx", "insertColumn", "originalIdx", "flattenColumnGroup", "_a", "groupColumn", "nonGroupedColumns", "extractGroupColumn", "groupBy", "flattenedColumns", "groupedColumns", "rest", "result", "g", "r", "groupCount", "groupCols", "idx", "col", "a", "b", "isGroupColumn", "getFullRange", "from", "to", "bufferSize", "rowCount", "rangeSize", "buff", "shortfallBefore", "shortFallAfter", "resetRange", "WindowRange", "index", "KEY", "metadataKeys", "log", "message", "DataWindow", "from", "to", "rowCount", "WindowRange", "data", "index", "internalIndex", "isUpdate", "key", "row", "overlapFrom", "overlapTo", "newData", "i", "offset", "start", "end", "_a", "clientFrom", "clientTo", "startOffset", "endOffset", "UP1", "UP2", "DOWN1", "DOWN2", "isValidNumber", "n", "getMovingValueDirection", "newValue", "direction", "prevValue", "decimalPlaces", "diff", "formatDate", "date", "format", "isArrayOfListeners", "listeners", "isOnlyListener", "EventEmitter", "type", "listener", "listenerOrListeners", "position", "args", "handler", "invokeHandler", "wildcardHandler", "evtName", "message", "getUniqueId", "actionKeys", "navigationKeys", "functionKeys", "specialKeys", "isSpecialKey", "key", "isCharacterKey", "evt", "isQuoteKey", "invariant", "condition", "message", "error", "uuid", "size", "id", "bytes", "byte", "PUNCTUATION_STR", "DIGIT_STR", "DECIMALS_AUTO", "Space", "Zero", "padLeft", "value", "maxLength", "LEADING_FILL", "Align", "pad", "n", "dp", "Pad", "len", "diff", "roundDecimal", "align", "decimals", "zeroPad", "alignOnDecimals", "integral", "fraction", "part1", "part2", "actualDecimals", "addRowsToIndex", "rows", "index", "indexField", "idx", "len", "indexRows", "isEmptyRow", "row", "update", "updates", "results", "offsetIdx", "i", "j", "toggle", "sortType", "applySort", "sortDefs", "column", "extendSort", "newSortType", "setSortColumn", "columnSort", "item", "addSortColumn", "sortEntry", "lastWord", "text", "trimmedText", "pos"]
7
7
  }
package/esm/index.js CHANGED
@@ -1,2 +1,2 @@
1
- function q(t,e,n=[],r=[]){for(let o=0,i=t.length;o<i;o++)(e(t[o],o)?n:r).push(t[o]);return[n,r]}function Q(t,e,n){return t.length!==e.length?!0:n===void 0?!t.every(r=>e.includes(r)):t.some(r=>e.findIndex(o=>o[n]===r[n])===-1)}var N="asc";function J(t,e,n=0){return t.map(r=>{if(typeof r=="string")return[e[r]+n,"asc"];if(Array.isArray(r)){let[o,i]=r;return[e[o]+n,i||N]}else throw Error("columnUtils.mapSortCriteria invalid input")})}function z(t){return typeof t.key=="number"}var ee=t=>({name:t}),k={};function te(t){let e=h.count;return t?t.reduce((n,r,o)=>(typeof r=="string"?n[r]=e+o:typeof r.key=="number"?n[r.name]=r.key:n[r.name]=e+o,n),{}):k}function ne(t){let e=[],n=h.count-2;for(let r=0;r<t.length;r+=3)e[r]=t[r]+n,e[r+1]=t[r+1],e[r+2]=t[r+2];return e}function re(t,e){let n=e.length,{IDX:r,RENDER_IDX:o,DEPTH:i,COUNT:a,KEY:u,SELECTED:m,count:f}=h;return(p,A,C=[])=>(b,S)=>{let K=b[r],l=[];for(let g=0;g<n;g++){let M=t[e[g].name];l[f+g]=b[M]}return l[r]=p+S+A,l[o]=0,l[i]=0,l[a]=0,l[u]=b[t.KEY],l[m]=C.includes(K)?1:0,l}}var h={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"};function ie({from:t,to:e},n=0,r=Number.MAX_SAFE_INTEGER){if(n===0)return{from:t,to:Math.min(e,r)};if(t===0)return{from:t,to:Math.min(e+n,r)};{let o=e-t,i=Math.round(n/2),a=t-i<0,u=r-(e+i)<0;return a&&u?{from:0,to:r}:a?{from:0,to:o+n}:u?{from:Math.max(0,r-(o+n)),to:r}:{from:t-i,to:e+i}}}function se({from:t,to:e,bufferSize:n=0}){return{from:0,to:e-t,bufferSize:n,reset:!0}}var c=class{constructor(e,n){this.from=e,this.to=n}isWithin(e){return e>=this.from&&e<this.to}overlap(e,n){return e>=this.to||n<this.from?[0,0]:[Math.max(e,this.from),Math.min(n,this.to)]}copy(){return new c(this.from,this.to)}};var{KEY:U}=h,R=t=>console.log(`%c[DataWindow] ${t}`,"color: purple;font-weight: bold;"),_=class{constructor({from:e,to:n}){this.rowCount=0;this.setRowCount=e=>{e<this.data.length&&(this.data.length=e),this.rowCount=e};R(`constructor ${e} - ${n}`),this.range=new c(e,n),this.data=new Array(n-e)}add(e){let[n]=e;if(this.isWithinRange(n)){let r=n-this.range.from,o=this.data[r]!==void 0;return this.data[r]=e,o}else return!1}getAtIndex(e){return this.range.isWithin(e)&&this.data[e-this.range.from]!=null?this.data[e-this.range.from]:void 0}getByKey(e){return this.data.find(n=>n[U]===e)}isWithinRange(e){return this.range.isWithin(e)&&e<=this.rowCount}setRange(e,n){if(R(`setRange ${e} ${n}`),e!==this.range.from||n!==this.range.to){let[r,o]=this.range.overlap(e,n),i=new Array(n-e);for(let a=r;a<o;a++){let u=this.getAtIndex(a);if(u){let m=a-e;i[m]=u}}this.data=i,this.range.from=e,this.range.to=n}}hasData(e,n){let r=this.range.from,o=e-r,i=Math.min(n-r-1,this.rowCount-1);return this.data[o]!==void 0&&this.data[i]!==void 0}getData(e,n){var u;let{from:r,to:o}=this.range,i=Math.max(0,e-r),a=Math.min(n-r,(u=this.rowCount)!=null?u:n);return this.data.slice(i,a)}};var x="up1",D="up2",E="down1",T="down2",ce=t=>typeof t=="number"&&isFinite(t);function me(t,e,n,r){if(!isFinite(t)||n===void 0||e===void 0)return"";{let o=t-n;return o&&typeof r=="number"&&(o=+t.toFixed(r)-+n.toFixed(r)),o?e===""?o<0?E:x:o>0?e===E||e===T||e===D?x:D:e===x||e===D||e===T?E:T:""}}var he=(t,e)=>t.toUTCString();function v(t){return Array.isArray(t)}function G(t){return!Array.isArray(t)}var L=class{constructor(){this._events={}}addListener(e,n){this._events||(this._events={});let r=this._events[e];r?v(r)?r.push(n):G(r)&&(this._events[e]=[r,n]):this._events[e]=n}removeListener(e,n){if(!this._events||!this._events[e])return;let r=this._events[e],o=-1;if(r===n)delete this._events[e];else if(Array.isArray(r)){for(let i=length;i-- >0;)if(r[i]===n){o=i;break}if(o<0)return;r.length===1?(r.length=0,delete this._events[e]):r.splice(o,1)}}removeAllListeners(e){if(this._events)e===void 0?delete this._events:delete this._events[e];else return}emit(e,...n){if(this._events){let r=this._events[e];r&&y(r,e,n);let o=this._events["*"];o&&y(o,e,n)}}once(e,n){let r=(o,i)=>{this.removeListener(o,r),n(o,i)};this.on(e,r)}on(e,n){return this.addListener(e,n)}};function y(t,e,n){if(v(t))t.slice().forEach(r=>y(r,e,n));else switch(n.length){case 0:t(e);break;case 1:t(e,n[0]);break;case 2:t(e,n[0],n[1]);break;default:t.call(null,e,...n)}}var be=()=>`hw-${Math.round(Math.random()*1e5)}`;var O={Enter:"Enter",Delete:"Delete"},P={Home:"Home",End:"End",ArrowRight:"ArrowRight",ArrowLeft:"ArrowLeft",ArrowDown:"ArrowDown",ArrowUp:"ArrowUp",Tab:"Tab"},W={F1:"F1",F2:"F2",F3:"F3",F4:"F4",F5:"F5",F6:"F6",F7:"F7",F8:"F8",F9:"F9",F10:"F10",F11:"F11",F12:"F12"},H={...O,...P,...W},X=t=>t in H,De=t=>{if(X(t.key))return!1;if(typeof t.which=="number"&&t.which>0)return!t.ctrlKey&&!t.metaKey&&!t.altKey&&t.which!==8},Ee=t=>t.key==='"'||t.key==="'";function ye(t,e){if(!t){let n=new Error(e);throw n.name="Invariant Violation",n.framesToPop=1,n}}var Re=(t=21)=>{let e="",n=crypto.getRandomValues(new Uint8Array(t));for(;t--;){let r=n[t]&63;r<36?e+=r.toString(36):r<62?e+=(r-26).toString(36).toUpperCase():r<63?e+="_":e+="-"}return e};var d=String.fromCharCode(8200),s=String.fromCharCode(8199),$=-1,w={DIGIT:s,TWO_DIGITS:s+s,THREE_DIGITS:s+s+s,FULL_PADDING:[null,d+s,d+s+s,d+s+s+s,d+s+s+s+s]},Y={DIGIT:"0",TWO_DIGITS:"00",THREE_DIGITS:"000",FULL_PADDING:[null,"0","00","000","0000"]};function V(t,e=6){return(j+t).slice(-e)}var j=s+s+s+s+s+s+s+s+s,I={Right:"right",Center:"center",Left:"left"};function F(t,e,n){let r=t.length,o=e-r;if(o>0)o===1?t=t+n.DIGIT:o===2?t=t+n.TWO_DIGITS:o===3&&(t=t+n.THREE_DIGITS);else if(o<0&&(t=t.slice(0,e),r=e),n===w&&t.charAt(r-1)==="0")return t=t.replace(/0+$/,""),F(t,e,n);return t}function Le(t,e=I.Right,n=4,r,o){if(t===void 0||typeof t!="number"||isNaN(t))return"";let i,a,u,[m,f=""]=t.toString().split("."),p=f.length;return i=parseFloat(m).toLocaleString(),e===I.Left&&o&&(i=V(i)),n===$||p===n?a=f:p>n?a=parseFloat("0."+f).toFixed(n).slice(2):(u=r?Y:o&&e!==I.Left?w:null)?p===0?a=u.FULL_PADDING[n]:a=F(f,n,u):a=f,i+(a?"."+a:"")}function B(t,e,n){for(let r=0,o=t.length;r<o;r++)e[t[r][n]]=r;return e}function we(t,e){return B(t,{},e)}function Fe(t){return t[0]===void 0}function Ae(t,e){let n=t.slice(),[[r]]=t;for(let o=0;o<e.length;o++){let i=e[o][0]-r;if(t[i]){let a=t[i].slice();for(let u=1;u<e[o].length;u+=3)a[e[o][u]]=e[o][u+2];n[i]=a}else console.log("row not found in rows")}return n}var Se=t=>{let e=t.trim(),n=e.lastIndexOf(" ");return n===-1?e:e.slice(n+1)};export{E as DOWN1,T as DOWN2,_ as DataWindow,L as EventEmitter,x as UP1,D as UP2,c as WindowRange,B as addRowsToIndex,te as buildColumnMap,he as formatDate,ie as getFullRange,me as getMovingValueDirection,be as getUniqueId,we as indexRows,ye as invariant,De as isCharacterKey,Fe as isEmptyRow,z as isKeyedColumn,Ee as isQuoteKey,ce as isValidNumber,Q as itemsChanged,Se as lastWord,J as mapSortCriteria,h as metadataKeys,q as partition,re as projectColumns,ne as projectUpdates,se as resetRange,Le as roundDecimal,ee as toColumnDescriptor,Ae as update,Re as uuid};
1
+ function B(t,e,n=[],r=[]){for(let o=0,i=t.length;o<i;o++)(e(t[o],o)?n:r).push(t[o]);return[n,r]}function z(t,e,n){return t.length!==e.length?!0:n===void 0?!t.every(r=>e.includes(r)):t.some(r=>e.findIndex(o=>o[n]===r[n])===-1)}var M="asc";function te(t,e,n=0){return t.map(r=>{if(typeof r=="string")return[e[r]+n,"asc"];if(Array.isArray(r)){let[o,i]=r;return[e[o]+n,i||M]}else throw Error("columnUtils.mapSortCriteria invalid input")})}var ne=t=>typeof t.key=="number",re=({serverDataType:t})=>t===void 0?!1:t==="int"||t==="long"||t==="double",oe=t=>({name:t}),k={};function ie(t){let e=h.count;return t?t.reduce((n,r,o)=>(typeof r=="string"?n[r]=e+o:typeof r.key=="number"?n[r.name]=r.key:n[r.name]=e+o,n),{}):k}function se(t){let e=[],n=h.count-2;for(let r=0;r<t.length;r+=3)e[r]=t[r]+n,e[r+1]=t[r+1],e[r+2]=t[r+2];return e}function ue(t,e){let n=e.length,{IDX:r,RENDER_IDX:o,DEPTH:i,COUNT:s,KEY:l,SELECTED:c,count:a}=h;return(f,g,D=[])=>(b,K)=>{let G=b[r],m=[];for(let d=0;d<n;d++){let N=t[e[d].name];m[a+d]=b[N]}return m[r]=f+K+g,m[o]=0,m[i]=0,m[s]=0,m[l]=b[t.KEY],m[c]=D.includes(G)?1:0,m}}var h={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"},U=(t,e)=>{let{originalIdx:n}=e;if(typeof n=="number")for(let r=0;r<t.length;r++){let{originalIdx:o=-1}=t[r];if(o>n)return t.splice(r,0,e),t}return t.push(e),t},R=t=>{var e;if((e=t[0])!=null&&e.isGroup){let[n,...r]=t;return n.columns.forEach(o=>{U(r,o)}),r}else return t};function le(t,e){if(e&&e.length>0){let n=R(t),[r,o]=n.reduce((c,a,f)=>{let[g,D]=c;return e.includes(a.name)?g.push({...a,originalIdx:f}):D.push(a),c},[[],[]]);if(r.length!==e.length)throw Error(`extractGroupColumn: no column definition found for all groupBy cols ${JSON.stringify(e)} `);let i=e.length,s=e.map((c,a)=>({...r.find(g=>g.name===c),groupLevel:i-a}));return[{key:-1,name:"group-col",heading:["group-col"],isGroup:!0,columns:s,width:s.map(c=>c.width).reduce((c,a)=>c+a)+100},o]}return[null,R(t)]}var ae=t=>t.isGroup===!0;function fe({from:t,to:e},n=0,r=Number.MAX_SAFE_INTEGER){if(n===0)return{from:t,to:Math.min(e,r)};if(t===0)return{from:t,to:Math.min(e+n,r)};{let o=e-t,i=Math.round(n/2),s=t-i<0,l=r-(e+i)<0;return s&&l?{from:0,to:r}:s?{from:0,to:o+n}:l?{from:Math.max(0,r-(o+n)),to:r}:{from:t-i,to:e+i}}}function me({from:t,to:e,bufferSize:n=0}){return{from:0,to:e-t,bufferSize:n,reset:!0}}var p=class{constructor(e,n){this.from=e,this.to=n}isWithin(e){return e>=this.from&&e<this.to}overlap(e,n){return e>=this.to||n<this.from?[0,0]:[Math.max(e,this.from),Math.min(n,this.to)]}copy(){return new p(this.from,this.to)}};var{KEY:O}=h,_=t=>console.log(`%c[DataWindow] ${t}`,"color: purple;font-weight: bold;"),w=class{constructor({from:e,to:n}){this.rowCount=0;this.setRowCount=e=>{e<this.data.length&&(this.data.length=e),this.rowCount=e};_(`constructor ${e} - ${n}`),this.range=new p(e,n),this.data=new Array(n-e)}add(e){let[n]=e;if(this.isWithinRange(n)){let r=n-this.range.from,o=this.data[r]!==void 0;return this.data[r]=e,o}else return!1}getAtIndex(e){return this.range.isWithin(e)&&this.data[e-this.range.from]!=null?this.data[e-this.range.from]:void 0}getByKey(e){return this.data.find(n=>n[O]===e)}isWithinRange(e){return this.range.isWithin(e)&&e<=this.rowCount}setRange(e,n){if(_(`setRange ${e} ${n}`),e!==this.range.from||n!==this.range.to){let[r,o]=this.range.overlap(e,n),i=new Array(n-e);for(let s=r;s<o;s++){let l=this.getAtIndex(s);if(l){let c=s-e;i[c]=l}}this.data=i,this.range.from=e,this.range.to=n}}hasData(e,n){let r=this.range.from,o=e-r,i=Math.min(n-r-1,this.rowCount-1);return this.data[o]!==void 0&&this.data[i]!==void 0}getData(e,n){var l;let{from:r,to:o}=this.range,i=Math.max(0,e-r),s=Math.min(n-r,(l=this.rowCount)!=null?l:n);return this.data.slice(i,s)}};var C="up1",y="up2",E="down1",I="down2",xe=t=>typeof t=="number"&&isFinite(t);function De(t,e,n,r){if(!isFinite(t)||n===void 0||e===void 0)return"";{let o=t-n;return o&&typeof r=="number"&&(o=+t.toFixed(r)-+n.toFixed(r)),o?e===""?o<0?E:C:o>0?e===E||e===I||e===y?C:y:e===C||e===y||e===I?E:I:""}}var Ce=(t,e)=>t.toUTCString();function v(t){return Array.isArray(t)}function V(t){return!Array.isArray(t)}var A=class{constructor(){this._events={}}addListener(e,n){this._events||(this._events={});let r=this._events[e];r?v(r)?r.push(n):V(r)&&(this._events[e]=[r,n]):this._events[e]=n}removeListener(e,n){if(!this._events||!this._events[e])return;let r=this._events[e],o=-1;if(r===n)delete this._events[e];else if(Array.isArray(r)){for(let i=length;i-- >0;)if(r[i]===n){o=i;break}if(o<0)return;r.length===1?(r.length=0,delete this._events[e]):r.splice(o,1)}}removeAllListeners(e){if(this._events)e===void 0?delete this._events:delete this._events[e];else return}emit(e,...n){if(this._events){let r=this._events[e];r&&T(r,e,n);let o=this._events["*"];o&&T(o,e,n)}}once(e,n){let r=(o,i)=>{this.removeListener(o,r),n(o,i)};this.on(e,r)}on(e,n){return this.addListener(e,n)}};function T(t,e,n){if(v(t))t.slice().forEach(r=>T(r,e,n));else switch(n.length){case 0:t(e);break;case 1:t(e,n[0]);break;case 2:t(e,n[0],n[1]);break;default:t.call(null,e,...n)}}var Ie=()=>`hw-${Math.round(Math.random()*1e5)}`;var P={Enter:"Enter",Delete:"Delete"},W={Home:"Home",End:"End",ArrowRight:"ArrowRight",ArrowLeft:"ArrowLeft",ArrowDown:"ArrowDown",ArrowUp:"ArrowUp",Tab:"Tab"},H={F1:"F1",F2:"F2",F3:"F3",F4:"F4",F5:"F5",F6:"F6",F7:"F7",F8:"F8",F9:"F9",F10:"F10",F11:"F11",F12:"F12"},X={...P,...W,...H},$=t=>t in X,Le=t=>{if($(t.key))return!1;if(typeof t.which=="number"&&t.which>0)return!t.ctrlKey&&!t.metaKey&&!t.altKey&&t.which!==8},Re=t=>t.key==='"'||t.key==="'";function we(t,e){if(!t){let n=new Error(e);throw n.name="Invariant Violation",n.framesToPop=1,n}}var ve=(t=21)=>{let e="",n=crypto.getRandomValues(new Uint8Array(t));for(;t--;){let r=n[t]&63;r<36?e+=r.toString(36):r<62?e+=(r-26).toString(36).toUpperCase():r<63?e+="_":e+="-"}return e};var x=String.fromCharCode(8200),u=String.fromCharCode(8199),Y=-1,S={DIGIT:u,TWO_DIGITS:u+u,THREE_DIGITS:u+u+u,FULL_PADDING:[null,x+u,x+u+u,x+u+u+u,x+u+u+u+u]},j={DIGIT:"0",TWO_DIGITS:"00",THREE_DIGITS:"000",FULL_PADDING:[null,"0","00","000","0000"]};function q(t,e=6){return(J+t).slice(-e)}var J=u+u+u+u+u+u+u+u+u,L={Right:"right",Center:"center",Left:"left"};function F(t,e,n){let r=t.length,o=e-r;if(o>0)o===1?t=t+n.DIGIT:o===2?t=t+n.TWO_DIGITS:o===3&&(t=t+n.THREE_DIGITS);else if(o<0&&(t=t.slice(0,e),r=e),n===S&&t.charAt(r-1)==="0")return t=t.replace(/0+$/,""),F(t,e,n);return t}function Fe(t,e=L.Right,n=4,r,o){if(t===void 0||typeof t!="number"||isNaN(t))return"";let i,s,l,[c,a=""]=t.toString().split("."),f=a.length;return i=parseFloat(c).toLocaleString(),e===L.Left&&o&&(i=q(i)),n===Y||f===n?s=a:f>n?s=parseFloat("0."+a).toFixed(n).slice(2):(l=r?j:o&&e!==L.Left?S:null)?f===0?s=l.FULL_PADDING[n]:s=F(a,n,l):s=a,i+(s?"."+s:"")}function Q(t,e,n){for(let r=0,o=t.length;r<o;r++)e[t[r][n]]=r;return e}function Ge(t,e){return Q(t,{},e)}function Ne(t){return t[0]===void 0}function Me(t,e){let n=t.slice(),[[r]]=t;for(let o=0;o<e.length;o++){let i=e[o][0]-r;if(t[i]){let s=t[i].slice();for(let l=1;l<e[o].length;l+=3)s[e[o][l]]=e[o][l+2];n[i]=s}else console.log("row not found in rows")}return n}var Z=t=>t==="A"?"D":"A",Ue=({sortDefs:t},{name:e},n=!1,r)=>{if(n)return{sortDefs:t.concat({column:e,sortType:r!=null?r:"A"})};let o=typeof r=="string"?r:t.length===1&&t[0].column===e?Z(t[0].sortType):"A";return{sortDefs:[{column:e,sortType:o}]}},Oe=({sortDefs:t},e,n)=>{if(n===void 0){let r=t.find(o=>o.column===e.name);if(r)return{sortDefs:[{column:e.name,sortType:r.sortType==="A"?"D":"A"}]}}return{sortDefs:[{column:e.name,sortType:n!=null?n:"A"}]}},Ve=({sortDefs:t},e,n="A")=>{let r={column:e.name,sortType:n};return t.length>0?{sortDefs:t.concat(r)}:{sortDefs:[r]}};var We=t=>{let e=t.trim(),n=e.lastIndexOf(" ");return n===-1?e:e.slice(n+1)};export{E as DOWN1,I as DOWN2,w as DataWindow,A as EventEmitter,C as UP1,y as UP2,p as WindowRange,Q as addRowsToIndex,Ve as addSortColumn,Ue as applySort,ie as buildColumnMap,le as extractGroupColumn,R as flattenColumnGroup,Ce as formatDate,fe as getFullRange,De as getMovingValueDirection,Ie as getUniqueId,Ge as indexRows,we as invariant,Le as isCharacterKey,Ne as isEmptyRow,ae as isGroupColumn,ne as isKeyedColumn,re as isNumericColumn,Re as isQuoteKey,xe as isValidNumber,z as itemsChanged,We as lastWord,te as mapSortCriteria,h as metadataKeys,B as partition,ue as projectColumns,se as projectUpdates,me as resetRange,Fe as roundDecimal,Oe as setSortColumn,oe as toColumnDescriptor,Me as update,ve as uuid};
2
2
  //# sourceMappingURL=index.js.map
package/esm/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../packages/vuu-utils/src/array-utils.ts", "../../../packages/vuu-utils/src/column-utils.ts", "../../../packages/vuu-utils/src/range-utils.ts", "../../../packages/vuu-utils/src/DataWindow.ts", "../../../packages/vuu-utils/src/data-utils.ts", "../../../packages/vuu-utils/src/date-utils.ts", "../../../packages/vuu-utils/src/event-emitter.ts", "../../../packages/vuu-utils/src/getUniqueId.ts", "../../../packages/vuu-utils/src/input-utils.ts", "../../../packages/vuu-utils/src/invariant.ts", "../../../packages/vuu-utils/src/nanoid/index.ts", "../../../packages/vuu-utils/src/round-decimal.ts", "../../../packages/vuu-utils/src/row-utils.ts", "../../../packages/vuu-utils/src/text-utils.ts"],
4
- "sourcesContent": ["export type PartitionTest<T> = (value: T, index: number) => boolean;\n\nexport function partition<T>(\n array: T[],\n test: PartitionTest<T>,\n pass: T[] = [],\n fail: T[] = []\n): [T[], T[]] {\n for (let i = 0, len = array.length; i < len; i++) {\n (test(array[i], i) ? pass : fail).push(array[i]);\n }\n return [pass, fail];\n}\n\n// Note order of items can be different between arrays\n// If an identityProperty is not defined, item identity is used\nexport function itemsChanged<T = unknown>(\n currentItems: T[],\n newItems: T[],\n identityProperty?: string\n) {\n if (currentItems.length !== newItems.length) {\n return true;\n }\n if (identityProperty === undefined) {\n return !currentItems.every((item) => newItems.includes(item));\n } else {\n return currentItems.some(\n (currentItem) =>\n newItems.findIndex(\n (newItem) =>\n (newItem as { [key: string]: unknown })[identityProperty] ===\n (currentItem as { [key: string]: unknown })[identityProperty]\n ) === -1\n );\n }\n}\n", "import {\n ColumnDescriptor,\n KeyedColumnDescriptor,\n} from \"@vuu-ui/vuu-datagrid-types\";\nimport { Row } from \"./row-utils\";\n\nexport interface ColumnMap {\n [columnName: string]: number;\n}\n\nconst SORT_ASC = \"asc\";\n\nexport type SortCriteriaItem = string | [string, \"asc\"]; // TODO where is 'desc'?\n\nexport function mapSortCriteria(\n sortCriteria: SortCriteriaItem[],\n columnMap: ColumnMap,\n metadataOffset = 0\n): [number, \"asc\"][] {\n return sortCriteria.map((s) => {\n if (typeof s === \"string\") {\n return [columnMap[s] + metadataOffset, \"asc\"];\n } else if (Array.isArray(s)) {\n const [columnName, sortDir] = s;\n return [columnMap[columnName] + metadataOffset, sortDir || SORT_ASC];\n } else {\n throw Error(\"columnUtils.mapSortCriteria invalid input\");\n }\n });\n}\n\nexport function isKeyedColumn(\n column: ColumnDescriptor\n): column is KeyedColumnDescriptor {\n return typeof (column as KeyedColumnDescriptor).key === \"number\";\n}\n\nexport const toColumnDescriptor = (name: string): ColumnDescriptor => ({\n name,\n});\n\nconst EMPTY_COLUMN_MAP = {} as const;\n\nexport function buildColumnMap(\n columns?: (KeyedColumnDescriptor | string)[]\n): ColumnMap {\n const start = metadataKeys.count;\n if (columns) {\n return columns.reduce((map, column, i) => {\n if (typeof column === \"string\") {\n map[column] = start + i;\n } else if (typeof column.key === \"number\") {\n map[column.name] = column.key;\n } else {\n map[column.name] = start + i;\n }\n return map;\n }, {} as ColumnMap);\n } else {\n return EMPTY_COLUMN_MAP;\n }\n}\n\nexport function projectUpdates(updates: number[]): number[] {\n const results: number[] = [];\n const metadataOffset = metadataKeys.count - 2;\n for (let i = 0; i < updates.length; i += 3) {\n results[i] = updates[i] + metadataOffset;\n results[i + 1] = updates[i + 1];\n results[i + 2] = updates[i + 2];\n }\n return results;\n}\n\nexport function projectColumns(\n tableRowColumnMap: ColumnMap,\n columns: ColumnDescriptor[]\n) {\n const columnCount = columns.length;\n const { IDX, RENDER_IDX, DEPTH, COUNT, KEY, SELECTED, count } = metadataKeys;\n return (startIdx: number, offset: number, selectedRows: Row[] = []) =>\n (row: Row, i: number) => {\n // selectedRows are indices of rows within underlying dataset (not sorted or filtered)\n // row is the original row from this set, with original index in IDX pos, which might\n // be overwritten with a different value below if rows are sorted/filtered\n const baseRowIdx: any = row[IDX]; // TODO\n const out = [];\n for (let i = 0; i < columnCount; i++) {\n const colIdx = tableRowColumnMap[columns[i].name];\n out[count + i] = row[colIdx];\n }\n\n out[IDX] = startIdx + i + offset;\n out[RENDER_IDX] = 0;\n out[DEPTH] = 0;\n out[COUNT] = 0;\n out[KEY] = row[tableRowColumnMap.KEY];\n out[SELECTED] = selectedRows.includes(baseRowIdx) ? 1 : 0;\n return out;\n };\n}\n\nexport const metadataKeys = {\n IDX: 0,\n RENDER_IDX: 1,\n IS_LEAF: 2,\n IS_EXPANDED: 3,\n DEPTH: 4,\n COUNT: 5,\n KEY: 6,\n SELECTED: 7,\n count: 8,\n // TODO following only used in datamodel\n PARENT_IDX: \"parent_idx\",\n IDX_POINTER: \"idx_pointer\",\n FILTER_COUNT: \"filter_count\",\n NEXT_FILTER_IDX: \"next_filter_idx\",\n} as const;\n", "export interface VuuRange {\n from: number;\n to: number;\n bufferSize?: number;\n reset?: boolean;\n}\n\ninterface FromToRange {\n from: number;\n to: number;\n}\n\nexport function getFullRange(\n { from, to }: VuuRange,\n bufferSize: number = 0,\n rowCount: number = Number.MAX_SAFE_INTEGER\n): FromToRange {\n if (bufferSize === 0) {\n return { from, to: Math.min(to, rowCount) };\n } else if (from === 0) {\n return { from, to: Math.min(to + bufferSize, rowCount) };\n } else {\n const rangeSize = to - from;\n const buff = Math.round(bufferSize / 2);\n const shortfallBefore = from - buff < 0;\n const shortFallAfter = rowCount - (to + buff) < 0;\n\n if (shortfallBefore && shortFallAfter) {\n return { from: 0, to: rowCount };\n } else if (shortfallBefore) {\n return { from: 0, to: rangeSize + bufferSize };\n } else if (shortFallAfter) {\n return { from: Math.max(0, rowCount - (rangeSize + bufferSize)), to: rowCount };\n } else {\n return { from: from - buff, to: to + buff };\n }\n }\n}\n\nexport function resetRange({ from, to, bufferSize = 0 }: VuuRange): VuuRange {\n return {\n from: 0,\n to: to - from,\n bufferSize,\n reset: true\n };\n}\n\nexport class WindowRange {\n public from: number;\n public to: number;\n\n constructor(from: number, to: number) {\n this.from = from;\n this.to = to;\n }\n\n public isWithin(index: number) {\n return index >= this.from && index < this.to;\n }\n\n //find the overlap of this range and a new one\n public overlap(from: number, to: number): [number, number] {\n return from >= this.to || to < this.from\n ? [0, 0]\n : [Math.max(from, this.from), Math.min(to, this.to)];\n }\n\n public copy(): WindowRange {\n return new WindowRange(this.from, this.to);\n }\n}\n", "import { WindowRange } from \"./range-utils\";\nimport { metadataKeys } from \"./column-utils\";\n\nexport type DataItem = string | number | boolean;\nexport type DataRow = [\n /** index */\n number,\n /** render index */\n number,\n /** isLeaf */\n boolean,\n /** isExpanded */\n boolean,\n /** depth */\n number,\n /** child count */\n number,\n /** key */\n string,\n /** selected */\n number,\n /** data values */\n ...DataItem[]\n];\nexport type RangeLike = { from: number; to: number };\n\nconst { KEY } = metadataKeys;\n\nconst log = (message: string) =>\n console.log(`%c[DataWindow] ${message}`, \"color: purple;font-weight: bold;\");\nexport class DataWindow {\n private range: WindowRange;\n public data: DataRow[];\n public rowCount = 0;\n constructor({ from, to }: RangeLike) {\n log(`constructor ${from} - ${to}`);\n this.range = new WindowRange(from, to);\n //internal data is always 0 based, we add range.from to determine an offset\n this.data = new Array(to - from);\n // window.dataWindow = this.data;\n // log(`constructor initial range ${from} - ${to}`);\n }\n\n setRowCount = (rowCount: number) => {\n // log(`rowCount => ${rowCount}`);\n if (rowCount < this.data.length) {\n this.data.length = rowCount;\n }\n this.rowCount = rowCount;\n };\n\n // return true if existing row was updated\n add(data: DataRow) {\n const [index] = data;\n if (this.isWithinRange(index)) {\n const internalIndex = index - this.range.from;\n const isUpdate = this.data[internalIndex] !== undefined;\n this.data[internalIndex] = data;\n return isUpdate;\n } else {\n return false;\n }\n }\n\n getAtIndex(index: number) {\n return this.range.isWithin(index) &&\n this.data[index - this.range.from] != null\n ? this.data[index - this.range.from]\n : undefined;\n }\n\n getByKey(key: string) {\n return this.data.find((row) => row[KEY] === key);\n }\n\n isWithinRange(index: number) {\n return this.range.isWithin(index) && index <= this.rowCount;\n }\n\n setRange(from: number, to: number) {\n log(`setRange ${from} ${to}`);\n if (from !== this.range.from || to !== this.range.to) {\n const [overlapFrom, overlapTo] = this.range.overlap(from, to);\n const newData = new Array(to - from);\n for (let i = overlapFrom; i < overlapTo; i++) {\n const data = this.getAtIndex(i);\n if (data) {\n const index = i - from;\n newData[index] = data;\n }\n }\n this.data = newData;\n this.range.from = from;\n this.range.to = to;\n }\n }\n\n hasData(from: number, to: number) {\n const offset = this.range.from;\n const start = from - offset;\n const end = Math.min(to - offset - 1, this.rowCount - 1);\n return this.data[start] !== undefined && this.data[end] !== undefined;\n }\n\n getData(from: number, to: number): any[] {\n const { from: clientFrom, to: clientTo } = this.range;\n const startOffset = Math.max(0, from - clientFrom);\n const endOffset = Math.min(to - clientFrom, this.rowCount ?? to);\n return this.data.slice(startOffset, endOffset);\n }\n}\n", "export type valueChangeDirection = \"up1\" | \"up2\" | \"down1\" | \"down2\" | \"\";\n\nexport const UP1 = \"up1\";\nexport const UP2 = \"up2\";\nexport const DOWN1 = \"down1\";\nexport const DOWN2 = \"down2\";\n\nexport const isValidNumber = (n: unknown): n is number =>\n typeof n === \"number\" && isFinite(n);\n\nexport function getMovingValueDirection(\n newValue: number,\n direction?: valueChangeDirection,\n prevValue?: number,\n /** the number of decimal places to take into account when highlighting a change */\n decimalPlaces?: number\n): valueChangeDirection {\n if (\n !isFinite(newValue) ||\n prevValue === undefined ||\n direction === undefined\n ) {\n return \"\";\n } else {\n let diff = newValue - prevValue;\n if (diff) {\n // make sure there is still a diff when reduced to number of decimals to be displayed\n if (typeof decimalPlaces === \"number\") {\n diff =\n +newValue.toFixed(decimalPlaces) - +prevValue.toFixed(decimalPlaces);\n }\n }\n\n if (diff) {\n if (direction === \"\") {\n if (diff < 0) {\n return DOWN1;\n } else {\n return UP1;\n }\n } else if (diff > 0) {\n if (direction === DOWN1 || direction === DOWN2 || direction === UP2) {\n return UP1;\n } else {\n return UP2;\n }\n } else if (\n direction === UP1 ||\n direction === UP2 ||\n direction === DOWN2\n ) {\n return DOWN1;\n } else {\n return DOWN2;\n }\n } else {\n return \"\";\n }\n }\n}\n", "//TODO\nexport const formatDate = (date: Date, format: string) => {\n return date.toUTCString();\n};\n", "export interface Event {}\n\nexport type EventListener = (evtName: string, ...args: any[]) => void;\n\nexport type EventListenerMap = {\n [eventName: string]: EventListener[] | EventListener;\n};\n\nfunction isArrayOfListeners(\n listeners: EventListener | EventListener[]\n): listeners is EventListener[] {\n return Array.isArray(listeners);\n}\n\nfunction isOnlyListener(\n listeners: EventListener | EventListener[]\n): listeners is EventListener {\n return !Array.isArray(listeners);\n}\n\nexport interface IEventEmitter {\n emit: (type: string, ...args: unknown[]) => void;\n}\n\nexport class EventEmitter implements IEventEmitter {\n private _events?: EventListenerMap;\n\n constructor() {\n this._events = {};\n }\n\n addListener(type: string, listener: EventListener) {\n if (!this._events) {\n this._events = {};\n }\n\n const listeners = this._events[type];\n\n if (!listeners) {\n this._events[type] = listener;\n } else if (isArrayOfListeners(listeners)) {\n listeners.push(listener);\n } else if (isOnlyListener(listeners)) {\n this._events[type] = [listeners, listener];\n }\n }\n\n removeListener(type: string, listener: EventListener) {\n if (!this._events || !this._events[type]) {\n return;\n }\n\n const listenerOrListeners = this._events[type];\n let position = -1;\n\n if (listenerOrListeners === listener) {\n delete this._events[type];\n } else if (Array.isArray(listenerOrListeners)) {\n for (let i = length; i-- > 0; ) {\n if (listenerOrListeners[i] === listener) {\n position = i;\n break;\n }\n }\n\n if (position < 0) {\n return;\n }\n\n if (listenerOrListeners.length === 1) {\n listenerOrListeners.length = 0;\n delete this._events[type];\n } else {\n listenerOrListeners.splice(position, 1);\n }\n }\n }\n\n removeAllListeners(type: string) {\n if (!this._events) {\n return;\n } else if (type === undefined) {\n delete this._events;\n } else {\n delete this._events[type];\n }\n }\n\n emit(type: string, ...args: unknown[]) {\n if (this._events) {\n const handler = this._events[type];\n if (handler) {\n invokeHandler(handler, type, args);\n }\n const wildcardHandler = this._events[\"*\"];\n if (wildcardHandler) {\n invokeHandler(wildcardHandler, type, args);\n }\n }\n }\n\n once(type: string, listener: EventListener) {\n const handler = (evtName: string, message: unknown) => {\n this.removeListener(evtName, handler);\n listener(evtName, message);\n };\n\n this.on(type, handler);\n }\n\n on(type: string, listener: EventListener) {\n return this.addListener(type, listener);\n }\n}\n\nfunction invokeHandler(\n handler: EventListener | EventListener[],\n type: string,\n args: unknown[]\n) {\n if (isArrayOfListeners(handler)) {\n handler.slice().forEach((listener) => invokeHandler(listener, type, args));\n } else {\n switch (args.length) {\n case 0:\n handler(type);\n break;\n case 1:\n handler(type, args[0]);\n break;\n case 2:\n handler(type, args[0], args[1]);\n break;\n // slower\n default:\n handler.call(null, type, ...args);\n }\n }\n}\n", "export const getUniqueId = () => `hw-${Math.round(Math.random() * 1e5)}`;\n", "const actionKeys = {\n Enter: 'Enter',\n Delete: 'Delete'\n};\n\nconst navigationKeys = {\n Home: 'Home',\n End: 'End',\n ArrowRight: 'ArrowRight',\n ArrowLeft: 'ArrowLeft',\n ArrowDown: 'ArrowDown',\n ArrowUp: 'ArrowUp',\n Tab: 'Tab'\n};\nconst functionKeys = {\n F1: 'F1',\n F2: 'F2',\n F3: 'F3',\n F4: 'F4',\n F5: 'F5',\n F6: 'F6',\n F7: 'F7',\n F8: 'F8',\n F9: 'F9',\n F10: 'F10',\n F11: 'F11',\n F12: 'F12'\n};\n\nconst specialKeys = {\n ...actionKeys,\n ...navigationKeys,\n ...functionKeys\n};\ntype specialKey = keyof typeof specialKeys;\n\nconst isSpecialKey = (key: string): key is specialKey => key in specialKeys;\n\nexport const isCharacterKey = (evt: KeyboardEvent) => {\n if (isSpecialKey(evt.key)) {\n return false;\n }\n if (typeof evt.which === 'number' && evt.which > 0) {\n return !evt.ctrlKey && !evt.metaKey && !evt.altKey && evt.which !== 8;\n }\n};\n\nexport const isQuoteKey = (evt: KeyboardEvent) => {\n return evt.key === '\"' || evt.key === \"'\";\n};\n", "export function invariant(condition: boolean, message: string) {\n if (!condition) {\n const error = new Error(message);\n error.name = 'Invariant Violation';\n // TODO what is framesToPop?\n // @ts-ignore\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n}\n", "// This is the index.browser.js file from nanoid\n// couldn't get original code to work as npm import without crypro warnings -\n// seemed to be picking up node version, not browser version\n\nexport const uuid = (size: number = 21): string => {\n let id: string = '';\n let bytes = crypto.getRandomValues(new Uint8Array(size));\n\n // A compact alternative for `for (var i = 0; i < step; i++)`.\n while (size--) {\n // It is incorrect to use bytes exceeding the alphabet size.\n // The following mask reduces the random byte in the 0-255 value\n // range to the 0-63 value range. Therefore, adding hacks, such\n // as empty string fallback or magic numbers, is unneccessary because\n // the bitmask trims bytes down to the alphabet size.\n let byte = bytes[size] & 63;\n if (byte < 36) {\n // `0-9a-z`\n id += byte.toString(36);\n } else if (byte < 62) {\n // `A-Z`\n id += (byte - 26).toString(36).toUpperCase();\n } else if (byte < 63) {\n id += '_';\n } else {\n id += '-';\n }\n }\n return id;\n};\n", "const PUNCTUATION_STR = String.fromCharCode(8200);\nconst DIGIT_STR = String.fromCharCode(8199);\nconst DECIMALS_AUTO = -1;\n\ntype PadMap = {\n DIGIT: string;\n TWO_DIGITS: string;\n THREE_DIGITS: string;\n FULL_PADDING: [null, string, string, string, string];\n};\n\nconst Space: PadMap = {\n DIGIT: DIGIT_STR,\n TWO_DIGITS: DIGIT_STR + DIGIT_STR,\n THREE_DIGITS: DIGIT_STR + DIGIT_STR + DIGIT_STR,\n FULL_PADDING: [\n null,\n PUNCTUATION_STR + DIGIT_STR,\n PUNCTUATION_STR + DIGIT_STR + DIGIT_STR,\n PUNCTUATION_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR,\n PUNCTUATION_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR,\n ],\n};\n\nconst Zero: PadMap = {\n DIGIT: \"0\",\n TWO_DIGITS: \"00\",\n THREE_DIGITS: \"000\",\n FULL_PADDING: [null, \"0\", \"00\", \"000\", \"0000\"],\n};\n\nfunction padLeft(value: string, maxLength = 6) {\n return (LEADING_FILL + value).slice(-maxLength);\n}\n\nconst LEADING_FILL =\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR;\n\nconst Align = {\n Right: \"right\",\n Center: \"center\",\n Left: \"left\",\n};\n\nfunction pad(n: string, dp: number, Pad: PadMap): string {\n let len = n.length;\n const diff = dp - len;\n\n if (diff > 0) {\n if (diff === 1) {\n n = n + Pad.DIGIT;\n } else if (diff === 2) {\n n = n + Pad.TWO_DIGITS;\n } else if (diff === 3) {\n n = n + Pad.THREE_DIGITS;\n }\n } else {\n if (diff < 0) {\n n = n.slice(0, dp);\n len = dp;\n }\n\n if (Pad === Space && n.charAt(len - 1) === \"0\") {\n n = n.replace(/0+$/, \"\");\n return pad(n, dp, Pad);\n }\n }\n return n;\n}\n\nexport function roundDecimal(\n value?: number,\n align = Align.Right,\n decimals = 4,\n zeroPad?: boolean,\n alignOnDecimals?: boolean\n) {\n if (value === undefined || typeof value !== \"number\" || isNaN(value)) {\n return \"\";\n }\n let integral, fraction, Pad;\n\n const [part1, part2 = \"\"] = value.toString().split(\".\");\n const actualDecimals = part2.length;\n\n integral = parseFloat(part1).toLocaleString();\n\n if (align === Align.Left && alignOnDecimals) {\n integral = padLeft(integral);\n }\n\n if (decimals === DECIMALS_AUTO || actualDecimals === decimals) {\n fraction = part2;\n } else if (actualDecimals > decimals) {\n fraction = parseFloat(\"0.\" + part2)\n .toFixed(decimals)\n .slice(2);\n } else {\n /* eslint-disable no-cond-assign */\n if (\n (Pad = zeroPad\n ? Zero\n : alignOnDecimals && align !== Align.Left\n ? Space\n : null)\n ) {\n if (actualDecimals === 0) {\n fraction = Pad.FULL_PADDING[decimals];\n } else {\n fraction = pad(part2, decimals, Pad);\n }\n } else {\n fraction = part2;\n }\n }\n\n return integral + (fraction ? \".\" + fraction : \"\");\n}\n", "export type RowIndex = {\n [field: string]: number;\n}\n\n// TODO\nexport type Row = {\n [strKey: string]: any;\n} & any[];\n\nexport function addRowsToIndex(rows: Row[], index: RowIndex, indexField: string) {\n for (let idx = 0, len = rows.length; idx < len; idx++) {\n index[rows[idx][indexField]] = idx;\n }\n return index;\n}\n\nexport function indexRows(rows: Row[], indexField: string) {\n return addRowsToIndex(rows, {}, indexField);\n}\n\nexport function isEmptyRow(row: Row) {\n return row[0] === undefined;\n}\n\n// TODO rename\nexport function update(rows: Row[], updates: any) { // TODO\n const results = rows.slice();\n const [[offsetIdx]] = rows;\n for (let i = 0; i < updates.length; i++) {\n const idx = updates[i][0] - offsetIdx;\n // slow, refactor for performance\n if (rows[idx]) {\n const row = rows[idx].slice();\n for (let j = 1; j < updates[i].length; j += 3) {\n row[updates[i][j]] = updates[i][j + 2];\n }\n results[idx] = row;\n } else {\n console.log(`row not found in rows`);\n }\n }\n\n return results;\n}\n", "export const lastWord = (text: string): string => {\n const trimmedText = text.trim();\n const pos = trimmedText.lastIndexOf(' ');\n if (pos === -1) {\n return trimmedText;\n } else {\n return trimmedText.slice(pos + 1);\n }\n};\n"],
5
- "mappings": "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",
6
- "names": ["partition", "array", "test", "pass", "fail", "i", "len", "itemsChanged", "currentItems", "newItems", "identityProperty", "item", "currentItem", "newItem", "SORT_ASC", "mapSortCriteria", "sortCriteria", "columnMap", "metadataOffset", "s", "columnName", "sortDir", "isKeyedColumn", "column", "toColumnDescriptor", "name", "EMPTY_COLUMN_MAP", "buildColumnMap", "columns", "start", "metadataKeys", "map", "i", "projectUpdates", "updates", "results", "projectColumns", "tableRowColumnMap", "columnCount", "IDX", "RENDER_IDX", "DEPTH", "COUNT", "KEY", "SELECTED", "count", "startIdx", "offset", "selectedRows", "row", "baseRowIdx", "out", "colIdx", "getFullRange", "from", "to", "bufferSize", "rowCount", "rangeSize", "buff", "shortfallBefore", "shortFallAfter", "resetRange", "WindowRange", "index", "KEY", "metadataKeys", "log", "message", "DataWindow", "from", "to", "rowCount", "WindowRange", "data", "index", "internalIndex", "isUpdate", "key", "row", "overlapFrom", "overlapTo", "newData", "i", "offset", "start", "end", "_a", "clientFrom", "clientTo", "startOffset", "endOffset", "UP1", "UP2", "DOWN1", "DOWN2", "isValidNumber", "n", "getMovingValueDirection", "newValue", "direction", "prevValue", "decimalPlaces", "diff", "formatDate", "date", "format", "isArrayOfListeners", "listeners", "isOnlyListener", "EventEmitter", "type", "listener", "listenerOrListeners", "position", "args", "handler", "invokeHandler", "wildcardHandler", "evtName", "message", "getUniqueId", "actionKeys", "navigationKeys", "functionKeys", "specialKeys", "isSpecialKey", "key", "isCharacterKey", "evt", "isQuoteKey", "invariant", "condition", "message", "error", "uuid", "size", "id", "bytes", "byte", "PUNCTUATION_STR", "DIGIT_STR", "DECIMALS_AUTO", "Space", "Zero", "padLeft", "value", "maxLength", "LEADING_FILL", "Align", "pad", "n", "dp", "Pad", "len", "diff", "roundDecimal", "align", "decimals", "zeroPad", "alignOnDecimals", "integral", "fraction", "part1", "part2", "actualDecimals", "addRowsToIndex", "rows", "index", "indexField", "idx", "len", "indexRows", "isEmptyRow", "row", "update", "updates", "results", "offsetIdx", "i", "j", "lastWord", "text", "trimmedText", "pos"]
3
+ "sources": ["../../../packages/vuu-utils/src/array-utils.ts", "../../../packages/vuu-utils/src/column-utils.ts", "../../../packages/vuu-utils/src/range-utils.ts", "../../../packages/vuu-utils/src/DataWindow.ts", "../../../packages/vuu-utils/src/data-utils.ts", "../../../packages/vuu-utils/src/date-utils.ts", "../../../packages/vuu-utils/src/event-emitter.ts", "../../../packages/vuu-utils/src/getUniqueId.ts", "../../../packages/vuu-utils/src/input-utils.ts", "../../../packages/vuu-utils/src/invariant.ts", "../../../packages/vuu-utils/src/nanoid/index.ts", "../../../packages/vuu-utils/src/round-decimal.ts", "../../../packages/vuu-utils/src/row-utils.ts", "../../../packages/vuu-utils/src/sort-utils.ts", "../../../packages/vuu-utils/src/text-utils.ts"],
4
+ "sourcesContent": ["export type PartitionTest<T> = (value: T, index: number) => boolean;\n\nexport function partition<T>(\n array: T[],\n test: PartitionTest<T>,\n pass: T[] = [],\n fail: T[] = []\n): [T[], T[]] {\n for (let i = 0, len = array.length; i < len; i++) {\n (test(array[i], i) ? pass : fail).push(array[i]);\n }\n return [pass, fail];\n}\n\n// Note order of items can be different between arrays\n// If an identityProperty is not defined, item identity is used\nexport function itemsChanged<T = unknown>(\n currentItems: T[],\n newItems: T[],\n identityProperty?: string\n) {\n if (currentItems.length !== newItems.length) {\n return true;\n }\n if (identityProperty === undefined) {\n return !currentItems.every((item) => newItems.includes(item));\n } else {\n return currentItems.some(\n (currentItem) =>\n newItems.findIndex(\n (newItem) =>\n (newItem as { [key: string]: unknown })[identityProperty] ===\n (currentItem as { [key: string]: unknown })[identityProperty]\n ) === -1\n );\n }\n}\n", "import {\n ColumnDescriptor,\n GroupColumnDescriptor,\n KeyedColumnDescriptor,\n} from \"@vuu-ui/vuu-datagrid-types\";\nimport { VuuGroupBy } from \"@vuu-ui/vuu-protocol-types\";\nimport { instrumentPriceColumns } from \"../../../showcase/src/examples/DataGrid/columnMetaData\";\nimport { Row } from \"./row-utils\";\n\nexport interface ColumnMap {\n [columnName: string]: number;\n}\n\nconst SORT_ASC = \"asc\";\n\nexport type SortCriteriaItem = string | [string, \"asc\"]; // TODO where is 'desc'?\n\nexport function mapSortCriteria(\n sortCriteria: SortCriteriaItem[],\n columnMap: ColumnMap,\n metadataOffset = 0\n): [number, \"asc\"][] {\n return sortCriteria.map((s) => {\n if (typeof s === \"string\") {\n return [columnMap[s] + metadataOffset, \"asc\"];\n } else if (Array.isArray(s)) {\n const [columnName, sortDir] = s;\n return [columnMap[columnName] + metadataOffset, sortDir || SORT_ASC];\n } else {\n throw Error(\"columnUtils.mapSortCriteria invalid input\");\n }\n });\n}\n\nexport const isKeyedColumn = (\n column: ColumnDescriptor\n): column is KeyedColumnDescriptor => {\n return typeof (column as KeyedColumnDescriptor).key === \"number\";\n};\n\nexport const isNumericColumn = ({ serverDataType }: ColumnDescriptor) =>\n serverDataType === undefined\n ? false\n : serverDataType === \"int\" ||\n serverDataType === \"long\" ||\n serverDataType === \"double\";\n\nexport const toColumnDescriptor = (name: string): ColumnDescriptor => ({\n name,\n});\n\nconst EMPTY_COLUMN_MAP = {} as const;\n\nexport function buildColumnMap(\n columns?: (KeyedColumnDescriptor | string)[]\n): ColumnMap {\n const start = metadataKeys.count;\n if (columns) {\n return columns.reduce((map, column, i) => {\n if (typeof column === \"string\") {\n map[column] = start + i;\n } else if (typeof column.key === \"number\") {\n map[column.name] = column.key;\n } else {\n map[column.name] = start + i;\n }\n return map;\n }, {} as ColumnMap);\n } else {\n return EMPTY_COLUMN_MAP;\n }\n}\n\nexport function projectUpdates(updates: number[]): number[] {\n const results: number[] = [];\n const metadataOffset = metadataKeys.count - 2;\n for (let i = 0; i < updates.length; i += 3) {\n results[i] = updates[i] + metadataOffset;\n results[i + 1] = updates[i + 1];\n results[i + 2] = updates[i + 2];\n }\n return results;\n}\n\nexport function projectColumns(\n tableRowColumnMap: ColumnMap,\n columns: ColumnDescriptor[]\n) {\n const columnCount = columns.length;\n const { IDX, RENDER_IDX, DEPTH, COUNT, KEY, SELECTED, count } = metadataKeys;\n return (startIdx: number, offset: number, selectedRows: Row[] = []) =>\n (row: Row, i: number) => {\n // selectedRows are indices of rows within underlying dataset (not sorted or filtered)\n // row is the original row from this set, with original index in IDX pos, which might\n // be overwritten with a different value below if rows are sorted/filtered\n const baseRowIdx: any = row[IDX]; // TODO\n const out = [];\n for (let i = 0; i < columnCount; i++) {\n const colIdx = tableRowColumnMap[columns[i].name];\n out[count + i] = row[colIdx];\n }\n\n out[IDX] = startIdx + i + offset;\n out[RENDER_IDX] = 0;\n out[DEPTH] = 0;\n out[COUNT] = 0;\n out[KEY] = row[tableRowColumnMap.KEY];\n out[SELECTED] = selectedRows.includes(baseRowIdx) ? 1 : 0;\n return out;\n };\n}\n\nexport const metadataKeys = {\n IDX: 0,\n RENDER_IDX: 1,\n IS_LEAF: 2,\n IS_EXPANDED: 3,\n DEPTH: 4,\n COUNT: 5,\n KEY: 6,\n SELECTED: 7,\n count: 8,\n // TODO following only used in datamodel\n PARENT_IDX: \"parent_idx\",\n IDX_POINTER: \"idx_pointer\",\n FILTER_COUNT: \"filter_count\",\n NEXT_FILTER_IDX: \"next_filter_idx\",\n} as const;\n\n// This method mutates the passed columns array\nconst insertColumn = (\n columns: KeyedColumnDescriptor[],\n column: KeyedColumnDescriptor\n) => {\n const { originalIdx } = column;\n if (typeof originalIdx === \"number\") {\n for (let i = 0; i < columns.length; i++) {\n const { originalIdx: colIdx = -1 } = columns[i];\n if (colIdx > originalIdx) {\n columns.splice(i, 0, column);\n return columns;\n }\n }\n }\n columns.push(column);\n return columns;\n};\n\nexport const flattenColumnGroup = (\n columns: KeyedColumnDescriptor[]\n): KeyedColumnDescriptor[] => {\n if (columns[0]?.isGroup) {\n const [groupColumn, ...nonGroupedColumns] = columns as [\n GroupColumnDescriptor,\n ...KeyedColumnDescriptor[]\n ];\n groupColumn.columns.forEach((groupColumn) => {\n insertColumn(nonGroupedColumns, groupColumn);\n });\n return nonGroupedColumns;\n } else {\n return columns;\n }\n};\n\nexport function extractGroupColumn(\n columns: KeyedColumnDescriptor[],\n groupBy?: VuuGroupBy\n): [GroupColumnDescriptor | null, KeyedColumnDescriptor[]] {\n if (groupBy && groupBy.length > 0) {\n const flattenedColumns = flattenColumnGroup(columns);\n // Note: groupedColumns will be in column order, not groupBy order\n const [groupedColumns, rest] = flattenedColumns.reduce(\n (result, column, i) => {\n const [g, r] = result;\n if (groupBy.includes(column.name)) {\n g.push({\n ...column,\n originalIdx: i,\n });\n } else {\n r.push(column);\n }\n\n return result;\n },\n [[], []] as [KeyedColumnDescriptor[], KeyedColumnDescriptor[]]\n );\n if (groupedColumns.length !== groupBy.length) {\n throw Error(\n `extractGroupColumn: no column definition found for all groupBy cols ${JSON.stringify(\n groupBy\n )} `\n );\n }\n const groupCount = groupBy.length;\n const groupCols: KeyedColumnDescriptor[] = groupBy.map((name, idx) => {\n // Keep the cols in same order defined on groupBy\n const column = groupedColumns.find(\n (col) => col.name === name\n ) as KeyedColumnDescriptor;\n return {\n ...column,\n groupLevel: groupCount - idx,\n };\n });\n\n const groupCol = {\n key: -1,\n name: \"group-col\",\n heading: [\"group-col\"],\n isGroup: true,\n columns: groupCols,\n width: groupCols.map((c) => c.width).reduce((a, b) => a + b) + 100,\n } as GroupColumnDescriptor;\n\n return [groupCol, rest];\n }\n return [null, flattenColumnGroup(columns)];\n}\n\nexport const isGroupColumn = (\n column: KeyedColumnDescriptor\n): column is GroupColumnDescriptor => column.isGroup === true;\n", "export interface VuuRange {\n from: number;\n to: number;\n bufferSize?: number;\n reset?: boolean;\n}\n\ninterface FromToRange {\n from: number;\n to: number;\n}\n\nexport function getFullRange(\n { from, to }: VuuRange,\n bufferSize: number = 0,\n rowCount: number = Number.MAX_SAFE_INTEGER\n): FromToRange {\n if (bufferSize === 0) {\n return { from, to: Math.min(to, rowCount) };\n } else if (from === 0) {\n return { from, to: Math.min(to + bufferSize, rowCount) };\n } else {\n const rangeSize = to - from;\n const buff = Math.round(bufferSize / 2);\n const shortfallBefore = from - buff < 0;\n const shortFallAfter = rowCount - (to + buff) < 0;\n\n if (shortfallBefore && shortFallAfter) {\n return { from: 0, to: rowCount };\n } else if (shortfallBefore) {\n return { from: 0, to: rangeSize + bufferSize };\n } else if (shortFallAfter) {\n return { from: Math.max(0, rowCount - (rangeSize + bufferSize)), to: rowCount };\n } else {\n return { from: from - buff, to: to + buff };\n }\n }\n}\n\nexport function resetRange({ from, to, bufferSize = 0 }: VuuRange): VuuRange {\n return {\n from: 0,\n to: to - from,\n bufferSize,\n reset: true\n };\n}\n\nexport class WindowRange {\n public from: number;\n public to: number;\n\n constructor(from: number, to: number) {\n this.from = from;\n this.to = to;\n }\n\n public isWithin(index: number) {\n return index >= this.from && index < this.to;\n }\n\n //find the overlap of this range and a new one\n public overlap(from: number, to: number): [number, number] {\n return from >= this.to || to < this.from\n ? [0, 0]\n : [Math.max(from, this.from), Math.min(to, this.to)];\n }\n\n public copy(): WindowRange {\n return new WindowRange(this.from, this.to);\n }\n}\n", "import { WindowRange } from \"./range-utils\";\nimport { metadataKeys } from \"./column-utils\";\n\nexport type DataItem = string | number | boolean;\nexport type DataRow = [\n /** index */\n number,\n /** render index */\n number,\n /** isLeaf */\n boolean,\n /** isExpanded */\n boolean,\n /** depth */\n number,\n /** child count */\n number,\n /** key */\n string,\n /** selected */\n number,\n /** data values */\n ...DataItem[]\n];\nexport type RangeLike = { from: number; to: number };\n\nconst { KEY } = metadataKeys;\n\nconst log = (message: string) =>\n console.log(`%c[DataWindow] ${message}`, \"color: purple;font-weight: bold;\");\nexport class DataWindow {\n private range: WindowRange;\n public data: DataRow[];\n public rowCount = 0;\n constructor({ from, to }: RangeLike) {\n log(`constructor ${from} - ${to}`);\n this.range = new WindowRange(from, to);\n //internal data is always 0 based, we add range.from to determine an offset\n this.data = new Array(to - from);\n // window.dataWindow = this.data;\n // log(`constructor initial range ${from} - ${to}`);\n }\n\n setRowCount = (rowCount: number) => {\n // log(`rowCount => ${rowCount}`);\n if (rowCount < this.data.length) {\n this.data.length = rowCount;\n }\n this.rowCount = rowCount;\n };\n\n // return true if existing row was updated\n add(data: DataRow) {\n const [index] = data;\n if (this.isWithinRange(index)) {\n const internalIndex = index - this.range.from;\n const isUpdate = this.data[internalIndex] !== undefined;\n this.data[internalIndex] = data;\n return isUpdate;\n } else {\n return false;\n }\n }\n\n getAtIndex(index: number) {\n return this.range.isWithin(index) &&\n this.data[index - this.range.from] != null\n ? this.data[index - this.range.from]\n : undefined;\n }\n\n getByKey(key: string) {\n return this.data.find((row) => row[KEY] === key);\n }\n\n isWithinRange(index: number) {\n return this.range.isWithin(index) && index <= this.rowCount;\n }\n\n setRange(from: number, to: number) {\n log(`setRange ${from} ${to}`);\n if (from !== this.range.from || to !== this.range.to) {\n const [overlapFrom, overlapTo] = this.range.overlap(from, to);\n const newData = new Array(to - from);\n for (let i = overlapFrom; i < overlapTo; i++) {\n const data = this.getAtIndex(i);\n if (data) {\n const index = i - from;\n newData[index] = data;\n }\n }\n this.data = newData;\n this.range.from = from;\n this.range.to = to;\n }\n }\n\n hasData(from: number, to: number) {\n const offset = this.range.from;\n const start = from - offset;\n const end = Math.min(to - offset - 1, this.rowCount - 1);\n return this.data[start] !== undefined && this.data[end] !== undefined;\n }\n\n getData(from: number, to: number): any[] {\n const { from: clientFrom, to: clientTo } = this.range;\n const startOffset = Math.max(0, from - clientFrom);\n const endOffset = Math.min(to - clientFrom, this.rowCount ?? to);\n return this.data.slice(startOffset, endOffset);\n }\n}\n", "export type valueChangeDirection = \"up1\" | \"up2\" | \"down1\" | \"down2\" | \"\";\n\nexport const UP1 = \"up1\";\nexport const UP2 = \"up2\";\nexport const DOWN1 = \"down1\";\nexport const DOWN2 = \"down2\";\n\nexport const isValidNumber = (n: unknown): n is number =>\n typeof n === \"number\" && isFinite(n);\n\nexport function getMovingValueDirection(\n newValue: number,\n direction?: valueChangeDirection,\n prevValue?: number,\n /** the number of decimal places to take into account when highlighting a change */\n decimalPlaces?: number\n): valueChangeDirection {\n if (\n !isFinite(newValue) ||\n prevValue === undefined ||\n direction === undefined\n ) {\n return \"\";\n } else {\n let diff = newValue - prevValue;\n if (diff) {\n // make sure there is still a diff when reduced to number of decimals to be displayed\n if (typeof decimalPlaces === \"number\") {\n diff =\n +newValue.toFixed(decimalPlaces) - +prevValue.toFixed(decimalPlaces);\n }\n }\n\n if (diff) {\n if (direction === \"\") {\n if (diff < 0) {\n return DOWN1;\n } else {\n return UP1;\n }\n } else if (diff > 0) {\n if (direction === DOWN1 || direction === DOWN2 || direction === UP2) {\n return UP1;\n } else {\n return UP2;\n }\n } else if (\n direction === UP1 ||\n direction === UP2 ||\n direction === DOWN2\n ) {\n return DOWN1;\n } else {\n return DOWN2;\n }\n } else {\n return \"\";\n }\n }\n}\n", "//TODO\nexport const formatDate = (date: Date, format: string) => {\n return date.toUTCString();\n};\n", "export interface Event {}\n\nexport type EventListener = (evtName: string, ...args: any[]) => void;\n\nexport type EventListenerMap = {\n [eventName: string]: EventListener[] | EventListener;\n};\n\nfunction isArrayOfListeners(\n listeners: EventListener | EventListener[]\n): listeners is EventListener[] {\n return Array.isArray(listeners);\n}\n\nfunction isOnlyListener(\n listeners: EventListener | EventListener[]\n): listeners is EventListener {\n return !Array.isArray(listeners);\n}\n\nexport interface IEventEmitter {\n emit: (type: string, ...args: unknown[]) => void;\n}\n\nexport class EventEmitter implements IEventEmitter {\n private _events?: EventListenerMap;\n\n constructor() {\n this._events = {};\n }\n\n addListener(type: string, listener: EventListener) {\n if (!this._events) {\n this._events = {};\n }\n\n const listeners = this._events[type];\n\n if (!listeners) {\n this._events[type] = listener;\n } else if (isArrayOfListeners(listeners)) {\n listeners.push(listener);\n } else if (isOnlyListener(listeners)) {\n this._events[type] = [listeners, listener];\n }\n }\n\n removeListener(type: string, listener: EventListener) {\n if (!this._events || !this._events[type]) {\n return;\n }\n\n const listenerOrListeners = this._events[type];\n let position = -1;\n\n if (listenerOrListeners === listener) {\n delete this._events[type];\n } else if (Array.isArray(listenerOrListeners)) {\n for (let i = length; i-- > 0; ) {\n if (listenerOrListeners[i] === listener) {\n position = i;\n break;\n }\n }\n\n if (position < 0) {\n return;\n }\n\n if (listenerOrListeners.length === 1) {\n listenerOrListeners.length = 0;\n delete this._events[type];\n } else {\n listenerOrListeners.splice(position, 1);\n }\n }\n }\n\n removeAllListeners(type: string) {\n if (!this._events) {\n return;\n } else if (type === undefined) {\n delete this._events;\n } else {\n delete this._events[type];\n }\n }\n\n emit(type: string, ...args: unknown[]) {\n if (this._events) {\n const handler = this._events[type];\n if (handler) {\n invokeHandler(handler, type, args);\n }\n const wildcardHandler = this._events[\"*\"];\n if (wildcardHandler) {\n invokeHandler(wildcardHandler, type, args);\n }\n }\n }\n\n once(type: string, listener: EventListener) {\n const handler = (evtName: string, message: unknown) => {\n this.removeListener(evtName, handler);\n listener(evtName, message);\n };\n\n this.on(type, handler);\n }\n\n on(type: string, listener: EventListener) {\n return this.addListener(type, listener);\n }\n}\n\nfunction invokeHandler(\n handler: EventListener | EventListener[],\n type: string,\n args: unknown[]\n) {\n if (isArrayOfListeners(handler)) {\n handler.slice().forEach((listener) => invokeHandler(listener, type, args));\n } else {\n switch (args.length) {\n case 0:\n handler(type);\n break;\n case 1:\n handler(type, args[0]);\n break;\n case 2:\n handler(type, args[0], args[1]);\n break;\n // slower\n default:\n handler.call(null, type, ...args);\n }\n }\n}\n", "export const getUniqueId = () => `hw-${Math.round(Math.random() * 1e5)}`;\n", "const actionKeys = {\n Enter: 'Enter',\n Delete: 'Delete'\n};\n\nconst navigationKeys = {\n Home: 'Home',\n End: 'End',\n ArrowRight: 'ArrowRight',\n ArrowLeft: 'ArrowLeft',\n ArrowDown: 'ArrowDown',\n ArrowUp: 'ArrowUp',\n Tab: 'Tab'\n};\nconst functionKeys = {\n F1: 'F1',\n F2: 'F2',\n F3: 'F3',\n F4: 'F4',\n F5: 'F5',\n F6: 'F6',\n F7: 'F7',\n F8: 'F8',\n F9: 'F9',\n F10: 'F10',\n F11: 'F11',\n F12: 'F12'\n};\n\nconst specialKeys = {\n ...actionKeys,\n ...navigationKeys,\n ...functionKeys\n};\ntype specialKey = keyof typeof specialKeys;\n\nconst isSpecialKey = (key: string): key is specialKey => key in specialKeys;\n\nexport const isCharacterKey = (evt: KeyboardEvent) => {\n if (isSpecialKey(evt.key)) {\n return false;\n }\n if (typeof evt.which === 'number' && evt.which > 0) {\n return !evt.ctrlKey && !evt.metaKey && !evt.altKey && evt.which !== 8;\n }\n};\n\nexport const isQuoteKey = (evt: KeyboardEvent) => {\n return evt.key === '\"' || evt.key === \"'\";\n};\n", "export function invariant(condition: boolean, message: string) {\n if (!condition) {\n const error = new Error(message);\n error.name = 'Invariant Violation';\n // TODO what is framesToPop?\n // @ts-ignore\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n}\n", "// This is the index.browser.js file from nanoid\n// couldn't get original code to work as npm import without crypro warnings -\n// seemed to be picking up node version, not browser version\n\nexport const uuid = (size: number = 21): string => {\n let id: string = '';\n let bytes = crypto.getRandomValues(new Uint8Array(size));\n\n // A compact alternative for `for (var i = 0; i < step; i++)`.\n while (size--) {\n // It is incorrect to use bytes exceeding the alphabet size.\n // The following mask reduces the random byte in the 0-255 value\n // range to the 0-63 value range. Therefore, adding hacks, such\n // as empty string fallback or magic numbers, is unneccessary because\n // the bitmask trims bytes down to the alphabet size.\n let byte = bytes[size] & 63;\n if (byte < 36) {\n // `0-9a-z`\n id += byte.toString(36);\n } else if (byte < 62) {\n // `A-Z`\n id += (byte - 26).toString(36).toUpperCase();\n } else if (byte < 63) {\n id += '_';\n } else {\n id += '-';\n }\n }\n return id;\n};\n", "const PUNCTUATION_STR = String.fromCharCode(8200);\nconst DIGIT_STR = String.fromCharCode(8199);\nconst DECIMALS_AUTO = -1;\n\ntype PadMap = {\n DIGIT: string;\n TWO_DIGITS: string;\n THREE_DIGITS: string;\n FULL_PADDING: [null, string, string, string, string];\n};\n\nconst Space: PadMap = {\n DIGIT: DIGIT_STR,\n TWO_DIGITS: DIGIT_STR + DIGIT_STR,\n THREE_DIGITS: DIGIT_STR + DIGIT_STR + DIGIT_STR,\n FULL_PADDING: [\n null,\n PUNCTUATION_STR + DIGIT_STR,\n PUNCTUATION_STR + DIGIT_STR + DIGIT_STR,\n PUNCTUATION_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR,\n PUNCTUATION_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR,\n ],\n};\n\nconst Zero: PadMap = {\n DIGIT: \"0\",\n TWO_DIGITS: \"00\",\n THREE_DIGITS: \"000\",\n FULL_PADDING: [null, \"0\", \"00\", \"000\", \"0000\"],\n};\n\nfunction padLeft(value: string, maxLength = 6) {\n return (LEADING_FILL + value).slice(-maxLength);\n}\n\nconst LEADING_FILL =\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR;\n\nconst Align = {\n Right: \"right\",\n Center: \"center\",\n Left: \"left\",\n};\n\nfunction pad(n: string, dp: number, Pad: PadMap): string {\n let len = n.length;\n const diff = dp - len;\n\n if (diff > 0) {\n if (diff === 1) {\n n = n + Pad.DIGIT;\n } else if (diff === 2) {\n n = n + Pad.TWO_DIGITS;\n } else if (diff === 3) {\n n = n + Pad.THREE_DIGITS;\n }\n } else {\n if (diff < 0) {\n n = n.slice(0, dp);\n len = dp;\n }\n\n if (Pad === Space && n.charAt(len - 1) === \"0\") {\n n = n.replace(/0+$/, \"\");\n return pad(n, dp, Pad);\n }\n }\n return n;\n}\n\nexport function roundDecimal(\n value?: number,\n align = Align.Right,\n decimals = 4,\n zeroPad?: boolean,\n alignOnDecimals?: boolean\n) {\n if (value === undefined || typeof value !== \"number\" || isNaN(value)) {\n return \"\";\n }\n let integral, fraction, Pad;\n\n const [part1, part2 = \"\"] = value.toString().split(\".\");\n const actualDecimals = part2.length;\n\n integral = parseFloat(part1).toLocaleString();\n\n if (align === Align.Left && alignOnDecimals) {\n integral = padLeft(integral);\n }\n\n if (decimals === DECIMALS_AUTO || actualDecimals === decimals) {\n fraction = part2;\n } else if (actualDecimals > decimals) {\n fraction = parseFloat(\"0.\" + part2)\n .toFixed(decimals)\n .slice(2);\n } else {\n /* eslint-disable no-cond-assign */\n if (\n (Pad = zeroPad\n ? Zero\n : alignOnDecimals && align !== Align.Left\n ? Space\n : null)\n ) {\n if (actualDecimals === 0) {\n fraction = Pad.FULL_PADDING[decimals];\n } else {\n fraction = pad(part2, decimals, Pad);\n }\n } else {\n fraction = part2;\n }\n }\n\n return integral + (fraction ? \".\" + fraction : \"\");\n}\n", "export type RowIndex = {\n [field: string]: number;\n}\n\n// TODO\nexport type Row = {\n [strKey: string]: any;\n} & any[];\n\nexport function addRowsToIndex(rows: Row[], index: RowIndex, indexField: string) {\n for (let idx = 0, len = rows.length; idx < len; idx++) {\n index[rows[idx][indexField]] = idx;\n }\n return index;\n}\n\nexport function indexRows(rows: Row[], indexField: string) {\n return addRowsToIndex(rows, {}, indexField);\n}\n\nexport function isEmptyRow(row: Row) {\n return row[0] === undefined;\n}\n\n// TODO rename\nexport function update(rows: Row[], updates: any) { // TODO\n const results = rows.slice();\n const [[offsetIdx]] = rows;\n for (let i = 0; i < updates.length; i++) {\n const idx = updates[i][0] - offsetIdx;\n // slow, refactor for performance\n if (rows[idx]) {\n const row = rows[idx].slice();\n for (let j = 1; j < updates[i].length; j += 3) {\n row[updates[i][j]] = updates[i][j + 2];\n }\n results[idx] = row;\n } else {\n console.log(`row not found in rows`);\n }\n }\n\n return results;\n}\n", "import {\n ColumnDescriptor,\n KeyedColumnDescriptor,\n} from \"@vuu-ui/vuu-datagrid-types\";\nimport { VuuSort, VuuSortCol, VuuSortType } from \"@vuu-ui/vuu-protocol-types\";\n\nconst toggle = (sortType: VuuSortType) => (sortType === \"A\" ? \"D\" : \"A\");\n\n// Given an existing sort spec and a column we wish to sort by,\n// construct and return a new sort spec.\nexport const applySort = (\n { sortDefs }: VuuSort,\n { name: column }: ColumnDescriptor,\n extendSort = false,\n sortType?: VuuSortType\n): VuuSort => {\n if (extendSort) {\n return {\n sortDefs: sortDefs.concat({\n column,\n sortType: sortType ?? \"A\",\n }),\n };\n }\n\n const newSortType =\n typeof sortType === \"string\"\n ? sortType\n : sortDefs.length === 1 && sortDefs[0].column === column\n ? toggle(sortDefs[0].sortType)\n : \"A\";\n return {\n sortDefs: [{ column, sortType: newSortType }],\n };\n};\n\nexport const setSortColumn = (\n { sortDefs }: VuuSort,\n column: KeyedColumnDescriptor,\n sortType?: \"A\" | \"D\"\n): VuuSort => {\n if (sortType === undefined) {\n const columnSort = sortDefs.find((item) => item.column === column.name);\n if (columnSort) {\n return {\n sortDefs: [\n {\n column: column.name,\n sortType: columnSort.sortType === \"A\" ? \"D\" : \"A\",\n },\n ],\n };\n }\n }\n return { sortDefs: [{ column: column.name, sortType: sortType ?? \"A\" }] };\n};\n\nexport const addSortColumn = (\n { sortDefs }: VuuSort,\n column: KeyedColumnDescriptor,\n sortType: \"A\" | \"D\" = \"A\"\n): VuuSort => {\n const sortEntry: VuuSortCol = { column: column.name, sortType };\n if (sortDefs.length > 0) {\n return {\n sortDefs: sortDefs.concat(sortEntry),\n };\n } else {\n return { sortDefs: [sortEntry] };\n }\n};\n", "export const lastWord = (text: string): string => {\n const trimmedText = text.trim();\n const pos = trimmedText.lastIndexOf(' ');\n if (pos === -1) {\n return trimmedText;\n } else {\n return trimmedText.slice(pos + 1);\n }\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["partition", "array", "test", "pass", "fail", "i", "len", "itemsChanged", "currentItems", "newItems", "identityProperty", "item", "currentItem", "newItem", "SORT_ASC", "mapSortCriteria", "sortCriteria", "columnMap", "metadataOffset", "s", "columnName", "sortDir", "isKeyedColumn", "column", "isNumericColumn", "serverDataType", "toColumnDescriptor", "name", "EMPTY_COLUMN_MAP", "buildColumnMap", "columns", "start", "metadataKeys", "map", "i", "projectUpdates", "updates", "results", "projectColumns", "tableRowColumnMap", "columnCount", "IDX", "RENDER_IDX", "DEPTH", "COUNT", "KEY", "SELECTED", "count", "startIdx", "offset", "selectedRows", "row", "baseRowIdx", "out", "colIdx", "insertColumn", "originalIdx", "flattenColumnGroup", "_a", "groupColumn", "nonGroupedColumns", "extractGroupColumn", "groupBy", "flattenedColumns", "groupedColumns", "rest", "result", "r", "groupCount", "groupCols", "idx", "col", "a", "b", "isGroupColumn", "getFullRange", "from", "to", "bufferSize", "rowCount", "rangeSize", "buff", "shortfallBefore", "shortFallAfter", "resetRange", "WindowRange", "index", "KEY", "metadataKeys", "log", "message", "DataWindow", "from", "to", "rowCount", "WindowRange", "data", "index", "internalIndex", "isUpdate", "key", "row", "overlapFrom", "overlapTo", "newData", "i", "offset", "start", "end", "_a", "clientFrom", "clientTo", "startOffset", "endOffset", "UP1", "UP2", "DOWN1", "DOWN2", "isValidNumber", "n", "getMovingValueDirection", "newValue", "direction", "prevValue", "decimalPlaces", "diff", "formatDate", "date", "format", "isArrayOfListeners", "listeners", "isOnlyListener", "EventEmitter", "type", "listener", "listenerOrListeners", "position", "args", "handler", "invokeHandler", "wildcardHandler", "evtName", "message", "getUniqueId", "actionKeys", "navigationKeys", "functionKeys", "specialKeys", "isSpecialKey", "key", "isCharacterKey", "evt", "isQuoteKey", "invariant", "condition", "message", "error", "uuid", "size", "id", "bytes", "byte", "PUNCTUATION_STR", "DIGIT_STR", "DECIMALS_AUTO", "Space", "Zero", "padLeft", "value", "maxLength", "LEADING_FILL", "Align", "pad", "n", "dp", "Pad", "len", "diff", "roundDecimal", "align", "decimals", "zeroPad", "alignOnDecimals", "integral", "fraction", "part1", "part2", "actualDecimals", "addRowsToIndex", "rows", "index", "indexField", "idx", "len", "indexRows", "isEmptyRow", "row", "update", "updates", "results", "offsetIdx", "i", "j", "toggle", "sortType", "applySort", "sortDefs", "column", "extendSort", "newSortType", "setSortColumn", "columnSort", "item", "addSortColumn", "sortEntry", "lastWord", "text", "trimmedText", "pos"]
7
7
  }
package/package.json CHANGED
@@ -1,9 +1,12 @@
1
1
  {
2
2
  "name": "@vuu-ui/vuu-utils",
3
- "version": "0.5.9",
3
+ "version": "0.5.11",
4
4
  "author": "heswell",
5
5
  "license": "Apache-2.0",
6
- "devDependencies": {},
6
+ "devDependencies": {
7
+ "@vuu-ui/vuu-datagrid-types": "0.5.11",
8
+ "@vuu-ui/vuu-protocol-types": "0.5.11"
9
+ },
7
10
  "peerDependencies": {
8
11
  "react": "^17.0.2",
9
12
  "react-dom": "^17.0.2"
@@ -1,11 +1,13 @@
1
- import { ColumnDescriptor, KeyedColumnDescriptor } from "@vuu-ui/vuu-datagrid-types";
1
+ import { ColumnDescriptor, GroupColumnDescriptor, KeyedColumnDescriptor } from "@vuu-ui/vuu-datagrid-types";
2
+ import { VuuGroupBy } from "@vuu-ui/vuu-protocol-types";
2
3
  import { Row } from "./row-utils";
3
4
  export interface ColumnMap {
4
5
  [columnName: string]: number;
5
6
  }
6
7
  export declare type SortCriteriaItem = string | [string, "asc"];
7
8
  export declare function mapSortCriteria(sortCriteria: SortCriteriaItem[], columnMap: ColumnMap, metadataOffset?: number): [number, "asc"][];
8
- export declare function isKeyedColumn(column: ColumnDescriptor): column is KeyedColumnDescriptor;
9
+ export declare const isKeyedColumn: (column: ColumnDescriptor) => column is KeyedColumnDescriptor;
10
+ export declare const isNumericColumn: ({ serverDataType }: ColumnDescriptor) => boolean;
9
11
  export declare const toColumnDescriptor: (name: string) => ColumnDescriptor;
10
12
  export declare function buildColumnMap(columns?: (KeyedColumnDescriptor | string)[]): ColumnMap;
11
13
  export declare function projectUpdates(updates: number[]): number[];
@@ -25,3 +27,6 @@ export declare const metadataKeys: {
25
27
  readonly FILTER_COUNT: "filter_count";
26
28
  readonly NEXT_FILTER_IDX: "next_filter_idx";
27
29
  };
30
+ export declare const flattenColumnGroup: (columns: KeyedColumnDescriptor[]) => KeyedColumnDescriptor[];
31
+ export declare function extractGroupColumn(columns: KeyedColumnDescriptor[], groupBy?: VuuGroupBy): [GroupColumnDescriptor | null, KeyedColumnDescriptor[]];
32
+ export declare const isGroupColumn: (column: KeyedColumnDescriptor) => column is GroupColumnDescriptor;
@@ -11,4 +11,5 @@ export * from "./nanoid";
11
11
  export * from "./round-decimal";
12
12
  export * from "./range-utils";
13
13
  export * from "./row-utils";
14
+ export * from "./sort-utils";
14
15
  export * from "./text-utils";
@@ -0,0 +1,5 @@
1
+ import { ColumnDescriptor, KeyedColumnDescriptor } from "@vuu-ui/vuu-datagrid-types";
2
+ import { VuuSort, VuuSortType } from "@vuu-ui/vuu-protocol-types";
3
+ export declare const applySort: ({ sortDefs }: VuuSort, { name: column }: ColumnDescriptor, extendSort?: boolean, sortType?: VuuSortType) => VuuSort;
4
+ export declare const setSortColumn: ({ sortDefs }: VuuSort, column: KeyedColumnDescriptor, sortType?: "A" | "D") => VuuSort;
5
+ export declare const addSortColumn: ({ sortDefs }: VuuSort, column: KeyedColumnDescriptor, sortType?: "A" | "D") => VuuSort;
@@ -0,0 +1,233 @@
1
+ export const pricesColumns: ({
2
+ name: string;
3
+ width: number;
4
+ type?: undefined;
5
+ aggregate?: undefined;
6
+ } | {
7
+ name: string;
8
+ type: {
9
+ name: string;
10
+ renderer: {
11
+ name: string;
12
+ flashStyle: string;
13
+ };
14
+ formatting: {
15
+ decimals: number;
16
+ zeroPad: boolean;
17
+ };
18
+ };
19
+ aggregate: string;
20
+ width?: undefined;
21
+ } | {
22
+ name: string;
23
+ type: {
24
+ name: string;
25
+ renderer?: undefined;
26
+ formatting?: undefined;
27
+ };
28
+ width?: undefined;
29
+ aggregate?: undefined;
30
+ } | {
31
+ name: string;
32
+ width?: undefined;
33
+ type?: undefined;
34
+ aggregate?: undefined;
35
+ })[];
36
+ export const orderColumns: {
37
+ name: string;
38
+ width: number;
39
+ }[];
40
+ export const instrumentPriceColumns: ({
41
+ name: string;
42
+ width: number;
43
+ type?: undefined;
44
+ aggregate?: undefined;
45
+ } | {
46
+ name: string;
47
+ width?: undefined;
48
+ type?: undefined;
49
+ aggregate?: undefined;
50
+ } | {
51
+ name: string;
52
+ type: {
53
+ name: string;
54
+ renderer?: undefined;
55
+ formatting?: undefined;
56
+ };
57
+ width?: undefined;
58
+ aggregate?: undefined;
59
+ } | {
60
+ name: string;
61
+ type: {
62
+ name: string;
63
+ renderer: {
64
+ name: string;
65
+ flashStyle: string;
66
+ };
67
+ formatting: {
68
+ decimals: number;
69
+ zeroPad: boolean;
70
+ };
71
+ };
72
+ aggregate: string;
73
+ width?: undefined;
74
+ })[];
75
+ export namespace instrumentSchema {
76
+ const columns: ({
77
+ name: string;
78
+ width: number;
79
+ type?: undefined;
80
+ aggregate?: undefined;
81
+ } | {
82
+ name: string;
83
+ type: {
84
+ name: string;
85
+ renderer: {
86
+ name: string;
87
+ flashStyle: string;
88
+ };
89
+ formatting: {
90
+ decimals: number;
91
+ zeroPad: boolean;
92
+ };
93
+ };
94
+ aggregate: string;
95
+ width?: undefined;
96
+ } | {
97
+ name: string;
98
+ type: string;
99
+ aggregate: string;
100
+ width?: undefined;
101
+ } | {
102
+ name: string;
103
+ width?: undefined;
104
+ type?: undefined;
105
+ aggregate?: undefined;
106
+ })[];
107
+ }
108
+ export namespace instrumentSchemaFixed {
109
+ const columns_1: ({
110
+ name: string;
111
+ width: number;
112
+ locked: boolean;
113
+ type?: undefined;
114
+ aggregate?: undefined;
115
+ } | {
116
+ name: string;
117
+ width: number;
118
+ locked?: undefined;
119
+ type?: undefined;
120
+ aggregate?: undefined;
121
+ } | {
122
+ name: string;
123
+ type: {
124
+ name: string;
125
+ renderer: {
126
+ name: string;
127
+ flashStyle: string;
128
+ };
129
+ formatting: {
130
+ decimals: number;
131
+ zeroPad: boolean;
132
+ };
133
+ };
134
+ aggregate: string;
135
+ width?: undefined;
136
+ locked?: undefined;
137
+ } | {
138
+ name: string;
139
+ type: string;
140
+ aggregate: string;
141
+ width?: undefined;
142
+ locked?: undefined;
143
+ } | {
144
+ name: string;
145
+ width?: undefined;
146
+ locked?: undefined;
147
+ type?: undefined;
148
+ aggregate?: undefined;
149
+ })[];
150
+ export { columns_1 as columns };
151
+ }
152
+ export namespace instrumentSchemaLabels {
153
+ const columns_2: ({
154
+ name: string;
155
+ width: number;
156
+ label: string;
157
+ type?: undefined;
158
+ aggregate?: undefined;
159
+ } | {
160
+ name: string;
161
+ type: {
162
+ name: string;
163
+ renderer: {
164
+ name: string;
165
+ flashStyle: string;
166
+ };
167
+ formatting: {
168
+ decimals: number;
169
+ zeroPad: boolean;
170
+ };
171
+ };
172
+ aggregate: string;
173
+ width?: undefined;
174
+ label?: undefined;
175
+ } | {
176
+ name: string;
177
+ label: string;
178
+ type: string;
179
+ aggregate: string;
180
+ width?: undefined;
181
+ } | {
182
+ name: string;
183
+ label: string;
184
+ width?: undefined;
185
+ type?: undefined;
186
+ aggregate?: undefined;
187
+ } | {
188
+ name: string;
189
+ width?: undefined;
190
+ label?: undefined;
191
+ type?: undefined;
192
+ aggregate?: undefined;
193
+ })[];
194
+ export { columns_2 as columns };
195
+ }
196
+ export namespace instrumentSchemaHeaders {
197
+ const columns_3: ({
198
+ name: string;
199
+ width: number;
200
+ heading: string[];
201
+ type?: undefined;
202
+ aggregate?: undefined;
203
+ } | {
204
+ name: string;
205
+ type: {
206
+ name: string;
207
+ renderer: {
208
+ name: string;
209
+ flashStyle: string;
210
+ };
211
+ formatting: {
212
+ decimals: number;
213
+ zeroPad: boolean;
214
+ };
215
+ };
216
+ aggregate: string;
217
+ heading: string[];
218
+ width?: undefined;
219
+ } | {
220
+ name: string;
221
+ type: string;
222
+ aggregate: string;
223
+ heading: string[];
224
+ width?: undefined;
225
+ } | {
226
+ name: string;
227
+ heading: string[];
228
+ width?: undefined;
229
+ type?: undefined;
230
+ aggregate?: undefined;
231
+ })[];
232
+ export { columns_3 as columns };
233
+ }