@vuu-ui/vuu-table-extras 0.6.18 → 0.6.19-debug

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/cjs/index.js CHANGED
@@ -1,2 +1,2820 @@
1
- "use strict";var vn=Object.create;var dt=Object.defineProperty;var kn=Object.getOwnPropertyDescriptor;var En=Object.getOwnPropertyNames;var On=Object.getPrototypeOf,Sn=Object.prototype.hasOwnProperty;var Pn=(n,e)=>{for(var t in e)dt(n,t,{get:e[t],enumerable:!0})},Cs=(n,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of En(e))!Sn.call(n,i)&&i!==t&&dt(n,i,{get:()=>e[i],enumerable:!(s=kn(e,i))||s.enumerable});return n};var De=(n,e,t)=>(t=n!=null?vn(On(n)):{},Cs(e||!n||!n.__esModule?dt(t,"default",{value:n,enumerable:!0}):t,n)),wn=n=>Cs(dt({},"__esModule",{value:!0}),n);var bs=(n,e,t)=>{if(!e.has(n))throw TypeError("Cannot "+t)};var m=(n,e,t)=>(bs(n,e,"read from private field"),t?t.call(n):e.get(n)),Y=(n,e,t)=>{if(e.has(n))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(n):e.set(n,t)},xe=(n,e,t,s)=>(bs(n,e,"write to private field"),s?s.call(n,t):e.set(n,t),t);var Ni={};Pn(Ni,{ColumnExpressionInput:()=>us,ColumnNamedTerms:()=>wt,DataSourceStats:()=>Di,DatagridSettingsPanel:()=>Ti,columnExpressionLanguageSupport:()=>Vt,isCompleteExpression:()=>ts,isCompleteRelationalExpression:()=>ss,lastNamedChild:()=>At,useColumnExpressionEditor:()=>as,useColumnExpressionSuggestionProvider:()=>hs,walkTree:()=>es});module.exports=wn(Ni);var G=require("@vuu-ui/vuu-utils"),ks=De(require("classnames"),1);var mt=require("react"),ys=require("@vuu-ui/vuu-utils"),et=require("@vuu-ui/vuu-utils"),An=[void 0,void 0,void 0,void 0];function vs(n,e,t){var h;let s=(0,mt.useRef)(),[i,o,r,l]=s.current||An,{type:a}=t,u=(0,ys.isTypeDescriptor)(a)?(h=a.formatting)==null?void 0:h.decimals:void 0,c=n===i&&(0,et.isValidNumber)(e)&&(0,et.isValidNumber)(o)&&t===r?(0,et.getMovingValueDirection)(e,l,o,u):"";return(0,mt.useEffect)(()=>{s.current=[n,e,t,c]}),c}var xt=require("react/jsx-runtime"),Tn=String.fromCharCode(11014),Dn=String.fromCharCode(11015),{KEY:Nn}=G.metadataKeys,gt="vuuBackgroundCell",Ne={ArrowOnly:"arrow",BackgroundOnly:"bg-only",ArrowBackground:"arrow-bg"},Rn=n=>{if(typeof n=="string")return Ne.BackgroundOnly;if(n){let{renderer:e}=n;return e&&e.flashStyle||Ne.BackgroundOnly}},In=({column:n,row:e})=>{let{key:t,type:s,valueFormatter:i}=n,o=e[t],r=Rn(s),l=vs(e[Nn],o,n),a=r===Ne.ArrowOnly||r===Ne.ArrowBackground?l===G.UP1||l===G.UP2?Tn:l===G.DOWN1||l===G.DOWN2?Dn:null:null,u=l?" "+l:"",c=(0,ks.default)(gt,u,{[`${gt}-arrowOnly`]:r===Ne.ArrowOnly,[`${gt}-arrowBackground`]:r===Ne.ArrowBackground});return(0,xt.jsxs)("div",{className:c,tabIndex:-1,children:[(0,xt.jsx)("div",{className:`${gt}-flasher`,children:a}),i(e[n.key])]})};(0,G.registerComponent)("background",In,"cell-renderer",{serverDataType:["long","int","double"]});var I=require("@vuu-ui/vuu-codemirror"),ls=require("@vuu-ui/vuu-utils"),be=require("react");var J=require("@vuu-ui/vuu-codemirror");var Bn=0,tt=class{constructor(e,t){this.from=e,this.to=t}},S=class{constructor(e={}){this.id=Bn++,this.perNode=!!e.perNode,this.deserialize=e.deserialize||(()=>{throw new Error("This node type doesn't define a deserialize function")})}add(e){if(this.perNode)throw new RangeError("Can't add per-node props to node types");return typeof e!="function"&&(e=U.match(e)),t=>{let s=e(t);return s===void 0?null:[this,s]}}};S.closedBy=new S({deserialize:n=>n.split(" ")});S.openedBy=new S({deserialize:n=>n.split(" ")});S.group=new S({deserialize:n=>n.split(" ")});S.contextHash=new S({perNode:!0});S.lookAhead=new S({perNode:!0});S.mounted=new S({perNode:!0});var Fn=Object.create(null),U=class{constructor(e,t,s,i=0){this.name=e,this.props=t,this.id=s,this.flags=i}static define(e){let t=e.props&&e.props.length?Object.create(null):Fn,s=(e.top?1:0)|(e.skipped?2:0)|(e.error?4:0)|(e.name==null?8:0),i=new U(e.name||"",t,e.id,s);if(e.props){for(let o of e.props)if(Array.isArray(o)||(o=o(i)),o){if(o[0].perNode)throw new RangeError("Can't store a per-node prop on a node type");t[o[0].id]=o[1]}}return i}prop(e){return this.props[e.id]}get isTop(){return(this.flags&1)>0}get isSkipped(){return(this.flags&2)>0}get isError(){return(this.flags&4)>0}get isAnonymous(){return(this.flags&8)>0}is(e){if(typeof e=="string"){if(this.name==e)return!0;let t=this.prop(S.group);return t?t.indexOf(e)>-1:!1}return this.id==e}static match(e){let t=Object.create(null);for(let s in e)for(let i of s.split(" "))t[i]=e[s];return s=>{for(let i=s.prop(S.group),o=-1;o<(i?i.length:0);o++){let r=t[o<0?s.name:i[o]];if(r)return r}}}};U.none=new U("",Object.create(null),0,8);var Re=class{constructor(e){this.types=e;for(let t=0;t<e.length;t++)if(e[t].id!=t)throw new RangeError("Node type ids should correspond to array positions when creating a node set")}extend(...e){let t=[];for(let s of this.types){let i=null;for(let o of e){let r=o(s);r&&(i||(i=Object.assign({},s.props)),i[r[0].id]=r[1])}t.push(i?new U(s.name,i,s.id,s.flags):s)}return new Re(t)}},Ct=new WeakMap,Es=new WeakMap,L;(function(n){n[n.ExcludeBuffers=1]="ExcludeBuffers",n[n.IncludeAnonymous=2]="IncludeAnonymous",n[n.IgnoreMounts=4]="IgnoreMounts",n[n.IgnoreOverlays=8]="IgnoreOverlays"})(L||(L={}));var Q=class{constructor(e,t,s,i,o){if(this.type=e,this.children=t,this.positions=s,this.length=i,this.props=null,o&&o.length){this.props=Object.create(null);for(let[r,l]of o)this.props[typeof r=="number"?r:r.id]=l}}toString(){let e=this.prop(S.mounted);if(e&&!e.overlay)return e.tree.toString();let t="";for(let s of this.children){let i=s.toString();i&&(t&&(t+=","),t+=i)}return this.type.name?(/\W/.test(this.type.name)&&!this.type.isError?JSON.stringify(this.type.name):this.type.name)+(t.length?"("+t+")":""):t}cursor(e=0){return new Be(this.topNode,e)}cursorAt(e,t=0,s=0){let i=Ct.get(this)||this.topNode,o=new Be(i);return o.moveTo(e,t),Ct.set(this,o._tree),o}get topNode(){return new Z(this,0,0,null)}resolve(e,t=0){let s=Ie(Ct.get(this)||this.topNode,e,t,!1);return Ct.set(this,s),s}resolveInner(e,t=0){let s=Ie(Es.get(this)||this.topNode,e,t,!0);return Es.set(this,s),s}iterate(e){let{enter:t,leave:s,from:i=0,to:o=this.length}=e;for(let r=this.cursor((e.mode||0)|L.IncludeAnonymous);;){let l=!1;if(r.from<=o&&r.to>=i&&(r.type.isAnonymous||t(r)!==!1)){if(r.firstChild())continue;l=!0}for(;l&&s&&!r.type.isAnonymous&&s(r),!r.nextSibling();){if(!r.parent())return;l=!0}}}prop(e){return e.perNode?this.props?this.props[e.id]:void 0:this.type.prop(e)}get propValues(){let e=[];if(this.props)for(let t in this.props)e.push([+t,this.props[t]]);return e}balance(e={}){return this.children.length<=8?this:zt(U.none,this.children,this.positions,0,this.children.length,0,this.length,(t,s,i)=>new Q(this.type,t,s,i,this.propValues),e.makeTree||((t,s,i)=>new Q(U.none,t,s,i)))}static build(e){return Ln(e)}};Q.empty=new Q(U.none,[],[],0);var st=class{constructor(e,t){this.buffer=e,this.index=t}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}get pos(){return this.index}next(){this.index-=4}fork(){return new st(this.buffer,this.index)}},ae=class{constructor(e,t,s){this.buffer=e,this.length=t,this.set=s}get type(){return U.none}toString(){let e=[];for(let t=0;t<this.buffer.length;)e.push(this.childString(t)),t=this.buffer[t+3];return e.join(",")}childString(e){let t=this.buffer[e],s=this.buffer[e+3],i=this.set.types[t],o=i.name;if(/\W/.test(o)&&!i.isError&&(o=JSON.stringify(o)),e+=4,s==e)return o;let r=[];for(;e<s;)r.push(this.childString(e)),e=this.buffer[e+3];return o+"("+r.join(",")+")"}findChild(e,t,s,i,o){let{buffer:r}=this,l=-1;for(let a=e;a!=t&&!(Ss(o,i,r[a+1],r[a+2])&&(l=a,s>0));a=r[a+3]);return l}slice(e,t,s){let i=this.buffer,o=new Uint16Array(t-e),r=0;for(let l=e,a=0;l<t;){o[a++]=i[l++],o[a++]=i[l++]-s;let u=o[a++]=i[l++]-s;o[a++]=i[l++]-e,r=Math.max(r,u)}return new ae(o,r,this.set)}};function Ss(n,e,t,s){switch(n){case-2:return t<e;case-1:return s>=e&&t<e;case 0:return t<e&&s>e;case 1:return t<=e&&s>e;case 2:return s>e;case 4:return!0}}function Ps(n,e){let t=n.childBefore(e);for(;t;){let s=t.lastChild;if(!s||s.to!=t.to)break;s.type.isError&&s.from==s.to?(n=t,t=s.prevSibling):t=s}return n}function Ie(n,e,t,s){for(var i;n.from==n.to||(t<1?n.from>=e:n.from>e)||(t>-1?n.to<=e:n.to<e);){let r=!s&&n instanceof Z&&n.index<0?null:n.parent;if(!r)return n;n=r}let o=s?0:L.IgnoreOverlays;if(s)for(let r=n,l=r.parent;l;r=l,l=r.parent)r instanceof Z&&r.index<0&&((i=l.enter(e,t,o))===null||i===void 0?void 0:i.from)!=r.from&&(n=l);for(;;){let r=n.enter(e,t,o);if(!r)return n;n=r}}var Z=class{constructor(e,t,s,i){this._tree=e,this.from=t,this.index=s,this._parent=i}get type(){return this._tree.type}get name(){return this._tree.type.name}get to(){return this.from+this._tree.length}nextChild(e,t,s,i,o=0){for(let r=this;;){for(let{children:l,positions:a}=r._tree,u=t>0?l.length:-1;e!=u;e+=t){let c=l[e],h=a[e]+r.from;if(Ss(i,s,h,h+c.length)){if(c instanceof ae){if(o&L.ExcludeBuffers)continue;let d=c.findChild(0,c.buffer.length,t,s-h,i);if(d>-1)return new ee(new Ft(r,c,e,h),null,d)}else if(o&L.IncludeAnonymous||!c.type.isAnonymous||Qt(c)){let d;if(!(o&L.IgnoreMounts)&&c.props&&(d=c.prop(S.mounted))&&!d.overlay)return new Z(d.tree,h,e,r);let p=new Z(c,h,e,r);return o&L.IncludeAnonymous||!p.type.isAnonymous?p:p.nextChild(t<0?c.children.length-1:0,t,s,i)}}}if(o&L.IncludeAnonymous||!r.type.isAnonymous||(r.index>=0?e=r.index+t:e=t<0?-1:r._parent._tree.children.length,r=r._parent,!r))return null}}get firstChild(){return this.nextChild(0,1,0,4)}get lastChild(){return this.nextChild(this._tree.children.length-1,-1,0,4)}childAfter(e){return this.nextChild(0,1,e,2)}childBefore(e){return this.nextChild(this._tree.children.length-1,-1,e,-2)}enter(e,t,s=0){let i;if(!(s&L.IgnoreOverlays)&&(i=this._tree.prop(S.mounted))&&i.overlay){let o=e-this.from;for(let{from:r,to:l}of i.overlay)if((t>0?r<=o:r<o)&&(t<0?l>=o:l>o))return new Z(i.tree,i.overlay[0].from+this.from,-1,this)}return this.nextChild(0,1,e,t,s)}nextSignificantParent(){let e=this;for(;e.type.isAnonymous&&e._parent;)e=e._parent;return e}get parent(){return this._parent?this._parent.nextSignificantParent():null}get nextSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index+1,1,0,4):null}get prevSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index-1,-1,0,4):null}cursor(e=0){return new Be(this,e)}get tree(){return this._tree}toTree(){return this._tree}resolve(e,t=0){return Ie(this,e,t,!1)}resolveInner(e,t=0){return Ie(this,e,t,!0)}enterUnfinishedNodesBefore(e){return Ps(this,e)}getChild(e,t=null,s=null){let i=yt(this,e,t,s);return i.length?i[0]:null}getChildren(e,t=null,s=null){return yt(this,e,t,s)}toString(){return this._tree.toString()}get node(){return this}matchContext(e){return vt(this,e)}};function yt(n,e,t,s){let i=n.cursor(),o=[];if(!i.firstChild())return o;if(t!=null){for(;!i.type.is(t);)if(!i.nextSibling())return o}for(;;){if(s!=null&&i.type.is(s))return o;if(i.type.is(e)&&o.push(i.node),!i.nextSibling())return s==null?o:[]}}function vt(n,e,t=e.length-1){for(let s=n.parent;t>=0;s=s.parent){if(!s)return!1;if(!s.type.isAnonymous){if(e[t]&&e[t]!=s.name)return!1;t--}}return!0}var Ft=class{constructor(e,t,s,i){this.parent=e,this.buffer=t,this.index=s,this.start=i}},ee=class{get name(){return this.type.name}get from(){return this.context.start+this.context.buffer.buffer[this.index+1]}get to(){return this.context.start+this.context.buffer.buffer[this.index+2]}constructor(e,t,s){this.context=e,this._parent=t,this.index=s,this.type=e.buffer.set.types[e.buffer.buffer[s]]}child(e,t,s){let{buffer:i}=this.context,o=i.findChild(this.index+4,i.buffer[this.index+3],e,t-this.context.start,s);return o<0?null:new ee(this.context,this,o)}get firstChild(){return this.child(1,0,4)}get lastChild(){return this.child(-1,0,4)}childAfter(e){return this.child(1,e,2)}childBefore(e){return this.child(-1,e,-2)}enter(e,t,s=0){if(s&L.ExcludeBuffers)return null;let{buffer:i}=this.context,o=i.findChild(this.index+4,i.buffer[this.index+3],t>0?1:-1,e-this.context.start,t);return o<0?null:new ee(this.context,this,o)}get parent(){return this._parent||this.context.parent.nextSignificantParent()}externalSibling(e){return this._parent?null:this.context.parent.nextChild(this.context.index+e,e,0,4)}get nextSibling(){let{buffer:e}=this.context,t=e.buffer[this.index+3];return t<(this._parent?e.buffer[this._parent.index+3]:e.buffer.length)?new ee(this.context,this._parent,t):this.externalSibling(1)}get prevSibling(){let{buffer:e}=this.context,t=this._parent?this._parent.index+4:0;return this.index==t?this.externalSibling(-1):new ee(this.context,this._parent,e.findChild(t,this.index,-1,0,4))}cursor(e=0){return new Be(this,e)}get tree(){return null}toTree(){let e=[],t=[],{buffer:s}=this.context,i=this.index+4,o=s.buffer[this.index+3];if(o>i){let r=s.buffer[this.index+1];e.push(s.slice(i,o,r)),t.push(0)}return new Q(this.type,e,t,this.to-this.from)}resolve(e,t=0){return Ie(this,e,t,!1)}resolveInner(e,t=0){return Ie(this,e,t,!0)}enterUnfinishedNodesBefore(e){return Ps(this,e)}toString(){return this.context.buffer.childString(this.index)}getChild(e,t=null,s=null){let i=yt(this,e,t,s);return i.length?i[0]:null}getChildren(e,t=null,s=null){return yt(this,e,t,s)}get node(){return this}matchContext(e){return vt(this,e)}},Be=class{get name(){return this.type.name}constructor(e,t=0){if(this.mode=t,this.buffer=null,this.stack=[],this.index=0,this.bufferNode=null,e instanceof Z)this.yieldNode(e);else{this._tree=e.context.parent,this.buffer=e.context;for(let s=e._parent;s;s=s._parent)this.stack.unshift(s.index);this.bufferNode=e,this.yieldBuf(e.index)}}yieldNode(e){return e?(this._tree=e,this.type=e.type,this.from=e.from,this.to=e.to,!0):!1}yieldBuf(e,t){this.index=e;let{start:s,buffer:i}=this.buffer;return this.type=t||i.set.types[i.buffer[e]],this.from=s+i.buffer[e+1],this.to=s+i.buffer[e+2],!0}yield(e){return e?e instanceof Z?(this.buffer=null,this.yieldNode(e)):(this.buffer=e.context,this.yieldBuf(e.index,e.type)):!1}toString(){return this.buffer?this.buffer.buffer.childString(this.index):this._tree.toString()}enterChild(e,t,s){if(!this.buffer)return this.yield(this._tree.nextChild(e<0?this._tree._tree.children.length-1:0,e,t,s,this.mode));let{buffer:i}=this.buffer,o=i.findChild(this.index+4,i.buffer[this.index+3],e,t-this.buffer.start,s);return o<0?!1:(this.stack.push(this.index),this.yieldBuf(o))}firstChild(){return this.enterChild(1,0,4)}lastChild(){return this.enterChild(-1,0,4)}childAfter(e){return this.enterChild(1,e,2)}childBefore(e){return this.enterChild(-1,e,-2)}enter(e,t,s=this.mode){return this.buffer?s&L.ExcludeBuffers?!1:this.enterChild(1,e,t):this.yield(this._tree.enter(e,t,s))}parent(){if(!this.buffer)return this.yieldNode(this.mode&L.IncludeAnonymous?this._tree._parent:this._tree.parent);if(this.stack.length)return this.yieldBuf(this.stack.pop());let e=this.mode&L.IncludeAnonymous?this.buffer.parent:this.buffer.parent.nextSignificantParent();return this.buffer=null,this.yieldNode(e)}sibling(e){if(!this.buffer)return this._tree._parent?this.yield(this._tree.index<0?null:this._tree._parent.nextChild(this._tree.index+e,e,0,4,this.mode)):!1;let{buffer:t}=this.buffer,s=this.stack.length-1;if(e<0){let i=s<0?0:this.stack[s]+4;if(this.index!=i)return this.yieldBuf(t.findChild(i,this.index,-1,0,4))}else{let i=t.buffer[this.index+3];if(i<(s<0?t.buffer.length:t.buffer[this.stack[s]+3]))return this.yieldBuf(i)}return s<0?this.yield(this.buffer.parent.nextChild(this.buffer.index+e,e,0,4,this.mode)):!1}nextSibling(){return this.sibling(1)}prevSibling(){return this.sibling(-1)}atLastNode(e){let t,s,{buffer:i}=this;if(i){if(e>0){if(this.index<i.buffer.buffer.length)return!1}else for(let o=0;o<this.index;o++)if(i.buffer.buffer[o+3]<this.index)return!1;({index:t,parent:s}=i)}else({index:t,_parent:s}=this._tree);for(;s;{index:t,_parent:s}=s)if(t>-1)for(let o=t+e,r=e<0?-1:s._tree.children.length;o!=r;o+=e){let l=s._tree.children[o];if(this.mode&L.IncludeAnonymous||l instanceof ae||!l.type.isAnonymous||Qt(l))return!1}return!0}move(e,t){if(t&&this.enterChild(e,0,4))return!0;for(;;){if(this.sibling(e))return!0;if(this.atLastNode(e)||!this.parent())return!1}}next(e=!0){return this.move(1,e)}prev(e=!0){return this.move(-1,e)}moveTo(e,t=0){for(;(this.from==this.to||(t<1?this.from>=e:this.from>e)||(t>-1?this.to<=e:this.to<e))&&this.parent(););for(;this.enterChild(1,e,t););return this}get node(){if(!this.buffer)return this._tree;let e=this.bufferNode,t=null,s=0;if(e&&e.context==this.buffer)e:for(let i=this.index,o=this.stack.length;o>=0;){for(let r=e;r;r=r._parent)if(r.index==i){if(i==this.index)return r;t=r,s=o+1;break e}i=this.stack[--o]}for(let i=s;i<this.stack.length;i++)t=new ee(this.buffer,t,this.stack[i]);return this.bufferNode=new ee(this.buffer,t,this.index)}get tree(){return this.buffer?null:this._tree._tree}iterate(e,t){for(let s=0;;){let i=!1;if(this.type.isAnonymous||e(this)!==!1){if(this.firstChild()){s++;continue}this.type.isAnonymous||(i=!0)}for(;i&&t&&t(this),i=this.type.isAnonymous,!this.nextSibling();){if(!s)return;this.parent(),s--,i=!0}}}matchContext(e){if(!this.buffer)return vt(this.node,e);let{buffer:t}=this.buffer,{types:s}=t.set;for(let i=e.length-1,o=this.stack.length-1;i>=0;o--){if(o<0)return vt(this.node,e,i);let r=s[t.buffer[this.stack[o]]];if(!r.isAnonymous){if(e[i]&&e[i]!=r.name)return!1;i--}}return!0}};function Qt(n){return n.children.some(e=>e instanceof ae||!e.type.isAnonymous||Qt(e))}function Ln(n){var e;let{buffer:t,nodeSet:s,maxBufferLength:i=1024,reused:o=[],minRepeatType:r=s.types.length}=n,l=Array.isArray(t)?new st(t,t.length):t,a=s.types,u=0,c=0;function h(k,y,C,E,F){let{id:O,start:v,end:N,size:$}=l,X=c;for(;$<0;)if(l.next(),$==-1){let ge=o[O];C.push(ge),E.push(v-k);return}else if($==-3){u=O;return}else if($==-4){c=O;return}else throw new RangeError(`Unrecognized record size: ${$}`);let Ae=a[O],me,oe,gs=v-k;if(N-v<=i&&(oe=x(l.pos-y,F))){let ge=new Uint16Array(oe.size-oe.skip),V=l.pos-oe.size,le=ge.length;for(;l.pos>V;)le=g(oe.start,ge,le);me=new ae(ge,N-oe.start,s),gs=oe.start-k}else{let ge=l.pos-$;l.next();let V=[],le=[],ye=O>=r?O:-1,Te=0,ft=N;for(;l.pos>ge;)ye>=0&&l.id==ye&&l.size>=0?(l.end<=ft-i&&(p(V,le,v,Te,l.end,ft,ye,X),Te=V.length,ft=l.end),l.next()):h(v,ge,V,le,ye);if(ye>=0&&Te>0&&Te<V.length&&p(V,le,v,Te,v,ft,ye,X),V.reverse(),le.reverse(),ye>-1&&Te>0){let xs=d(Ae);me=zt(Ae,V,le,0,V.length,0,N-v,xs,xs)}else me=f(Ae,V,le,N-v,X-N)}C.push(me),E.push(gs)}function d(k){return(y,C,E)=>{let F=0,O=y.length-1,v,N;if(O>=0&&(v=y[O])instanceof Q){if(!O&&v.type==k&&v.length==E)return v;(N=v.prop(S.lookAhead))&&(F=C[O]+v.length+N)}return f(k,y,C,E,F)}}function p(k,y,C,E,F,O,v,N){let $=[],X=[];for(;k.length>E;)$.push(k.pop()),X.push(y.pop()+C-F);k.push(f(s.types[v],$,X,O-F,N-O)),y.push(F-C)}function f(k,y,C,E,F=0,O){if(u){let v=[S.contextHash,u];O=O?[v].concat(O):[v]}if(F>25){let v=[S.lookAhead,F];O=O?[v].concat(O):[v]}return new Q(k,y,C,E,O)}function x(k,y){let C=l.fork(),E=0,F=0,O=0,v=C.end-i,N={size:0,start:0,skip:0};e:for(let $=C.pos-k;C.pos>$;){let X=C.size;if(C.id==y&&X>=0){N.size=E,N.start=F,N.skip=O,O+=4,E+=4,C.next();continue}let Ae=C.pos-X;if(X<0||Ae<$||C.start<v)break;let me=C.id>=r?4:0,oe=C.start;for(C.next();C.pos>Ae;){if(C.size<0)if(C.size==-3)me+=4;else break e;else C.id>=r&&(me+=4);C.next()}F=oe,E+=X,O+=me}return(y<0||E==k)&&(N.size=E,N.start=F,N.skip=O),N.size>4?N:void 0}function g(k,y,C){let{id:E,start:F,end:O,size:v}=l;if(l.next(),v>=0&&E<r){let N=C;if(v>4){let $=l.pos-(v-4);for(;l.pos>$;)C=g(k,y,C)}y[--C]=N,y[--C]=O-k,y[--C]=F-k,y[--C]=E}else v==-3?u=E:v==-4&&(c=E);return C}let w=[],R=[];for(;l.pos>0;)h(n.start||0,n.bufferStart||0,w,R,-1);let D=(e=n.length)!==null&&e!==void 0?e:w.length?R[0]+w[0].length:0;return new Q(a[n.topID],w.reverse(),R.reverse(),D)}var Os=new WeakMap;function bt(n,e){if(!n.isAnonymous||e instanceof ae||e.type!=n)return 1;let t=Os.get(e);if(t==null){t=1;for(let s of e.children){if(s.type!=n||!(s instanceof Q)){t=1;break}t+=bt(n,s)}Os.set(e,t)}return t}function zt(n,e,t,s,i,o,r,l,a){let u=0;for(let f=s;f<i;f++)u+=bt(n,e[f]);let c=Math.ceil(u*1.5/8),h=[],d=[];function p(f,x,g,w,R){for(let D=g;D<w;){let k=D,y=x[D],C=bt(n,f[D]);for(D++;D<w;D++){let E=bt(n,f[D]);if(C+E>=c)break;C+=E}if(D==k+1){if(C>c){let E=f[k];p(E.children,E.positions,0,E.children.length,x[k]+R);continue}h.push(f[k])}else{let E=x[D-1]+f[D-1].length-y;h.push(zt(n,f,x,k,D,y,E,null,a))}d.push(y+R-o)}}return p(e,t,s,i,0),(l||a)(h,d,r)}var kt=class{startParse(e,t,s){return typeof e=="string"&&(e=new Lt(e)),s=s?s.length?s.map(i=>new tt(i.from,i.to)):[new tt(0,0)]:[new tt(0,e.length)],this.createParse(e,t||[],s)}parse(e,t,s){let i=this.startParse(e,t,s);for(;;){let o=i.advance();if(o)return o}}},Lt=class{constructor(e){this.string=e}get length(){return this.string.length}chunk(e){return this.string.slice(e)}get lineChunks(){return!1}read(e,t){return this.string.slice(e,t)}};var Wi=new S({perNode:!0});var Le=class{constructor(e,t,s,i,o,r,l,a,u,c=0,h){this.p=e,this.stack=t,this.state=s,this.reducePos=i,this.pos=o,this.score=r,this.buffer=l,this.bufferBase=a,this.curContext=u,this.lookAhead=c,this.parent=h}toString(){return`[${this.stack.filter((e,t)=>t%3==0).concat(this.state)}]@${this.pos}${this.score?"!"+this.score:""}`}static start(e,t,s=0){let i=e.parser.context;return new Le(e,[],t,s,s,0,[],0,i?new Et(i,i.start):null,0,null)}get context(){return this.curContext?this.curContext.context:null}pushState(e,t){this.stack.push(this.state,t,this.bufferBase+this.buffer.length),this.state=e}reduce(e){var t;let s=e>>19,i=e&65535,{parser:o}=this.p,r=o.dynamicPrecedence(i);if(r&&(this.score+=r),s==0){this.pushState(o.getGoto(this.state,i,!0),this.reducePos),i<o.minRepeatTerm&&this.storeNode(i,this.reducePos,this.reducePos,4,!0),this.reduceContext(i,this.reducePos);return}let l=this.stack.length-(s-1)*3-(e&262144?6:0),a=l?this.stack[l-2]:this.p.ranges[0].from,u=this.reducePos-a;u>=2e3&&!(!((t=this.p.parser.nodeSet.types[i])===null||t===void 0)&&t.isAnonymous)&&(a==this.p.lastBigReductionStart?(this.p.bigReductionCount++,this.p.lastBigReductionSize=u):this.p.lastBigReductionSize<u&&(this.p.bigReductionCount=1,this.p.lastBigReductionStart=a,this.p.lastBigReductionSize=u));let c=l?this.stack[l-1]:0,h=this.bufferBase+this.buffer.length-c;if(i<o.minRepeatTerm||e&131072){let d=o.stateFlag(this.state,1)?this.pos:this.reducePos;this.storeNode(i,a,d,h+4,!0)}if(e&262144)this.state=this.stack[l];else{let d=this.stack[l-3];this.state=o.getGoto(d,i,!0)}for(;this.stack.length>l;)this.stack.pop();this.reduceContext(i,a)}storeNode(e,t,s,i=4,o=!1){if(e==0&&(!this.stack.length||this.stack[this.stack.length-1]<this.buffer.length+this.bufferBase)){let r=this,l=this.buffer.length;if(l==0&&r.parent&&(l=r.bufferBase-r.parent.bufferBase,r=r.parent),l>0&&r.buffer[l-4]==0&&r.buffer[l-1]>-1){if(t==s)return;if(r.buffer[l-2]>=t){r.buffer[l-2]=s;return}}}if(!o||this.pos==s)this.buffer.push(e,t,s,i);else{let r=this.buffer.length;if(r>0&&this.buffer[r-4]!=0)for(;r>0&&this.buffer[r-2]>s;)this.buffer[r]=this.buffer[r-4],this.buffer[r+1]=this.buffer[r-3],this.buffer[r+2]=this.buffer[r-2],this.buffer[r+3]=this.buffer[r-1],r-=4,i>4&&(i-=4);this.buffer[r]=e,this.buffer[r+1]=t,this.buffer[r+2]=s,this.buffer[r+3]=i}}shift(e,t,s){let i=this.pos;if(e&131072)this.pushState(e&65535,this.pos);else if(e&262144)this.pos=s,this.shiftContext(t,i),t<=this.p.parser.maxNode&&this.buffer.push(t,i,s,4);else{let o=e,{parser:r}=this.p;(s>this.pos||t<=r.maxNode)&&(this.pos=s,r.stateFlag(o,1)||(this.reducePos=s)),this.pushState(o,i),this.shiftContext(t,i),t<=r.maxNode&&this.buffer.push(t,i,s,4)}}apply(e,t,s){e&65536?this.reduce(e):this.shift(e,t,s)}useNode(e,t){let s=this.p.reused.length-1;(s<0||this.p.reused[s]!=e)&&(this.p.reused.push(e),s++);let i=this.pos;this.reducePos=this.pos=i+e.length,this.pushState(t,i),this.buffer.push(s,i,this.reducePos,-1),this.curContext&&this.updateContext(this.curContext.tracker.reuse(this.curContext.context,e,this,this.p.stream.reset(this.pos-e.length)))}split(){let e=this,t=e.buffer.length;for(;t>0&&e.buffer[t-2]>e.reducePos;)t-=4;let s=e.buffer.slice(t),i=e.bufferBase+t;for(;e&&i==e.bufferBase;)e=e.parent;return new Le(this.p,this.stack.slice(),this.state,this.reducePos,this.pos,this.score,s,i,this.curContext,this.lookAhead,e)}recoverByDelete(e,t){let s=e<=this.p.parser.maxNode;s&&this.storeNode(e,this.pos,t,4),this.storeNode(0,this.pos,t,s?8:4),this.pos=this.reducePos=t,this.score-=190}canShift(e){for(let t=new $t(this);;){let s=this.p.parser.stateSlot(t.state,4)||this.p.parser.hasAction(t.state,e);if(s==0)return!1;if(!(s&65536))return!0;t.reduce(s)}}recoverByInsert(e){if(this.stack.length>=300)return[];let t=this.p.parser.nextStates(this.state);if(t.length>4<<1||this.stack.length>=120){let i=[];for(let o=0,r;o<t.length;o+=2)(r=t[o+1])!=this.state&&this.p.parser.hasAction(r,e)&&i.push(t[o],r);if(this.stack.length<120)for(let o=0;i.length<4<<1&&o<t.length;o+=2){let r=t[o+1];i.some((l,a)=>a&1&&l==r)||i.push(t[o],r)}t=i}let s=[];for(let i=0;i<t.length&&s.length<4;i+=2){let o=t[i+1];if(o==this.state)continue;let r=this.split();r.pushState(o,this.pos),r.storeNode(0,r.pos,r.pos,4,!0),r.shiftContext(t[i],this.pos),r.score-=200,s.push(r)}return s}forceReduce(){let e=this.p.parser.stateSlot(this.state,5);if(!(e&65536))return!1;let{parser:t}=this.p;if(!t.validAction(this.state,e)){let s=e>>19,i=e&65535,o=this.stack.length-s*3;if(o<0||t.getGoto(this.stack[o],i,!1)<0)return!1;this.storeNode(0,this.reducePos,this.reducePos,4,!0),this.score-=100}return this.reducePos=this.pos,this.reduce(e),!0}forceAll(){for(;!this.p.parser.stateFlag(this.state,2);)if(!this.forceReduce()){this.storeNode(0,this.pos,this.pos,4,!0);break}return this}get deadEnd(){if(this.stack.length!=3)return!1;let{parser:e}=this.p;return e.data[e.stateSlot(this.state,1)]==65535&&!e.stateSlot(this.state,4)}restart(){this.state=this.stack[0],this.stack.length=0}sameState(e){if(this.state!=e.state||this.stack.length!=e.stack.length)return!1;for(let t=0;t<this.stack.length;t+=3)if(this.stack[t]!=e.stack[t])return!1;return!0}get parser(){return this.p.parser}dialectEnabled(e){return this.p.parser.dialect.flags[e]}shiftContext(e,t){this.curContext&&this.updateContext(this.curContext.tracker.shift(this.curContext.context,e,this,this.p.stream.reset(t)))}reduceContext(e,t){this.curContext&&this.updateContext(this.curContext.tracker.reduce(this.curContext.context,e,this,this.p.stream.reset(t)))}emitContext(){let e=this.buffer.length-1;(e<0||this.buffer[e]!=-3)&&this.buffer.push(this.curContext.hash,this.reducePos,this.reducePos,-3)}emitLookAhead(){let e=this.buffer.length-1;(e<0||this.buffer[e]!=-4)&&this.buffer.push(this.lookAhead,this.reducePos,this.reducePos,-4)}updateContext(e){if(e!=this.curContext.context){let t=new Et(this.curContext.tracker,e);t.hash!=this.curContext.hash&&this.emitContext(),this.curContext=t}}setLookAhead(e){e>this.lookAhead&&(this.emitLookAhead(),this.lookAhead=e)}close(){this.curContext&&this.curContext.tracker.strict&&this.emitContext(),this.lookAhead>0&&this.emitLookAhead()}},Et=class{constructor(e,t){this.tracker=e,this.context=t,this.hash=e.strict?e.hash(t):0}},ws;(function(n){n[n.Insert=200]="Insert",n[n.Delete=190]="Delete",n[n.Reduce=100]="Reduce",n[n.MaxNext=4]="MaxNext",n[n.MaxInsertStackDepth=300]="MaxInsertStackDepth",n[n.DampenInsertStackDepth=120]="DampenInsertStackDepth",n[n.MinBigReduction=2e3]="MinBigReduction"})(ws||(ws={}));var $t=class{constructor(e){this.start=e,this.state=e.state,this.stack=e.stack,this.base=this.stack.length}reduce(e){let t=e&65535,s=e>>19;s==0?(this.stack==this.start.stack&&(this.stack=this.stack.slice()),this.stack.push(this.state,0,0),this.base+=3):this.base-=(s-1)*3;let i=this.start.p.parser.getGoto(this.stack[this.base-3],t,!0);this.state=i}},Qe=class{constructor(e,t,s){this.stack=e,this.pos=t,this.index=s,this.buffer=e.buffer,this.index==0&&this.maybeNext()}static create(e,t=e.bufferBase+e.buffer.length){return new Qe(e,t,t-e.bufferBase)}maybeNext(){let e=this.stack.parent;e!=null&&(this.index=this.stack.bufferBase-e.bufferBase,this.stack=e,this.buffer=e.buffer)}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}next(){this.index-=4,this.pos-=4,this.index==0&&this.maybeNext()}fork(){return new Qe(this.stack,this.pos,this.index)}};function nt(n,e=Uint16Array){if(typeof n!="string")return n;let t=null;for(let s=0,i=0;s<n.length;){let o=0;for(;;){let r=n.charCodeAt(s++),l=!1;if(r==126){o=65535;break}r>=92&&r--,r>=34&&r--;let a=r-32;if(a>=46&&(a-=46,l=!0),o+=a,l)break;o*=46}t?t[i++]=o:t=new e(o)}return t}var Fe=class{constructor(){this.start=-1,this.value=-1,this.end=-1,this.extended=-1,this.lookAhead=0,this.mask=0,this.context=0}},As=new Fe,Ut=class{constructor(e,t){this.input=e,this.ranges=t,this.chunk="",this.chunkOff=0,this.chunk2="",this.chunk2Pos=0,this.next=-1,this.token=As,this.rangeIndex=0,this.pos=this.chunkPos=t[0].from,this.range=t[0],this.end=t[t.length-1].to,this.readNext()}resolveOffset(e,t){let s=this.range,i=this.rangeIndex,o=this.pos+e;for(;o<s.from;){if(!i)return null;let r=this.ranges[--i];o-=s.from-r.to,s=r}for(;t<0?o>s.to:o>=s.to;){if(i==this.ranges.length-1)return null;let r=this.ranges[++i];o+=r.from-s.to,s=r}return o}clipPos(e){if(e>=this.range.from&&e<this.range.to)return e;for(let t of this.ranges)if(t.to>e)return Math.max(e,t.from);return this.end}peek(e){let t=this.chunkOff+e,s,i;if(t>=0&&t<this.chunk.length)s=this.pos+e,i=this.chunk.charCodeAt(t);else{let o=this.resolveOffset(e,1);if(o==null)return-1;if(s=o,s>=this.chunk2Pos&&s<this.chunk2Pos+this.chunk2.length)i=this.chunk2.charCodeAt(s-this.chunk2Pos);else{let r=this.rangeIndex,l=this.range;for(;l.to<=s;)l=this.ranges[++r];this.chunk2=this.input.chunk(this.chunk2Pos=s),s+this.chunk2.length>l.to&&(this.chunk2=this.chunk2.slice(0,l.to-s)),i=this.chunk2.charCodeAt(0)}}return s>=this.token.lookAhead&&(this.token.lookAhead=s+1),i}acceptToken(e,t=0){let s=t?this.resolveOffset(t,-1):this.pos;if(s==null||s<this.token.start)throw new RangeError("Token end out of bounds");this.token.value=e,this.token.end=s}getChunk(){if(this.pos>=this.chunk2Pos&&this.pos<this.chunk2Pos+this.chunk2.length){let{chunk:e,chunkPos:t}=this;this.chunk=this.chunk2,this.chunkPos=this.chunk2Pos,this.chunk2=e,this.chunk2Pos=t,this.chunkOff=this.pos-this.chunkPos}else{this.chunk2=this.chunk,this.chunk2Pos=this.chunkPos;let e=this.input.chunk(this.pos),t=this.pos+e.length;this.chunk=t>this.range.to?e.slice(0,this.range.to-this.pos):e,this.chunkPos=this.pos,this.chunkOff=0}}readNext(){return this.chunkOff>=this.chunk.length&&(this.getChunk(),this.chunkOff==this.chunk.length)?this.next=-1:this.next=this.chunk.charCodeAt(this.chunkOff)}advance(e=1){for(this.chunkOff+=e;this.pos+e>=this.range.to;){if(this.rangeIndex==this.ranges.length-1)return this.setDone();e-=this.range.to-this.pos,this.range=this.ranges[++this.rangeIndex],this.pos=this.range.from}return this.pos+=e,this.pos>=this.token.lookAhead&&(this.token.lookAhead=this.pos+1),this.readNext()}setDone(){return this.pos=this.chunkPos=this.end,this.range=this.ranges[this.rangeIndex=this.ranges.length-1],this.chunk="",this.next=-1}reset(e,t){if(t?(this.token=t,t.start=e,t.lookAhead=e+1,t.value=t.extended=-1):this.token=As,this.pos!=e){if(this.pos=e,e==this.end)return this.setDone(),this;for(;e<this.range.from;)this.range=this.ranges[--this.rangeIndex];for(;e>=this.range.to;)this.range=this.ranges[++this.rangeIndex];e>=this.chunkPos&&e<this.chunkPos+this.chunk.length?this.chunkOff=e-this.chunkPos:(this.chunk="",this.chunkOff=0),this.readNext()}return this}read(e,t){if(e>=this.chunkPos&&t<=this.chunkPos+this.chunk.length)return this.chunk.slice(e-this.chunkPos,t-this.chunkPos);if(e>=this.chunk2Pos&&t<=this.chunk2Pos+this.chunk2.length)return this.chunk2.slice(e-this.chunk2Pos,t-this.chunk2Pos);if(e>=this.range.from&&t<=this.range.to)return this.input.read(e,t);let s="";for(let i of this.ranges){if(i.from>=t)break;i.to>e&&(s+=this.input.read(Math.max(i.from,e),Math.min(i.to,t)))}return s}},Ce=class{constructor(e,t){this.data=e,this.id=t}token(e,t){let{parser:s}=t.p;Fs(this.data,e,t,this.id,s.data,s.tokenPrecTable)}};Ce.prototype.contextual=Ce.prototype.fallback=Ce.prototype.extend=!1;var Gt=class{constructor(e,t,s){this.precTable=t,this.elseToken=s,this.data=typeof e=="string"?nt(e):e}token(e,t){let s=e.pos,i;for(;i=e.pos,Fs(this.data,e,t,0,this.data,this.precTable),!(e.token.value>-1);){if(this.elseToken==null)return;if(e.next<0)break;e.advance(),e.reset(i+1,e.token)}i>s&&(e.reset(s,e.token),e.acceptToken(this.elseToken,i-s))}};Gt.prototype.contextual=Ce.prototype.fallback=Ce.prototype.extend=!1;function Fs(n,e,t,s,i,o){let r=0,l=1<<s,{dialect:a}=t.p.parser;e:for(;l&n[r];){let u=n[r+1];for(let p=r+3;p<u;p+=2)if((n[p+1]&l)>0){let f=n[p];if(a.allows(f)&&(e.token.value==-1||e.token.value==f||zn(f,e.token.value,i,o))){e.acceptToken(f);break}}let c=e.next,h=0,d=n[r+2];if(e.next<0&&d>h&&n[u+d*3-3]==65535&&n[u+d*3-3]==65535){r=n[u+d*3-1];continue e}for(;h<d;){let p=h+d>>1,f=u+p+(p<<1),x=n[f],g=n[f+1]||65536;if(c<x)d=p;else if(c>=g)h=p+1;else{r=n[f+2],e.advance();continue e}}break}}function Ts(n,e,t){for(let s=e,i;(i=n[s])!=65535;s++)if(i==t)return s-e;return-1}function zn(n,e,t,s){let i=Ts(t,s,e);return i<0||Ts(t,s,n)<i}var j=typeof process<"u"&&process.env&&/\bparse\b/.test(process.env.LOG),Mt=null,Ds;(function(n){n[n.Margin=25]="Margin"})(Ds||(Ds={}));function Ns(n,e,t){let s=n.cursor(L.IncludeAnonymous);for(s.moveTo(e);;)if(!(t<0?s.childBefore(e):s.childAfter(e)))for(;;){if((t<0?s.to<e:s.from>e)&&!s.type.isError)return t<0?Math.max(0,Math.min(s.to-1,e-25)):Math.min(n.length,Math.max(s.from+1,e+25));if(t<0?s.prevSibling():s.nextSibling())break;if(!s.parent())return t<0?0:n.length}}var _t=class{constructor(e,t){this.fragments=e,this.nodeSet=t,this.i=0,this.fragment=null,this.safeFrom=-1,this.safeTo=-1,this.trees=[],this.start=[],this.index=[],this.nextFragment()}nextFragment(){let e=this.fragment=this.i==this.fragments.length?null:this.fragments[this.i++];if(e){for(this.safeFrom=e.openStart?Ns(e.tree,e.from+e.offset,1)-e.offset:e.from,this.safeTo=e.openEnd?Ns(e.tree,e.to+e.offset,-1)-e.offset:e.to;this.trees.length;)this.trees.pop(),this.start.pop(),this.index.pop();this.trees.push(e.tree),this.start.push(-e.offset),this.index.push(0),this.nextStart=this.safeFrom}else this.nextStart=1e9}nodeAt(e){if(e<this.nextStart)return null;for(;this.fragment&&this.safeTo<=e;)this.nextFragment();if(!this.fragment)return null;for(;;){let t=this.trees.length-1;if(t<0)return this.nextFragment(),null;let s=this.trees[t],i=this.index[t];if(i==s.children.length){this.trees.pop(),this.start.pop(),this.index.pop();continue}let o=s.children[i],r=this.start[t]+s.positions[i];if(r>e)return this.nextStart=r,null;if(o instanceof Q){if(r==e){if(r<this.safeFrom)return null;let l=r+o.length;if(l<=this.safeTo){let a=o.prop(S.lookAhead);if(!a||l+a<this.fragment.to)return o}}this.index[t]++,r+o.length>=Math.max(this.safeFrom,e)&&(this.trees.push(o),this.start.push(r),this.index.push(0))}else this.index[t]++,this.nextStart=r+o.length}}},Wt=class{constructor(e,t){this.stream=t,this.tokens=[],this.mainToken=null,this.actions=[],this.tokens=e.tokenizers.map(s=>new Fe)}getActions(e){let t=0,s=null,{parser:i}=e.p,{tokenizers:o}=i,r=i.stateSlot(e.state,3),l=e.curContext?e.curContext.hash:0,a=0;for(let u=0;u<o.length;u++){if(!(1<<u&r))continue;let c=o[u],h=this.tokens[u];if(!(s&&!c.fallback)&&((c.contextual||h.start!=e.pos||h.mask!=r||h.context!=l)&&(this.updateCachedToken(h,c,e),h.mask=r,h.context=l),h.lookAhead>h.end+25&&(a=Math.max(h.lookAhead,a)),h.value!=0)){let d=t;if(h.extended>-1&&(t=this.addActions(e,h.extended,h.end,t)),t=this.addActions(e,h.value,h.end,t),!c.extend&&(s=h,t>d))break}}for(;this.actions.length>t;)this.actions.pop();return a&&e.setLookAhead(a),!s&&e.pos==this.stream.end&&(s=new Fe,s.value=e.p.parser.eofTerm,s.start=s.end=e.pos,t=this.addActions(e,s.value,s.end,t)),this.mainToken=s,this.actions}getMainToken(e){if(this.mainToken)return this.mainToken;let t=new Fe,{pos:s,p:i}=e;return t.start=s,t.end=Math.min(s+1,i.stream.end),t.value=s==i.stream.end?i.parser.eofTerm:0,t}updateCachedToken(e,t,s){let i=this.stream.clipPos(s.pos);if(t.token(this.stream.reset(i,e),s),e.value>-1){let{parser:o}=s.p;for(let r=0;r<o.specialized.length;r++)if(o.specialized[r]==e.value){let l=o.specializers[r](this.stream.read(e.start,e.end),s);if(l>=0&&s.p.parser.dialect.allows(l>>1)){l&1?e.extended=l>>1:e.value=l>>1;break}}}else e.value=0,e.end=this.stream.clipPos(i+1)}putAction(e,t,s,i){for(let o=0;o<i;o+=3)if(this.actions[o]==e)return i;return this.actions[i++]=e,this.actions[i++]=t,this.actions[i++]=s,i}addActions(e,t,s,i){let{state:o}=e,{parser:r}=e.p,{data:l}=r;for(let a=0;a<2;a++)for(let u=r.stateSlot(o,a?2:1);;u+=3){if(l[u]==65535)if(l[u+1]==1)u=ue(l,u+2);else{i==0&&l[u+1]==2&&(i=this.putAction(ue(l,u+2),t,s,i));break}l[u]==t&&(i=this.putAction(ue(l,u+1),t,s,i))}return i}},Rs;(function(n){n[n.Distance=5]="Distance",n[n.MaxRemainingPerStep=3]="MaxRemainingPerStep",n[n.MinBufferLengthPrune=500]="MinBufferLengthPrune",n[n.ForceReduceLimit=10]="ForceReduceLimit",n[n.CutDepth=15e3]="CutDepth",n[n.CutTo=9e3]="CutTo",n[n.MaxLeftAssociativeReductionCount=300]="MaxLeftAssociativeReductionCount",n[n.MaxStackCount=12]="MaxStackCount"})(Rs||(Rs={}));var Ht=class{constructor(e,t,s,i){this.parser=e,this.input=t,this.ranges=i,this.recovering=0,this.nextStackID=9812,this.minStackPos=0,this.reused=[],this.stoppedAt=null,this.lastBigReductionStart=-1,this.lastBigReductionSize=0,this.bigReductionCount=0,this.stream=new Ut(t,i),this.tokens=new Wt(e,this.stream),this.topTerm=e.top[1];let{from:o}=i[0];this.stacks=[Le.start(this,e.top[0],o)],this.fragments=s.length&&this.stream.end-o>e.bufferLength*4?new _t(s,e.nodeSet):null}get parsedPos(){return this.minStackPos}advance(){let e=this.stacks,t=this.minStackPos,s=this.stacks=[],i,o;if(this.bigReductionCount>300&&e.length==1){let[r]=e;for(;r.forceReduce()&&r.stack.length&&r.stack[r.stack.length-2]>=this.lastBigReductionStart;);this.bigReductionCount=this.lastBigReductionSize=0}for(let r=0;r<e.length;r++){let l=e[r];for(;;){if(this.tokens.mainToken=null,l.pos>t)s.push(l);else{if(this.advanceStack(l,s,e))continue;{i||(i=[],o=[]),i.push(l);let a=this.tokens.getMainToken(l);o.push(a.value,a.end)}}break}}if(!s.length){let r=i&&Mn(i);if(r)return this.stackToTree(r);if(this.parser.strict)throw j&&i&&console.log("Stuck with token "+(this.tokens.mainToken?this.parser.getName(this.tokens.mainToken.value):"none")),new SyntaxError("No parse at "+t);this.recovering||(this.recovering=5)}if(this.recovering&&i){let r=this.stoppedAt!=null&&i[0].pos>this.stoppedAt?i[0]:this.runRecovery(i,o,s);if(r)return this.stackToTree(r.forceAll())}if(this.recovering){let r=this.recovering==1?1:this.recovering*3;if(s.length>r)for(s.sort((l,a)=>a.score-l.score);s.length>r;)s.pop();s.some(l=>l.reducePos>t)&&this.recovering--}else if(s.length>1){e:for(let r=0;r<s.length-1;r++){let l=s[r];for(let a=r+1;a<s.length;a++){let u=s[a];if(l.sameState(u)||l.buffer.length>500&&u.buffer.length>500)if((l.score-u.score||l.buffer.length-u.buffer.length)>0)s.splice(a--,1);else{s.splice(r--,1);continue e}}}s.length>12&&s.splice(12,s.length-12)}this.minStackPos=s[0].pos;for(let r=1;r<s.length;r++)s[r].pos<this.minStackPos&&(this.minStackPos=s[r].pos);return null}stopAt(e){if(this.stoppedAt!=null&&this.stoppedAt<e)throw new RangeError("Can't move stoppedAt forward");this.stoppedAt=e}advanceStack(e,t,s){let i=e.pos,{parser:o}=this,r=j?this.stackID(e)+" -> ":"";if(this.stoppedAt!=null&&i>this.stoppedAt)return e.forceReduce()?e:null;if(this.fragments){let u=e.curContext&&e.curContext.tracker.strict,c=u?e.curContext.hash:0;for(let h=this.fragments.nodeAt(i);h;){let d=this.parser.nodeSet.types[h.type.id]==h.type?o.getGoto(e.state,h.type.id):-1;if(d>-1&&h.length&&(!u||(h.prop(S.contextHash)||0)==c))return e.useNode(h,d),j&&console.log(r+this.stackID(e)+` (via reuse of ${o.getName(h.type.id)})`),!0;if(!(h instanceof Q)||h.children.length==0||h.positions[0]>0)break;let p=h.children[0];if(p instanceof Q&&h.positions[0]==0)h=p;else break}}let l=o.stateSlot(e.state,4);if(l>0)return e.reduce(l),j&&console.log(r+this.stackID(e)+` (via always-reduce ${o.getName(l&65535)})`),!0;if(e.stack.length>=15e3)for(;e.stack.length>9e3&&e.forceReduce(););let a=this.tokens.getActions(e);for(let u=0;u<a.length;){let c=a[u++],h=a[u++],d=a[u++],p=u==a.length||!s,f=p?e:e.split();if(f.apply(c,h,d),j&&console.log(r+this.stackID(f)+` (via ${c&65536?`reduce of ${o.getName(c&65535)}`:"shift"} for ${o.getName(h)} @ ${i}${f==e?"":", split"})`),p)return!0;f.pos>i?t.push(f):s.push(f)}return!1}advanceFully(e,t){let s=e.pos;for(;;){if(!this.advanceStack(e,null,null))return!1;if(e.pos>s)return Is(e,t),!0}}runRecovery(e,t,s){let i=null,o=!1;for(let r=0;r<e.length;r++){let l=e[r],a=t[r<<1],u=t[(r<<1)+1],c=j?this.stackID(l)+" -> ":"";if(l.deadEnd&&(o||(o=!0,l.restart(),j&&console.log(c+this.stackID(l)+" (restarted)"),this.advanceFully(l,s))))continue;let h=l.split(),d=c;for(let p=0;h.forceReduce()&&p<10&&(j&&console.log(d+this.stackID(h)+" (via force-reduce)"),!this.advanceFully(h,s));p++)j&&(d=this.stackID(h)+" -> ");for(let p of l.recoverByInsert(a))j&&console.log(c+this.stackID(p)+" (via recover-insert)"),this.advanceFully(p,s);this.stream.end>l.pos?(u==l.pos&&(u++,a=0),l.recoverByDelete(a,u),j&&console.log(c+this.stackID(l)+` (via recover-delete ${this.parser.getName(a)})`),Is(l,s)):(!i||i.score<l.score)&&(i=l)}return i}stackToTree(e){return e.close(),Q.build({buffer:Qe.create(e),nodeSet:this.parser.nodeSet,topID:this.topTerm,maxBufferLength:this.parser.bufferLength,reused:this.reused,start:this.ranges[0].from,length:e.pos-this.ranges[0].from,minRepeatType:this.parser.minRepeatTerm})}stackID(e){let t=(Mt||(Mt=new WeakMap)).get(e);return t||Mt.set(e,t=String.fromCodePoint(this.nextStackID++)),t+e}};function Is(n,e){for(let t=0;t<e.length;t++){let s=e[t];if(s.pos==n.pos&&s.sameState(n)){e[t].score<n.score&&(e[t]=n);return}}e.push(n)}var Xt=class{constructor(e,t,s){this.source=e,this.flags=t,this.disabled=s}allows(e){return!this.disabled||this.disabled[e]==0}};var ve=class extends kt{constructor(e){if(super(),this.wrappers=[],e.version!=14)throw new RangeError(`Parser version (${e.version}) doesn't match runtime version (14)`);let t=e.nodeNames.split(" ");this.minRepeatTerm=t.length;for(let l=0;l<e.repeatNodeCount;l++)t.push("");let s=Object.keys(e.topRules).map(l=>e.topRules[l][1]),i=[];for(let l=0;l<t.length;l++)i.push([]);function o(l,a,u){i[l].push([a,a.deserialize(String(u))])}if(e.nodeProps)for(let l of e.nodeProps){let a=l[0];typeof a=="string"&&(a=S[a]);for(let u=1;u<l.length;){let c=l[u++];if(c>=0)o(c,a,l[u++]);else{let h=l[u+-c];for(let d=-c;d>0;d--)o(l[u++],a,h);u++}}}this.nodeSet=new Re(t.map((l,a)=>U.define({name:a>=this.minRepeatTerm?void 0:l,id:a,props:i[a],top:s.indexOf(a)>-1,error:a==0,skipped:e.skippedNodes&&e.skippedNodes.indexOf(a)>-1}))),e.propSources&&(this.nodeSet=this.nodeSet.extend(...e.propSources)),this.strict=!1,this.bufferLength=1024;let r=nt(e.tokenData);this.context=e.context,this.specializerSpecs=e.specialized||[],this.specialized=new Uint16Array(this.specializerSpecs.length);for(let l=0;l<this.specializerSpecs.length;l++)this.specialized[l]=this.specializerSpecs[l].term;this.specializers=this.specializerSpecs.map(Bs),this.states=nt(e.states,Uint32Array),this.data=nt(e.stateData),this.goto=nt(e.goto),this.maxTerm=e.maxTerm,this.tokenizers=e.tokenizers.map(l=>typeof l=="number"?new Ce(r,l):l),this.topRules=e.topRules,this.dialects=e.dialects||{},this.dynamicPrecedences=e.dynamicPrecedences||null,this.tokenPrecTable=e.tokenPrec,this.termNames=e.termNames||null,this.maxNode=this.nodeSet.types.length-1,this.dialect=this.parseDialect(),this.top=this.topRules[Object.keys(this.topRules)[0]]}createParse(e,t,s){let i=new Ht(this,e,t,s);for(let o of this.wrappers)i=o(i,e,t,s);return i}getGoto(e,t,s=!1){let i=this.goto;if(t>=i[0])return-1;for(let o=i[t+1];;){let r=i[o++],l=r&1,a=i[o++];if(l&&s)return a;for(let u=o+(r>>1);o<u;o++)if(i[o]==e)return a;if(l)return-1}}hasAction(e,t){let s=this.data;for(let i=0;i<2;i++)for(let o=this.stateSlot(e,i?2:1),r;;o+=3){if((r=s[o])==65535)if(s[o+1]==1)r=s[o=ue(s,o+2)];else{if(s[o+1]==2)return ue(s,o+2);break}if(r==t||r==0)return ue(s,o+1)}return 0}stateSlot(e,t){return this.states[e*6+t]}stateFlag(e,t){return(this.stateSlot(e,0)&t)>0}validAction(e,t){if(t==this.stateSlot(e,4))return!0;for(let s=this.stateSlot(e,1);;s+=3){if(this.data[s]==65535)if(this.data[s+1]==1)s=ue(this.data,s+2);else return!1;if(t==ue(this.data,s+1))return!0}}nextStates(e){let t=[];for(let s=this.stateSlot(e,1);;s+=3){if(this.data[s]==65535)if(this.data[s+1]==1)s=ue(this.data,s+2);else break;if(!(this.data[s+2]&1)){let i=this.data[s+1];t.some((o,r)=>r&1&&o==i)||t.push(this.data[s],i)}}return t}configure(e){let t=Object.assign(Object.create(ve.prototype),this);if(e.props&&(t.nodeSet=this.nodeSet.extend(...e.props)),e.top){let s=this.topRules[e.top];if(!s)throw new RangeError(`Invalid top rule name ${e.top}`);t.top=s}return e.tokenizers&&(t.tokenizers=this.tokenizers.map(s=>{let i=e.tokenizers.find(o=>o.from==s);return i?i.to:s})),e.specializers&&(t.specializers=this.specializers.slice(),t.specializerSpecs=this.specializerSpecs.map((s,i)=>{let o=e.specializers.find(l=>l.from==s.external);if(!o)return s;let r=Object.assign(Object.assign({},s),{external:o.to});return t.specializers[i]=Bs(r),r})),e.contextTracker&&(t.context=e.contextTracker),e.dialect&&(t.dialect=this.parseDialect(e.dialect)),e.strict!=null&&(t.strict=e.strict),e.wrap&&(t.wrappers=t.wrappers.concat(e.wrap)),e.bufferLength!=null&&(t.bufferLength=e.bufferLength),t}hasWrappers(){return this.wrappers.length>0}getName(e){return this.termNames?this.termNames[e]:String(e<=this.maxNode&&this.nodeSet.types[e].name||e)}get eofTerm(){return this.maxNode+1}get topNode(){return this.nodeSet.types[this.top[1]]}dynamicPrecedence(e){let t=this.dynamicPrecedences;return t==null?0:t[e]||0}parseDialect(e){let t=Object.keys(this.dialects),s=t.map(()=>!1);if(e)for(let o of e.split(" ")){let r=t.indexOf(o);r>=0&&(s[r]=!0)}let i=null;for(let o=0;o<t.length;o++)if(!s[o])for(let r=this.dialects[t[o]],l;(l=this.data[r++])!=65535;)(i||(i=new Uint8Array(this.maxTerm+1)))[l]=1;return new Xt(e,s,i)}static deserialize(e){return new ve(e)}};function ue(n,e){return n[e]|n[e+1]<<16}function Mn(n){let e=null;for(let t of n){let s=t.p.stoppedAt;(t.pos==t.p.stream.end||s!=null&&t.pos>s)&&t.p.parser.stateFlag(t.state,2)&&(!e||e.score<t.score)&&(e=t)}return e}function Bs(n){if(n.external){let e=n.extend?1:0;return(t,s)=>n.external(t,s)<<1|e}return n.get}var Ot=ve.deserialize({version:14,states:"&fOVQPOOO!SQPO'#C^OVQPO'#CcQ!pQPOOO#OQPO'#CkO#TQPO'#CrOOQO'#Cy'#CyO#YQPO,58}OVQPO,59QOVQPO,59QOVQPO,59VOVQPO'#CtOOQO,59^,59^OOQO1G.i1G.iOOQO1G.l1G.lO#kQPO1G.lO$fQPO'#CmO%WQQO1G.qOOQO'#C{'#C{O%cQPO,59`OOQO'#Cn'#CnO%wQPO,59XOVQPO,59ZOVQPO,59[OVQPO7+$]OVQPO'#CuO&`QPO1G.zOOQO1G.z1G.zO&hQQO'#C^O&rQQO1G.sO'ZQQO1G.uOOQO1G.v1G.vO'fQPO<<GwO'wQPO,59aOOQO-E6s-E6sOOQO7+$f7+$fOVQPOAN=cO(]QQO1G.lO(tQPOG22}OOQOLD(iLD(iO%wQPO,59QO%wQPO,59Q",stateData:")[~OlOS~ORUOSUOTUOUUOWQO`SOnPO~OWgXZQX[QX]QX^QXeQX~OjQXXQXpQXqQXrQXsQXtQXuQX~PnOZWO[WO]XO^XO~OWYO~OWZO~OX]OZWO[WO]XO^XO~OZWO[WO]Yi^YijYiXYipYiqYirYisYitYiuYieYi~OZWO[WO]XO^XOpdOqdOrdOsdOtdOudO~OehOvfOwgO~OXkOZWO[WO]XO^XOeiO~ORUOSUOTUOUUOWQO`SOnlO~OXsOeiO~OvQXwQX~PnOZxO[xO]yO^yOeaivaiwai~OwgOecivci~OZWO[WO]XO^XOetO~OZWO[WO]XO^XOXiaeia~OZxO[xO]Yi^YieYivYiwYi~OXwOZWO[WO]XO^XO~O`UTn~",goto:"#spPPqPPPPqPPqPPPPqP!R!W!R!RPq!Z!k!nPPP!tP#jmUOQWXYZefghitxyVbYfgRe`mTOQWXYZefghitxyR[TQjcRrjQROQVQS^WxQ_XU`YfgQcZQmeQphQqiQuyRvtQaYQnfRog",nodeNames:"\u26A0 ColumnDefinitionExpression Column Number String True False ParenthesizedExpression OpenBrace CloseBrace ArithmeticExpression Divide Times Plus Minus ConditionalExpression If RelationalExpression RelationalOperator AndCondition OrCondition Comma CallExpression Function ArgList",maxTerm:39,skippedNodes:[0],repeatNodeCount:1,tokenData:".^~RnXY#PYZ#P]^#Ppq#Pqr#brs#mxy$eyz$jz{$o{|$t|}$y}!O%O!O!P%T!P!Q%c!Q![%h!^!_%s!_!`&Q!`!a&V!c!}&d#R#S&d#T#U&u#U#Y&d#Y#Z(Y#Z#]&d#]#^*j#^#c&d#c#d+f#d#h&d#h#i,b#i#o&d~#USl~XY#PYZ#P]^#Ppq#P~#eP!_!`#h~#mOu~~#pWOX#mZ]#m^r#mrs$Ys#O#m#P;'S#m;'S;=`$_<%lO#m~$_OS~~$bP;=`<%l#m~$jOW~~$oOX~~$tO[~~$yO]~~%OOe~~%TO^~~%WP!Q![%Z~%`PR~!Q![%Z~%hOZ~~%mQR~!O!P%Z!Q![%h~%xPr~!_!`%{~&QOt~~&VOp~~&[Pq~!_!`&_~&dOs~P&iSnP!Q![&d!c!}&d#R#S&d#T#o&dR&zUnP!Q![&d!c!}&d#R#S&d#T#b&d#b#c'^#c#o&dR'cUnP!Q![&d!c!}&d#R#S&d#T#W&d#W#X'u#X#o&dR'|SvQnP!Q![&d!c!}&d#R#S&d#T#o&d~(_TnP!Q![&d!c!}&d#R#S&d#T#U(n#U#o&d~(sUnP!Q![&d!c!}&d#R#S&d#T#`&d#`#a)V#a#o&d~)[UnP!Q![&d!c!}&d#R#S&d#T#g&d#g#h)n#h#o&d~)sUnP!Q![&d!c!}&d#R#S&d#T#X&d#X#Y*V#Y#o&d~*^SU~nP!Q![&d!c!}&d#R#S&d#T#o&d~*oUnP!Q![&d!c!}&d#R#S&d#T#Y&d#Y#Z+R#Z#o&d~+YS`~nP!Q![&d!c!}&d#R#S&d#T#o&dR+kUnP!Q![&d!c!}&d#R#S&d#T#f&d#f#g+}#g#o&dR,USwQnP!Q![&d!c!}&d#R#S&d#T#o&d~,gUnP!Q![&d!c!}&d#R#S&d#T#f&d#f#g,y#g#o&d~-OUnP!Q![&d!c!}&d#R#S&d#T#i&d#i#j-b#j#o&d~-gUnP!Q![&d!c!}&d#R#S&d#T#X&d#X#Y-y#Y#o&d~.QST~nP!Q![&d!c!}&d#R#S&d#T#o&d",tokenizers:[0,1],topRules:{ColumnDefinitionExpression:[0,1]},tokenPrec:375});var $n=J.LRLanguage.define({name:"VuuColumnExpression",parser:Ot.configure({props:[(0,J.styleTags)({Function:J.tags.variableName,String:J.tags.string,Or:J.tags.emphasis,Operator:J.tags.operator})]})}),Vt=()=>new J.LanguageSupport($n);var Yt=class{constructor(e){switch(this.value=e,typeof e){case"boolean":this.type="booleanLiteralExpression";break;case"number":this.type="numberLiteralExpression";break;default:this.type="stringLiteralExpression"}}toJSON(){return{type:this.type,value:this.value}}},Zt=class{constructor(e){this.type="colExpression";this.column=e}toJSON(){return{type:this.type,column:this.column}}},rt,Ee,jt=class{constructor(e="unknown"){Y(this,rt,[{type:"unknown"},{type:"unknown"}]);Y(this,Ee,void 0);this.type="arithmeticExpression";xe(this,Ee,e)}get op(){return m(this,Ee)}set op(e){xe(this,Ee,e)}get expressions(){return m(this,rt)}toJSON(){return{type:this.type,op:m(this,Ee),expressions:m(this,rt)}}};rt=new WeakMap,Ee=new WeakMap;var Ue,Jt=class{constructor(e){Y(this,Ue,[]);this.type="callExpression";this.functionName=e}get expressions(){return m(this,Ue)}get arguments(){return m(this,Ue)}toJSON(){return{type:this.type,functionName:this.functionName,arguments:m(this,Ue).map(e=>{var t;return(t=e.toJSON)==null?void 0:t.call(e)})}}};Ue=new WeakMap;var ot,Ge,Me=class{constructor(){Y(this,ot,[{type:"unknown"},{type:"unknown"}]);Y(this,Ge,"unknown");this.type="relationalExpression"}get op(){return m(this,Ge)}set op(e){xe(this,Ge,e)}get expressions(){return m(this,ot)}toJSON(){return{type:this.type,op:m(this,Ge),expressions:m(this,ot)}}};ot=new WeakMap,Ge=new WeakMap;var lt,_e,$e=class{constructor(e){Y(this,lt,[{type:"unknown"},{type:"unknown"}]);Y(this,_e,void 0);this.type="booleanCondition";xe(this,_e,e)}get op(){return m(this,_e)}get expressions(){return m(this,lt)}toJSON(){return{type:this.type,op:m(this,_e),expressions:m(this,lt).map(e=>{var t;return(t=e.toJSON)==null?void 0:t.call(e)})}}};lt=new WeakMap,_e=new WeakMap;var te,it=class{constructor(e){Y(this,te,void 0);this.type="conditionalExpression";xe(this,te,[e?new $e(e):new Me,{type:"unknown"},{type:"unknown"}])}get expressions(){return m(this,te)}get condition(){return m(this,te)[0]}get truthyExpression(){return m(this,te)[1]}set truthyExpression(e){m(this,te)[1]=e}get falsyExpression(){return m(this,te)[2]}set falsyExpression(e){m(this,te)[2]=e}toJSON(){var e,t,s,i,o;return{type:this.type,condition:(t=(e=this.condition).toJSON)==null?void 0:t.call(e),truthyExpression:this.truthyExpression,falsyExpression:(o=(i=(s=this.falsyExpression)==null?void 0:s.toJSON)==null?void 0:i.call(s))!=null?o:this.falsyExpression}}};te=new WeakMap;var ke=n=>n.type==="unknown",St=n=>n.type==="arithmeticExpression",Un=n=>n.type==="callExpression",ze=n=>n.type==="conditionalExpression",Gn=n=>n.type==="relationalExpression"||n.type==="booleanCondition";var _n=n=>n.type==="booleanCondition",Kt=n=>(n==null?void 0:n.type)==="relationalExpression";var _=n=>{if(ke(n))return n;if(Kt(n)){let[e,t]=n.expressions;if(z(e))return _(e);if(n.op==="unknown")return n;if(z(t))return _(t)}else if(Gn(n)){let{expressions:e=[]}=n;for(let t of e)if(z(t))return _(t)}else if(ze(n)){let{condition:e,truthyExpression:t,falsyExpression:s}=n;if(z(e))return _(e);if(z(t))return _(t);if(z(s))return _(s)}else if(St(n)){let{expressions:e=[]}=n;for(let t of e)if(z(t))return _(t)}},Pt=(n,e,t)=>{let{expressions:s=[]}=n;if(s.includes(e)){let i=s.indexOf(e);return s.splice(i,1,t),!0}else for(let i of s)if(Pt(i,e,t))return!0;return!1},z=n=>ke(n)?!0:ze(n)?z(n.condition)||z(n.truthyExpression)||z(n.falsyExpression):Kt(n)||_n(n)?n.op===void 0||n.expressions.some(e=>z(e)):!1,Ls=(n,e)=>{let t=_(n);t?t.expressions?t.expressions.push(e):console.warn("don't know how to treat targetExpression"):console.error("no target expression found")},b,Oe,qt=class{constructor(){Y(this,b,void 0);Y(this,Oe,[])}setCondition(e){if(m(this,b)===void 0)this.addExpression(new it(e));else if(ze(m(this,b))){if(z(m(this,b).condition)){let t=e?new $e(e):new Me;this.addExpression(t)}else if(ke(m(this,b).truthyExpression))m(this,b).truthyExpression=new it(e);else if(z(m(this,b).truthyExpression)){let t=e?new $e(e):new Me;this.addExpression(t)}else if(ke(m(this,b).falsyExpression))m(this,b).falsyExpression=new it(e);else if(z(m(this,b).falsyExpression)){let t=e?new $e(e):new Me;this.addExpression(t)}}else console.error("setCondition called unexpectedly")}addExpression(e){if(m(this,Oe).length>0){let t=m(this,Oe).at(-1);t==null||t.arguments.push(e)}else if(m(this,b)===void 0)xe(this,b,e);else if(St(m(this,b))){let t=_(m(this,b));t&&ke(t)&&Pt(m(this,b),t,e)}else if(ze(m(this,b))&&z(m(this,b))){let t=_(m(this,b));t&&ke(t)?Pt(m(this,b),t,e):t&&Ls(t,e)}}setFunction(e){let t=new Jt(e);this.addExpression(t),m(this,Oe).push(t)}setColumn(e){this.addExpression(new Zt(e))}setArithmeticOp(e){let t=e,s=m(this,b);St(s)&&(s.op=t)}setRelationalOperator(e){let t=e;if(m(this,b)&&ze(m(this,b))){let s=_(m(this,b));Kt(s)?s.op=t:console.error(`no target expression found (op = ${e})`)}}setValue(e){let t=new Yt(e);if(m(this,b)===void 0)xe(this,b,t);else if(St(m(this,b)))this.addExpression(t);else if(Un(m(this,b)))m(this,b).arguments.push(t);else if(ze(m(this,b)))if(z(m(this,b))){let s=_(m(this,b));s&&ke(s)?Pt(m(this,b),s,t):s&&Ls(s,t)}else console.log("what do we do with value, in a complete expression")}closeBrace(){m(this,Oe).pop()}get expression(){return m(this,b)}toJSON(){var e;return(e=m(this,b))==null?void 0:e.toJSON()}};b=new WeakMap,Oe=new WeakMap;var es=(n,e)=>{let t=new qt,s=n.cursor();do{let{name:i,from:o,to:r}=s;switch(i){case"AndCondition":t.setCondition("and");break;case"OrCondition":t.setCondition("or");break;case"RelationalExpression":t.setCondition();break;case"ArithmeticExpression":t.addExpression(new jt);break;case"Column":{let l=e.substring(o,r);t.setColumn(l)}break;case"Function":{let l=e.substring(o,r);t.setFunction(l)}break;case"Times":case"Divide":case"Plus":case"Minus":{let l=e.substring(o,r);t.setArithmeticOp(l)}break;case"RelationalOperator":{let l=e.substring(o,r);t.setRelationalOperator(l)}break;case"False":case"True":{let l=e.substring(o,r);t.setValue(l==="true")}break;case"String":t.setValue(e.substring(o+1,r-1));break;case"Number":t.setValue(parseFloat(e.substring(o,r)));break;case"CloseBrace":t.closeBrace();break;default:}}while(s.next());return t.toJSON()};var Wn=Ot.configure({strict:!0}),Qs=["Number","String"],wt=[...Qs,"AndCondition","ArithmeticExpression","BooleanOperator","RelationalOperatorOperator","CallExpression","CloseBrace","Column","Comma","ConditionalExpression","Divide","Equal","If","Minus","OpenBrace","OrCondition","ParenthesizedExpression","Plus","RelationalExpression","RelationalOperator","Times"],ts=n=>{try{return Wn.parse(n),!0}catch{return!1}},At=n=>{let{lastChild:e}=n;for(;e&&!wt.includes(e.name);)e=e.prevSibling,console.log(e==null?void 0:e.name);return e},ss=n=>{if((n==null?void 0:n.name)==="RelationalExpression"){let{firstChild:e}=n,t=At(n);if((e==null?void 0:e.name)==="Column"&&typeof(t==null?void 0:t.name)=="string"&&Qs.includes(t.name))return!0}return!1};var Se=require("@vuu-ui/vuu-codemirror"),Hn=Se.HighlightStyle.define([{tag:Se.tags.variableName,color:"var(--vuuFilterEditor-variableColor)"},{tag:Se.tags.comment,color:"green",fontStyle:"italic"}]),zs=(0,Se.syntaxHighlighting)(Hn);var Ms=require("@vuu-ui/vuu-codemirror"),$s=Ms.EditorView.theme({"&":{border:"solid 1px var(--salt-container-primary-borderColor)",color:"var(--vuuFilterEditor-color)",backgroundColor:"var(--vuuFilterEditor-background)"},".cm-content":{caretColor:"var(--vuuFilterEditor-cursorColor)"},"&.cm-focused .cm-cursor":{borderLeftColor:"var(--vuuFilterEditor-cursorColor)"},"&.cm-focused .cm-selectionBackground, ::selection":{backgroundColor:"var(--vuuFilterEditor-selectionBackground)"},".cm-selectionBackground, ::selection":{backgroundColor:"var(--vuuFilterEditor-selectionBackground)"},".cm-scroller":{fontFamily:"var(--vuuFilterEditor-fontFamily)"},".cm-tooltip":{background:"var(--vuuFilterEditor-tooltipBackground)",border:"var(--vuuFilterEditor-tooltipBorder)",boxShadow:"var(--vuuFilterEditor-tooltipElevation)","&.cm-tooltip-autocomplete > ul":{fontFamily:"var(--vuuFilterEditor-fontFamily)",fontSize:"var(--vuuFilterEditor-fontSize)",maxHeight:"240px"},"&.cm-tooltip-autocomplete > ul > li":{height:"var(--vuuFilterEditor-suggestion-height)",padding:"0 3px",lineHeight:"var(--vuuFilterEditor-suggestion-height)"},"&.cm-tooltip-autocomplete li[aria-selected]":{background:"var(--vuuFilterEditor-suggestion-selectedBackground)",color:"var(--vuuFilterEditor-suggestion-selectedColor)"},"&.cm-tooltip-autocomplete li .cm-completionDetail":{color:"var(--vuuFilterEditor-suggestion-detailColor)"}}},{dark:!1});var B=require("@vuu-ui/vuu-codemirror"),rs=require("react");var Xn=(n,e)=>e?n.map(t=>{var s;return{...t,apply:typeof t.apply=="function"?t.apply:`${e}${(s=t.apply)!=null?s:t.label}`}}):n,Vn=n=>n===void 0?!1:["Times","Divide","Plus","Minus"].includes(n.name),We=(n,e)=>{var i;let{lastChild:t}=n,{pos:s}=e;for(;t;)if(t.from<s&&wt.includes(t.name)){if(t.name==="ParenthesizedExpression"){let r=(i=t.firstChild)==null?void 0:i.nextSibling;r&&(t=r)}return t}else t=t.prevSibling},Us=(n,e)=>{var t;if(n.name==="ArgList"){let s=n.prevSibling;if(s)return(0,B.getValue)(s,e)}else if(n.name==="OpenBrace"){let s=(t=n.parent)==null?void 0:t.prevSibling;if((s==null?void 0:s.name)==="Function")return(0,B.getValue)(s,e)}},Gs=(n,e)=>{if(n.name==="RelationalExpression"){let t=At(n);if((t==null?void 0:t.name)==="RelationalOperator")return(0,B.getValue)(t,e)}else{let t=n.prevSibling;if((t==null?void 0:t.name)==="RelationalOperator")return(0,B.getValue)(t,e)}},os=(n,e)=>{var t;if(n.name==="RelationalExpression"){if(((t=n.firstChild)==null?void 0:t.name)==="Column")return(0,B.getValue)(n.firstChild,e)}else{let s=n.prevSibling;if((s==null?void 0:s.name)==="Column")return(0,B.getValue)(s,e);if((s==null?void 0:s.name)==="RelationalOperator")return os(s,e)}},ns=async(n,e,t,s={})=>{let i=await e.getSuggestions(t,s),{startsWith:o=""}=s;return{from:n.pos-o.length,options:i}},is=(n,e,t,s,i)=>{let o=We(n,e);switch(console.log(`conditional expression last child ${o==null?void 0:o.name}`),o==null?void 0:o.name){case"If":return ns(e,t,"expression",{prefix:"( "});case"OpenBrace":return ns(e,t,"expression");case"Condition":return ns(e,t,"expression",{prefix:", "});case"CloseBrace":if(s){let r=[{apply:()=>{i==null||i()},label:"Save Expression",boost:10}];return{from:e.pos,options:r}}}},Yn=(n,e)=>{let t=[{apply:()=>{e==null||e()},label:"Save Expression",boost:10}];return{from:n.pos,options:t}},_s=(n,e)=>{let t=(0,rs.useCallback)(async(s,i,o={})=>{let r=await n.getSuggestions(i,o),{startsWith:l=""}=o;return{from:s.pos-l.length,options:r}},[n]);return(0,rs.useCallback)(async s=>{var h,d;let{state:i,pos:o}=s,r=(h=s.matchBefore(/\w*/))!=null?h:{from:0,to:0,text:void 0},a=(0,B.syntaxTree)(i).resolveInner(o,-1),u=i.doc.toString(),c=ts(u);switch(console.log({nodeBeforeName:a.name}),a.name){case"If":return console.log("conditional expression If"),t(s,"expression",{prefix:"( "});case"Condition":{let p=We(a,s);if((p==null?void 0:p.name)==="Column"){let f=(0,B.getPreviousNode)(p);if((f==null?void 0:f.name)!=="RelationalOperator")return t(s,"condition-operator",{columnName:(0,B.getValue)(p,i)});console.log(`Condition last child Column, prev child ${f==null?void 0:f.name}`)}else if((p==null?void 0:p.name)==="RelationalOperator")return t(s,"expression");console.log(`condition last child ${p==null?void 0:p.name}`)}break;case"ConditionalExpression":return is(a,s,n);case"RelationalExpression":{if(ss(a))return{from:s.pos,options:B.booleanJoinSuggestions.concat({label:", <truthy expression>, <falsy expression>",apply:", "})};{let p=Gs(a,i),f=os(a,i);if(p)return t(s,"expression");{let x=await n.getSuggestions("condition-operator",{columnName:f});return{from:s.pos,options:x}}}}break;case"RelationalOperator":return t(s,"expression");case"String":{let p=Gs(a,i),f=os(a,i),{from:x,to:g}=a;if(g-x===2&&s.pos===x+1){if(f&&p)return t(s,"columnValue",{columnName:f,operator:p,startsWith:r.text})}else if(g-x>2&&s.pos===g)return t(s,"expression",{prefix:", "});console.log(`we have a string, column is ${f} ${x} ${g}`)}break;case"ArithmeticExpression":{let p=We(a,s);if((p==null?void 0:p.name)==="Column")return t(s,"expression");if(Vn(p)){let f=p.name;return t(s,"column",{operator:f})}}break;case"OpenBrace":{let p=Us(a,i);return t(s,"expression",{functionName:p})}break;case"ArgList":{let p=Us(a,i),f=We(a,s),x=(f==null?void 0:f.name)==="OpenBrace"?void 0:",",g=await n.getSuggestions("expression",{functionName:p});return g=x?Xn(g,", "):g,(f==null?void 0:f.name)!=="OpenBrace"&&(f==null?void 0:f.name)!=="Comma"&&(g=[{apply:") ",boost:10,label:"Done - no more arguments"}].concat(g)),{from:s.pos,options:g}}case"Equal":if(u.trim()==="=")return t(s,"expression");break;case"ParenthesizedExpression":case"ColumnDefinitionExpression":if(s.pos===0)return t(s,"expression");{let p=We(a,s);if((p==null?void 0:p.name)==="Column"){if(c){let f=[{apply:()=>{e.current()},label:"Save Expression",boost:10}],x=(0,B.getValue)(p,i),g=await n.getSuggestions("operator",{columnName:x});return{from:s.pos,options:f.concat(g)}}}else if((p==null?void 0:p.name)==="CallExpression"){if(c){let f=[{apply:()=>{e.current()},label:"Save Expression",boost:10}];return{from:s.pos,options:f}}}else if((p==null?void 0:p.name)==="ArithmeticExpression"){if(c){let f=[{apply:()=>{e.current()},label:"Save Expression",boost:10}],x=We(p,s);if((x==null?void 0:x.name)==="Column"){let g=(0,B.getValue)(x,i),w=await n.getSuggestions("operator",{columnName:g});f=f.concat(w)}return{from:s.pos,options:f}}}else if((p==null?void 0:p.name)==="ConditionalExpression")return is(p,s,n,c,e.current);break}case"Column":if(await n.isPartialMatch("expression",void 0,r.text))return t(s,"expression",{startsWith:r.text});break;case"Comma":{let p=(0,B.getNamedParentNode)(a);if((p==null?void 0:p.name)==="ConditionalExpression")return t(s,"expression")}break;case"CloseBrace":{let p=(0,B.getNamedParentNode)(a);if((p==null?void 0:p.name)==="ConditionalExpression")return is(p,s,n,c,e.current);if((p==null?void 0:p.name)==="ArgList"&&c)return Yn(s,e.current);console.log(`does closebrace denote an ARgList or a parenthetised expression ? ${p}`)}break;default:((d=a==null?void 0:a.prevSibling)==null?void 0:d.name)==="FilterClause"&&console.log("looks like we ight be a or|and operator")}},[t,e,n])};var at=n=>{if(n.current==null)throw Error("EditorView not defined");return n.current},Zn=()=>"vuuSuggestion",jn=()=>console.log("noooop"),Jn=n=>"expressionType"in n,qn=n=>{if(Jn(n)){let e=(0,ls.createEl)("div","expression-type-container"),t=(0,ls.createEl)("span","expression-type",n.expressionType);return e.appendChild(t),e}else return null},as=({onChange:n,onSubmitExpression:e,suggestionProvider:t})=>{let s=(0,be.useRef)(null),i=(0,be.useRef)(jn),o=(0,be.useRef)(),r=_s(t,i),[l,a]=(0,be.useMemo)(()=>{let u=()=>{let x=at(o),g=x.state.doc.toString(),w=(0,I.ensureSyntaxTree)(x.state,x.state.doc.length,5e3);if(w){let R=es(w,g);return[g,R]}else return["",void 0]},c=()=>{at(o).setState(f())},h=()=>{let[x,g]=u();e==null||e(x,g),c()},d=x=>I.keymap.of([{key:x,run(){return h(),!0}}]),p=x=>I.keymap.of([{key:x,run(){return(0,I.startCompletion)(at(o)),!0}}]),f=()=>I.EditorState.create({doc:"",extensions:[I.minimalSetup,(0,I.autocompletion)({addToOptions:[{render:qn,position:70}],override:[r],optionClass:Zn}),Vt(),I.keymap.of(I.defaultKeymap),d("Ctrl-Enter"),p("ArrowDown"),I.EditorView.updateListener.of(x=>{let g=at(o);if(x.docChanged){(0,I.startCompletion)(g);let w=g.state.doc.toString();n==null||n(w,void 0)}}),$s,zs]});return i.current=()=>{h(),setTimeout(()=>{at(o).focus()},100)},[f,c]},[r,n,e]);return(0,be.useEffect)(()=>{if(!s.current)throw Error("editor not in dom");return o.current=new I.EditorView({state:l(),parent:s.current}),()=>{var u;(u=o.current)==null||u.destroy()}},[r,l]),{editorRef:s,clearInput:a}};var Ws=require("react/jsx-runtime"),Kn="vuuColumnExpressionInput",us=({onChange:n,onSubmitExpression:e,suggestionProvider:t})=>{let{editorRef:s}=as({onChange:n,onSubmitExpression:e,suggestionProvider:t});return(0,Ws.jsx)("div",{className:`${Kn}`,ref:s})};var ne=require("@vuu-ui/vuu-codemirror"),Tt=require("@vuu-ui/vuu-data"),Ve=require("@vuu-ui/vuu-utils"),Xe=require("react");var He=[{accepts:"string",description:"Returns multiple string values as a single joined string. Arguments may be string literal values, string columns or other string expressions. Non string arguments may also be included, these will be converted to strings.",example:{expression:'concatenate("example", "-test")',result:'"example-test"'},name:"concatenate",params:{description:"( string, string, [ string* ] )"},type:"string"},{accepts:["string","string"],description:"Tests a string value to determine whether it contains a given substring. Accepts two arguments: source text and target substring. Returns true if <source text> contains one or more occurrences of <target subscring>",example:{expression:'contains("Royal Bank of Scotland", "bank")',result:"true"},name:"contains",params:{description:"( string )"},type:"boolean"},{accepts:["string","number"],description:"Returns the leftmost <number> characters from <string>. First argument may be a string literal, string column or other string expression.",example:{expression:'left("USD Benchmark Report", 3)',result:'"USD"'},name:"left",params:{count:2,description:"( string, number )"},type:"string"},{accepts:"string",description:"Returns the number of characters in <string>. Argument may be a string literal, string column or other string expression.",example:{expression:'len("example")',result:"7"},name:"len",params:{description:"(string)"},type:"number"},{accepts:"string",description:"Convert a string value to lowercase. Argument may be a string column or other string expression.",example:{expression:'lower("examPLE")',result:'"example"'},name:"lower",params:{description:"( string )"},type:"string"},{accepts:"string",description:"Convert a string value to uppercase. Argument may be a string column or other string expression.",example:{expression:'upper("example")',result:'"EXAMPLE"'},name:"upper",params:{description:"( string )"},type:"string"},{accepts:["string","number"],description:"Returns the rightmost <number> characters from <string>. First argument may be a string literal, string column or other string expression.",example:{expression:"blah",result:"blah"},name:"right",params:{description:"( string )"},type:"string"},{accepts:["string","string","string"],description:"Replace characters within a string. Accepts three arguments: source text, text to replace and replacement text. Returns a copy of <source text> with any occurrences of <text to replace> replaced by <replacement text>",example:{expression:"blah",result:"blah"},name:"replace",params:{description:"( string )"},type:"string"},{accepts:"number",description:"Converts a number to a string.",example:{expression:"blah",result:"blah"},name:"text",params:{description:"( string )"},type:"string"},{accepts:"string",description:"Tests a string value to determine whether it starts with a given substring. Accepts two arguments: source text and target substring. Returns true if <source text> starts with <target subscring>.",example:{expression:"blah",result:"blah"},name:"starts",params:{description:"( string )"},type:"boolean"},{accepts:"string",description:"Tests a string value to determine whether it ends with a given substring. Accepts two arguments: source text and target substring. Returns true if <source text> ends with <target subscring>.",example:{expression:"blah",result:"blah"},name:"ends",params:{description:"( string )"},type:"boolean"},{accepts:"number",description:"blah",example:{expression:"blah",result:"blah"},name:"min",params:{description:"( string )"},type:"number"},{accepts:"number",description:"blah",example:{expression:"blah",result:"blah"},name:"max",params:{description:"( string )"},type:"number"},{accepts:"number",description:"blah",example:{expression:"blah",result:"blah"},name:"sum",params:{description:"( string )"},type:"number"},{accepts:"number",description:"blah",example:{expression:"blah",result:"blah"},name:"round",params:{description:"( string )"},type:"number"},{accepts:"any",description:"blah",example:{expression:"blah",result:"blah"},name:"or",params:{description:"( string )"},type:"boolean"},{accepts:"any",description:"blah",example:{expression:"blah",result:"blah"},name:"and",params:{description:"( string )"},type:"boolean"},{accepts:"any",description:"Return one of two possible result values, depending on the evaluation of a filter expression. If <filterExpression> resolves to true, result is <expression1>, otherwise <expression2>. ",example:{expression:"blah",result:"blah"},name:"if",params:{description:"( filterExpression, expression1, expression 2)"},type:"variable"}];var se=require("@vuu-ui/vuu-utils"),Hs=({name:n,description:e,example:t,params:s,type:i})=>{let o=(0,se.createEl)("div","vuuFunctionDoc"),r=(0,se.createEl)("div","function-heading"),l=(0,se.createEl)("span","function-name",n),a=(0,se.createEl)("span","param-list",s.description),u=(0,se.createEl)("span","function-type",i);r.appendChild(l),r.appendChild(a),r.appendChild(u);let c=(0,se.createEl)("p",void 0,e);if(o.appendChild(r),o.appendChild(c),t){let h=(0,se.createEl)("div","example-container","Example:"),d=(0,se.createEl)("div","example-expression",t.expression),p=(0,se.createEl)("div","example-result",t.result);h.appendChild(d),h.appendChild(p),o.appendChild(h)}return o};var ei=[],Pe=n=>n.map(e=>{var t;return{...e,apply:((t=e.apply)!=null?t:e.label)+" "}}),ti=(n,{functionName:e,operator:t})=>{if(t)return n.filter(Ve.isNumericColumn);if(e){let s=He.find(i=>i.name===e);if(s)switch(s.accepts){case"string":return n.filter(Ve.isTextColumn);case"number":return n.filter(Ve.isNumericColumn);default:return n}}return n},Xs=(n,e)=>ti(n,e).map(s=>{var o;let i=(o=s.label)!=null?o:s.name;return{apply:e.prefix?`${e.prefix}${i}`:i,label:i,boost:5,type:"column",expressionType:s.serverDataType}}),si=[{apply:"* ",boost:2,label:"*",type:"operator"},{apply:"/ ",boost:2,label:"/",type:"operator"},{apply:"+ ",boost:2,label:"+",type:"operator"},{apply:"- ",boost:2,label:"-",type:"operator"}],ni=n=>n===void 0||(0,Ve.isNumericColumn)(n)?si:ei,ii=n=>{switch(n.serverDataType){case"string":case"char":return Pe(ne.stringOperators);case"int":case"long":case"double":return Pe(ne.numericOperators)}},ps=n=>({apply:`${n.name}( `,boost:2,expressionType:n.type,info:()=>Hs(n),label:n.name,type:"function"}),ri=n=>{if(n){if(typeof n.accepts=="string")return n.accepts;if(Array.isArray(n.accepts))return n.accepts.every(e=>e==="string")?"string":"any"}return"any"},oi=He.map(ps),li=({functionName:n})=>{if(n){let e=He.find(s=>s.name===n),t=ri(e);if(e)switch(t){case"string":return He.filter(s=>s.type==="string"||s.type==="variable").map(ps);case"number":return He.filter(s=>s.type==="number"||s.type==="variable").map(ps);default:}}return oi},ai={},hs=({columns:n,table:e})=>{let t=(0,Xe.useCallback)(l=>l?n.find(a=>a.name===l):void 0,[n]),s=(0,Xe.useRef)(),i=(0,Tt.useTypeaheadSuggestions)(),o=(0,Xe.useCallback)(async(l,a=ai)=>{let{columnName:u,functionName:c,operator:h,prefix:d}=a;switch(l){case"expression":{let p=await Pe(Xs(n,{functionName:c,prefix:d})).concat(li(a));return s.current=p}case"column":{let p=await Xs(n,a);return s.current=Pe(p)}case"operator":{let p=await ni(t(u));return s.current=Pe(p)}case"relational-operator":{let p=await(0,ne.getRelationalOperators)(t(u));return s.current=Pe(p)}case"condition-operator":{let p=t(u);if(p){let f=await ii(p);if(f)return s.current=Pe(f)}}break;case"columnValue":if(u&&h){let p=(0,Tt.getTypeaheadParams)(e,u),f=await i(p);return s.current=(0,ne.toSuggestions)(f,{suffix:""}),s.current.forEach(x=>{x.apply=(g,w,R)=>{let D=new ne.AnnotationType,k=R+w.label.length+1;g.dispatch({changes:{from:R,insert:w.label},selection:{anchor:k,head:k},annotations:D.of(w)})}}),s.current}break}return[]},[n,t,i,e]),r=(0,Xe.useCallback)(async(l,a,u)=>{let{current:c}=s,h=!1,d=c||await o(l,{columnName:a});if(u&&d)for(let p of d){if(p.label===u)return!1;p.label.startsWith(u)&&(h=!0)}return h},[o]);return{getSuggestions:o,isPartialMatch:r}};var qe=require("@salt-ds/core"),Cn=De(require("classnames"),1),fe=require("react");var cs=require("@heswell/salt-lab"),q=require("@salt-ds/core"),ie=require("react");var Vs=require("@heswell/salt-lab"),Ys=De(require("classnames"),1);var Ze=require("react/jsx-runtime"),Ye="vuuColumnListItem",Zs=({className:n,item:e,label:t,style:s,...i})=>{let o=(0,Ys.default)(Ye,n,{[`${Ye}-calculated`]:e==null?void 0:e.expression,[`${Ye}-hidden`]:e==null?void 0:e.hidden});return(0,Ze.jsxs)(Vs.ListItem,{className:o,...i,children:[(0,Ze.jsx)("span",{className:`${Ye}-iconType`}),(0,Ze.jsx)("label",{className:`${Ye}-label`,children:t}),(0,Ze.jsx)("span",{className:`${Ye}-iconHidden`})]})};var A=require("react/jsx-runtime"),je="vuuColumnPicker",ui=(n,e)=>n.filter(t=>e.find(s=>s.name===t.name)==null),js=({availableColumns:n,id:e,dispatchColumnAction:t,onAddCalculatedColumnClick:s,onSelectionChange:i,chosenColumns:o,selectedColumn:r})=>{let[l,a]=(0,ie.useState)([]),u=(0,q.useIdMemo)(e),c=ui(n,o),h=(0,ie.useCallback)(()=>{l.length>0&&(a([]),t({type:"addColumn",columns:l}))},[t,l]),d=(0,ie.useCallback)(()=>r&&t({type:"removeColumn",column:r}),[r,t]),p=(0,ie.useCallback)(()=>r&&t({type:"moveColumn",column:r,moveBy:-1}),[t,r]),f=(0,ie.useCallback)(()=>r&&t({type:"moveColumn",column:r,moveBy:1}),[t,r]),x=(0,ie.useCallback)((R,D)=>a(D),[]),g=(0,ie.useCallback)((R,D)=>i==null?void 0:i(D),[i]),w=(0,ie.useCallback)((R,D)=>{t({type:"moveColumn",moveFrom:R,moveTo:D})},[t]);return(0,A.jsxs)("div",{className:je,id:u,children:[(0,A.jsxs)("div",{className:`${je}-listColumn`,children:[(0,A.jsx)("label",{htmlFor:`available-${u}`,children:(0,A.jsx)(q.Text,{as:"h4",children:"Available Columns"})}),(0,A.jsx)("div",{className:`${je}-listContainer`,style:{flex:1,overflow:"hidden"},children:(0,A.jsx)(cs.List,{borderless:!0,checkable:!1,height:"100%",id:`available-${u}`,itemHeight:24,itemToString:R=>R.name,onSelectionChange:x,selected:l,selectionStrategy:"extended",source:c})}),(0,A.jsx)("div",{style:{display:"flex",alignItems:"center",flex:"0 0 32px",marginTop:"var(--salt-size-basis-unit)"},children:(0,A.jsxs)(q.Button,{onClick:h,disabled:l.length===0,children:["Show",(0,A.jsx)("span",{"data-icon":"arrow-thin-right",style:{marginLeft:8}})]})})]}),(0,A.jsxs)("div",{className:`${je}-listColumn`,children:[(0,A.jsx)("label",{htmlFor:`selected-${u}`,children:(0,A.jsx)(q.Text,{as:"h4",children:"Included Columns"})}),(0,A.jsx)("div",{className:`${je}-listContainer`,style:{flex:1,overflow:"hidden"},children:(0,A.jsx)(cs.List,{ListItem:Zs,allowDragDrop:!0,borderless:!0,height:"100%",id:`selected-${u}`,itemHeight:24,itemToString:R=>R.name,onMoveListItem:w,onSelectionChange:g,selected:r,style:{flex:1},source:o})}),(0,A.jsxs)("div",{style:{alignItems:"center",flex:"0 0 32px",display:"flex",gap:6,marginTop:"var(--salt-size-basis-unit)"},children:[(0,A.jsxs)(q.Button,{onClick:d,disabled:r===null,children:[(0,A.jsx)("span",{"data-icon":"arrow-thin-left",style:{marginRight:8}}),"Hide"]}),(0,A.jsx)(q.Button,{"aria-label":"Move column up",onClick:p,disabled:r===null||(o==null?void 0:o.indexOf(r))===0,style:{width:28},children:(0,A.jsx)("span",{"data-icon":"arrow-thin-up"})}),(0,A.jsx)(q.Button,{"aria-label":"Move column down",onClick:f,disabled:r===null||o.indexOf(r)===o.length-1,style:{width:28},children:(0,A.jsx)("span",{"data-icon":"arrow-thin-down"})}),(0,A.jsx)(q.Button,{"aria-label":"Add calculated column",className:`${je}-addCalculatedColumn`,onClick:s,variant:"primary",children:(0,A.jsx)("span",{"data-icon":"add"})})]})]})]})};var un=require("@vuu-ui/vuu-layout"),T=require("@heswell/salt-lab"),pt=require("@salt-ds/core"),pn=De(require("classnames"),1),he=require("react");var tn=require("@vuu-ui/vuu-utils"),sn=require("@heswell/salt-lab"),nn=require("@salt-ds/core"),ds=De(require("classnames"),1),rn=require("react");var we=require("@heswell/salt-lab"),Js=require("@salt-ds/core"),ut=require("react");var W=require("react/jsx-runtime"),pi={alignOnDecimals:!1,decimals:4,zeroPad:!1},hi=(n,e)=>{let t=typeof n=="object"&&n.formatting?n.formatting:{};return["alignOnDecimals","decimals","zeroPad"].reduce((i,o)=>t[o]!==void 0?{...i,[o]:t[o]}:(e==null?void 0:e[o])!==void 0?{...i,[o]:e[o]}:i,pi)},qs=({column:n,dispatchColumnAction:e})=>{let{decimals:t,alignOnDecimals:s,zeroPad:i}=hi(n==null?void 0:n.type),o=(0,ut.useCallback)(u=>e({type:"updateColumnTypeFormatting",column:n,...u}),[n,e]),r=(0,ut.useCallback)(u=>o({decimals:parseInt(u.toString(),10)}),[o]),l=(0,ut.useCallback)((u,c)=>o({alignOnDecimals:c}),[o]),a=(0,ut.useCallback)((u,c)=>o({zeroPad:c}),[o]);switch(n.serverDataType){case"double":return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(we.FormField,{label:"No of Decimals",labelPlacement:"top",children:(0,W.jsx)(we.StepperInput,{value:t,onChange:r})}),(0,W.jsx)(we.Switch,{checked:s,label:"Align on decimals",LabelProps:{className:"vuuColumnPanelSwitch"},onChange:l}),(0,W.jsx)(we.Switch,{checked:i,label:"Zero pad",LabelProps:{className:"vuuColumnPanelSwitch"},onChange:a})]});case"long":case"int":return(0,W.jsx)(W.Fragment,{children:(0,W.jsx)(Js.Text,{children:"Work in progress"})});default:return null}};var Dt=require("react/jsx-runtime"),Ks=({column:n,dispatchColumnAction:e})=>(0,Dt.jsx)(Dt.Fragment,{children:"String"});var pe=require("react/jsx-runtime"),fs="vuuColumnTypePanel",ci=["Default Renderer (int, long)"],fi=["Default Renderer (double)"],en=["Default Renderer (string)"],di=n=>{let t=(0,tn.getRegisteredCellRenderers)(n.serverDataType).map(s=>s.name);switch(console.log({customRendererNames:t}),n.serverDataType){case"char":case"string":return en;case"int":case"long":return ci;case"double":return fi.concat(t);default:return en}},on=({className:n,column:e,dispatchColumnAction:t,...s})=>{let i=(0,rn.useMemo)(()=>{switch(e.serverDataType){case"double":case"int":case"long":return(0,pe.jsx)(qs,{column:e,dispatchColumnAction:t});default:return(0,pe.jsx)(Ks,{column:e,dispatchColumnAction:t})}},[e,t]),{serverDataType:o="string"}=e,r=di(e);return(0,pe.jsxs)(pe.Fragment,{children:[(0,pe.jsx)(sn.Dropdown,{className:(0,ds.default)(`${fs}-renderer`),fullWidth:!0,selected:r[0],source:r}),(0,pe.jsx)(nn.Panel,{...s,className:(0,ds.default)(fs,n,`${fs}-${o}`),children:i})]})};var P=require("react/jsx-runtime"),ln="vuuColumnSettingsPanel",mi={className:"salt-density-high"},an=()=>null,hn=({column:n,dispatchColumnAction:e,style:t,...s})=>{var d,p,f,x;let[i,o]=(0,he.useState)(0),r=(0,he.useCallback)(g=>e({type:"updateColumnProp",column:n,...g}),[n,e]),l=(0,he.useCallback)(g=>r({align:g.target.value}),[r]),a=(0,he.useCallback)(g=>r({pin:g.target.value}),[r]),u=(0,he.useCallback)((g,w)=>r({hidden:w}),[r]),c=(0,he.useCallback)((g,w)=>r({label:w}),[r]),h=(0,he.useCallback)(g=>r({width:parseInt(g.toString(),10)}),[r]);return(0,P.jsxs)("div",{className:ln,...s,style:{...t},children:[(0,P.jsx)(pt.Text,{as:"h4",children:"Column Settings"}),(0,P.jsxs)(un.Stack,{active:i,showTabs:!0,className:(0,pn.default)(`${ln}-columnTabs`),onTabSelectionChanged:o,TabstripProps:mi,children:[(0,P.jsxs)(pt.Panel,{title:"Column",children:[(0,P.jsx)(T.FormField,{label:"Hidden",labelPlacement:"left",children:(0,P.jsx)(T.Checkbox,{checked:n.hidden===!0,onChange:u})}),(0,P.jsx)(T.FormField,{label:"Label",labelPlacement:"left",children:(0,P.jsx)(T.Input,{value:(d=n.label)!=null?d:n.name,onChange:c})}),(0,P.jsx)(T.FormField,{label:"Width",labelPlacement:"left",children:(0,P.jsx)(T.StepperInput,{value:(p=n.width)!=null?p:100,onChange:h})}),(0,P.jsx)(T.FormField,{label:"Align",labelPlacement:"left",ActivationIndicatorComponent:an,children:(0,P.jsxs)(T.RadioButtonGroup,{"aria-label":"Column Align",value:(f=n.align)!=null?f:"left",legend:"Align",onChange:l,children:[(0,P.jsx)(T.RadioButton,{label:"Left",value:"left"}),(0,P.jsx)(T.RadioButton,{label:"Right",value:"right"})]})}),(0,P.jsx)(T.FormField,{label:"Pin Column",labelPlacement:"left",ActivationIndicatorComponent:an,children:(0,P.jsxs)(T.RadioButtonGroup,{"aria-label":"Pin Column",value:(x=n.pin)!=null?x:"",legend:"Pin Column",onChange:a,children:[(0,P.jsx)(T.RadioButton,{label:"Do not pin",value:""}),(0,P.jsx)(T.RadioButton,{label:"Left",value:"left"}),(0,P.jsx)(T.RadioButton,{label:"Right",value:"right"})]})})]}),(0,P.jsx)(on,{column:n,dispatchColumnAction:e,title:"Data Cell"}),(0,P.jsxs)(pt.Panel,{title:"Vuu",variant:"secondary",children:[(0,P.jsx)(T.FormField,{label:"Name",labelPlacement:"top",readOnly:!0,variant:"secondary",children:(0,P.jsx)(T.Input,{value:n.name})}),(0,P.jsx)(T.FormField,{label:"Vuu type",labelPlacement:"top",readOnly:!0,variant:"secondary",children:(0,P.jsx)(T.Input,{value:n.serverDataType})})]})]})]})};var K=require("@heswell/salt-lab"),Rt=require("@salt-ds/core"),Nt=require("react");var H=require("react/jsx-runtime"),gi="vuuGridSettingsPanel",xi=()=>null,cn=({config:n,dispatchColumnAction:e,style:t,...s})=>{var l;let i=(0,Nt.useCallback)(a=>e({type:"updateGridSettings",...a}),[e]),o=(0,Nt.useCallback)(a=>i({columnFormatHeader:a.target.value}),[i]),r=(0,Nt.useCallback)(a=>i({columnDefaultWidth:parseInt(a.toString(),10)}),[i]);return console.log(`GridSettingsPanel ${JSON.stringify(n.columns,null,2)}`),(0,H.jsxs)("div",{className:gi,...s,style:{...t},children:[(0,H.jsx)(Rt.Text,{as:"h4",children:"Grid Settings"}),(0,H.jsxs)(Rt.Panel,{children:[(0,H.jsx)(K.FormField,{label:"Format column labels",labelPlacement:"left",ActivationIndicatorComponent:xi,children:(0,H.jsxs)(K.RadioButtonGroup,{"aria-label":"Format column labels",value:n.columnFormatHeader,legend:"Format column labels",onChange:o,children:[(0,H.jsx)(K.RadioButton,{label:"No Formatting",value:void 0}),(0,H.jsx)(K.RadioButton,{label:"Capitalize",value:"capitalize"}),(0,H.jsx)(K.RadioButton,{label:"Uppercase",value:"uppercase"})]})}),(0,H.jsx)(K.FormField,{label:"Default Column Width",labelPlacement:"left",children:(0,H.jsx)(K.StepperInput,{value:(l=n.columnDefaultWidth)!=null?l:100,onChange:r})})]})]})};var fn=require("react"),dn=require("@heswell/salt-lab"),mn=require("@vuu-ui/vuu-utils"),Ci=(n,e)=>{switch(console.log(`gridSettingsReducer ${e.type}`),e.type){case"addColumn":return bi(n,e);case"addCalculatedColumn":return yi(n,e);case"moveColumn":return ki(n,e);case"removeColumn":return vi(n,e);case"updateColumn":return n;case"updateColumnProp":return Ei(n,e);case"updateGridSettings":return Oi(n,e);case"updateColumnTypeFormatting":return Si(n,e);default:return n}},gn=n=>{let[e,t]=(0,fn.useReducer)(Ci,n);return{gridSettings:e,dispatchColumnAction:t}};function bi(n,{column:e,columns:t,index:s=-1}){let{columns:i}=n;if(s===-1){if(Array.isArray(t))return{...n,columns:i.concat(t)};if(e)return{...n,columns:i.concat(e)}}return n}function yi(n,{columnName:e,columnType:t,expression:s}){let{columns:i}=n,o={name:e,expression:s,serverDataType:t};return{...n,columns:i.concat(o)}}function vi(n,{column:e}){let{columns:t}=n;return{...n,columns:t.filter(s=>s.name!==e.name)}}function ki(n,{column:e,moveBy:t,moveFrom:s,moveTo:i}){let{columns:o}=n;if(e&&typeof t=="number"){let r=o.indexOf(e),l=o.slice(),[a]=l.splice(r,1);return l.splice(r+t,0,a),{...n,columns:l}}else return typeof s=="number"&&typeof i=="number"?{...n,columns:(0,dn.moveItem)(o,s,i)}:n}function Ei(n,{align:e,column:t,hidden:s,label:i,width:o}){let{columns:r}=n;return(e==="left"||e==="right")&&(r=ht(r,{...t,align:e})),typeof s=="boolean"&&(r=ht(r,{...t,hidden:s})),typeof i=="string"&&(r=ht(r,{...t,label:i})),typeof o=="number"&&(r=ht(r,{...t,width:o})),{...n,columns:r}}function Oi(n,{columnFormatHeader:e}){return{...n,columnFormatHeader:e!=null?e:n.columnFormatHeader}}function Si(n,{alignOnDecimals:e,column:t,decimals:s,zeroPad:i}){let{columns:o}=n;if(o.find(l=>l.name===t.name)){let{serverDataType:l="string",type:a=(0,mn.fromServerDataType)(l)}=t,u=typeof a=="string"?{name:a}:{...a};return typeof e=="boolean"&&(u.formatting={...u.formatting,alignOnDecimals:e}),typeof s=="number"&&(u.formatting={...u.formatting,decimals:s}),typeof i=="boolean"&&(u.formatting={...u.formatting,zeroPad:i}),{...n,columns:ht(o,{...t,type:u})}}else return n}function ht(n,e){return n.map(t=>t.name===e.name?e:t)}var bn=require("@vuu-ui/vuu-layout");var It=require("@heswell/salt-lab"),Je=require("@salt-ds/core"),re=require("react");var ce=require("react/jsx-runtime"),xn=({columns:n,dispatchColumnAction:e,table:t})=>{let[s,i]=(0,re.useState)(""),[,o]=(0,re.useState)(),r=(0,re.useRef)(""),l=hs({columns:n,table:t}),a=(0,re.useCallback)(d=>{let{value:p}=d.target;i(p)},[]),u=(0,re.useCallback)(d=>{r.current=d},[]),c=(0,re.useCallback)((d,p)=>{console.log({source:d}),o(p)},[]),h=(0,re.useCallback)(()=>{r.current&&(console.log(`save expression ${JSON.stringify(r.current,null,2)}`),e({type:"addCalculatedColumn",columnName:s,expression:r.current,columnType:"string"}))},[s,e]);return(0,ce.jsxs)(Je.Panel,{className:"vuuCalculatedColumnPanel",title:"Define Computed Column",children:[(0,ce.jsx)(Je.Text,{styleAs:"h4",children:"Define Computed Column"}),(0,ce.jsx)(It.FormField,{label:"Column Name",labelPlacement:"left",children:(0,ce.jsx)(It.Input,{value:s,onChange:a})}),(0,ce.jsx)(us,{onChange:u,onSubmitExpression:c,suggestionProvider:l}),(0,ce.jsx)("div",{style:{marginTop:12},children:(0,ce.jsx)(Je.Button,{onClick:h,children:"Add Column"})})]})};var M=require("react/jsx-runtime"),Bt="vuuDatagridSettingsPanel",Pi=()=>{},wi=["table-settings","column-chooser","column-settings","define-column"],Ai=(n,e)=>wi[e],Ti=({availableColumns:n,className:e,gridConfig:t,onCancel:s,onConfigChange:i,...o})=>{var k;console.log("DatagridSettingsPanel render");let[r,l]=(0,fe.useState)(0),{gridSettings:a,dispatchColumnAction:u}=gn(t),[c,h]=(0,fe.useState)(null),d=(0,fe.useCallback)(y=>{h(y?y.name:null)},[]),p=(0,fe.useCallback)((y,C=!1)=>{console.log("1) DataGridSettingsPanel fire onConfigChange"),i==null||i(a,C)},[a,i]),f=(0,fe.useCallback)(y=>{l(y)},[]),x=(0,fe.useCallback)(y=>p(y,!0),[p]),g=c===null?null:(k=a.columns.find(y=>y.name===c))!=null?k:null,w={activeTabIndex:r,enableRenameTab:!1,orientation:"vertical"},R=(0,fe.useCallback)(()=>l(3),[]),D=r===2?"right":void 0;return(0,M.jsxs)("div",{...o,className:(0,Cn.default)(Bt,e),children:[(0,M.jsxs)(bn.Stack,{TabstripProps:w,className:`${Bt}-stack`,getTabIcon:Ai,getTabLabel:Pi,active:r===2?1:r,onTabSelectionChanged:f,showTabs:!0,children:[(0,M.jsx)(cn,{config:a,dispatchColumnAction:u}),(0,M.jsxs)("div",{className:`${Bt}-columnPanels`,"data-align":D,children:[(0,M.jsx)(js,{availableColumns:n,chosenColumns:a.columns,dispatchColumnAction:u,onSelectionChange:d,onAddCalculatedColumnClick:R,selectedColumn:g}),g===null?(0,M.jsx)(qe.Panel,{className:"vuuColumnSettingsPanel",children:"Select a column"}):(0,M.jsx)(hn,{column:g,dispatchColumnAction:u,style:{background:"white",flex:"1 0 150px"}})]}),(0,M.jsx)("div",{title:"Column Settings",children:"Column Settings"}),(0,M.jsx)(xn,{columns:a.columns,dispatchColumnAction:u,table:{module:"SIMUL",table:"instruments"}})]}),(0,M.jsxs)("div",{className:`${Bt}-buttonBar`,children:[(0,M.jsx)(qe.Button,{onClick:s,children:"Cancel"}),(0,M.jsx)(qe.Button,{onClick:p,children:"Apply"}),(0,M.jsx)(qe.Button,{onClick:x,children:"Save"})]})]})};var Ke=require("react"),yn=De(require("classnames"),1);var de=require("react/jsx-runtime"),ct="vuuDatasourceStats",ms=new Intl.NumberFormat,Di=({className:n,dataSource:e})=>{let[t,s]=(0,Ke.useState)(e.optimize),[i,o]=(0,Ke.useState)(e.range),[r,l]=(0,Ke.useState)(e.size);(0,Ke.useEffect)(()=>{s(e.optimize),l(e.size),e.on("optimize",s),e.on("resize",l),e.on("range",o)},[e]);let a=(0,yn.default)(ct,n),u=ms.format(i.from),c=ms.format(i.to-1),h=ms.format(r);return(0,de.jsxs)("div",{className:a,children:[(0,de.jsx)("span",{children:"Showing rows"}),(0,de.jsx)("span",{className:`${ct}-range`,children:u}),(0,de.jsx)("span",{className:`${ct}-range`,children:c}),(0,de.jsx)("span",{children:"of"}),(0,de.jsx)("span",{className:`${ct}-size`,children:h}),(0,de.jsx)("span",{className:`${ct}-optimize`,children:t})]})};
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var __accessCheck = (obj, member, msg) => {
30
+ if (!member.has(obj))
31
+ throw TypeError("Cannot " + msg);
32
+ };
33
+ var __privateGet = (obj, member, getter) => {
34
+ __accessCheck(obj, member, "read from private field");
35
+ return getter ? getter.call(obj) : member.get(obj);
36
+ };
37
+ var __privateAdd = (obj, member, value) => {
38
+ if (member.has(obj))
39
+ throw TypeError("Cannot add the same private member more than once");
40
+ member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
41
+ };
42
+ var __privateSet = (obj, member, value, setter) => {
43
+ __accessCheck(obj, member, "write to private field");
44
+ setter ? setter.call(obj, value) : member.set(obj, value);
45
+ return value;
46
+ };
47
+
48
+ // src/index.ts
49
+ var src_exports = {};
50
+ __export(src_exports, {
51
+ ColumnExpressionInput: () => ColumnExpressionInput,
52
+ ColumnNamedTerms: () => ColumnNamedTerms,
53
+ DataSourceStats: () => DataSourceStats,
54
+ DatagridSettingsPanel: () => DatagridSettingsPanel,
55
+ columnExpressionLanguageSupport: () => columnExpressionLanguageSupport,
56
+ isCompleteExpression: () => isCompleteExpression,
57
+ isCompleteRelationalExpression: () => isCompleteRelationalExpression,
58
+ lastNamedChild: () => lastNamedChild,
59
+ useColumnExpressionEditor: () => useColumnExpressionEditor,
60
+ useColumnExpressionSuggestionProvider: () => useColumnExpressionSuggestionProvider,
61
+ walkTree: () => walkTree
62
+ });
63
+ module.exports = __toCommonJS(src_exports);
64
+
65
+ // src/cell-renderers/background-cell/BackgroundCell.tsx
66
+ var import_vuu_utils3 = require("@vuu-ui/vuu-utils");
67
+ var import_classnames = __toESM(require("classnames"), 1);
68
+
69
+ // src/cell-renderers/background-cell/useDirection.ts
70
+ var import_react = require("react");
71
+ var import_vuu_utils = require("@vuu-ui/vuu-utils");
72
+ var import_vuu_utils2 = require("@vuu-ui/vuu-utils");
73
+ var INITIAL_VALUE = [void 0, void 0, void 0, void 0];
74
+ function useDirection(key, value, column) {
75
+ var _a;
76
+ const ref = (0, import_react.useRef)();
77
+ const [prevKey, prevValue, prevColumn, prevDirection] = ref.current || INITIAL_VALUE;
78
+ const { type: dataType } = column;
79
+ const decimals = (0, import_vuu_utils.isTypeDescriptor)(dataType) ? (_a = dataType.formatting) == null ? void 0 : _a.decimals : void 0;
80
+ const direction = key === prevKey && (0, import_vuu_utils2.isValidNumber)(value) && (0, import_vuu_utils2.isValidNumber)(prevValue) && column === prevColumn ? (0, import_vuu_utils2.getMovingValueDirection)(value, prevDirection, prevValue, decimals) : "";
81
+ (0, import_react.useEffect)(() => {
82
+ ref.current = [key, value, column, direction];
83
+ });
84
+ return direction;
85
+ }
86
+
87
+ // src/cell-renderers/background-cell/BackgroundCell.tsx
88
+ var import_jsx_runtime = require("react/jsx-runtime");
89
+ var CHAR_ARROW_UP = String.fromCharCode(11014);
90
+ var CHAR_ARROW_DOWN = String.fromCharCode(11015);
91
+ var { KEY } = import_vuu_utils3.metadataKeys;
92
+ var classBase = "vuuBackgroundCell";
93
+ var FlashStyle = {
94
+ ArrowOnly: "arrow",
95
+ BackgroundOnly: "bg-only",
96
+ ArrowBackground: "arrow-bg"
97
+ };
98
+ var getFlashStyle = (colType) => {
99
+ if (typeof colType === "string") {
100
+ return FlashStyle.BackgroundOnly;
101
+ } else if (colType) {
102
+ const { renderer } = colType;
103
+ return renderer && renderer.flashStyle || FlashStyle.BackgroundOnly;
104
+ }
105
+ };
106
+ var BackgroundCell = ({ column, row }) => {
107
+ const { key, type, valueFormatter } = column;
108
+ const value = row[key];
109
+ const flashStyle = getFlashStyle(type);
110
+ const direction = useDirection(row[KEY], value, column);
111
+ const arrow = flashStyle === FlashStyle.ArrowOnly || flashStyle === FlashStyle.ArrowBackground ? direction === import_vuu_utils3.UP1 || direction === import_vuu_utils3.UP2 ? CHAR_ARROW_UP : direction === import_vuu_utils3.DOWN1 || direction === import_vuu_utils3.DOWN2 ? CHAR_ARROW_DOWN : null : null;
112
+ const dirClass = direction ? ` ` + direction : "";
113
+ const className = (0, import_classnames.default)(classBase, dirClass, {
114
+ [`${classBase}-arrowOnly`]: flashStyle === FlashStyle.ArrowOnly,
115
+ [`${classBase}-arrowBackground`]: flashStyle === FlashStyle.ArrowBackground
116
+ });
117
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className, tabIndex: -1, children: [
118
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: `${classBase}-flasher`, children: arrow }),
119
+ valueFormatter(row[column.key])
120
+ ] });
121
+ };
122
+ (0, import_vuu_utils3.registerComponent)("background", BackgroundCell, "cell-renderer", {
123
+ serverDataType: ["long", "int", "double"]
124
+ });
125
+
126
+ // src/column-expression-input/useColumnExpressionEditor.ts
127
+ var import_vuu_codemirror5 = require("@vuu-ui/vuu-codemirror");
128
+ var import_vuu_utils4 = require("@vuu-ui/vuu-utils");
129
+ var import_react3 = require("react");
130
+
131
+ // src/column-expression-input/column-language-parser/ColumnExpressionLanguage.ts
132
+ var import_vuu_codemirror = require("@vuu-ui/vuu-codemirror");
133
+
134
+ // src/column-expression-input/column-language-parser/generated/column-parser.js
135
+ var import_lr = require("@lezer/lr");
136
+ var parser = import_lr.LRParser.deserialize({
137
+ version: 14,
138
+ states: "&fOVQPOOO!SQPO'#C^OVQPO'#CcQ!pQPOOO#OQPO'#CkO#TQPO'#CrOOQO'#Cy'#CyO#YQPO,58}OVQPO,59QOVQPO,59QOVQPO,59VOVQPO'#CtOOQO,59^,59^OOQO1G.i1G.iOOQO1G.l1G.lO#kQPO1G.lO$fQPO'#CmO%WQQO1G.qOOQO'#C{'#C{O%cQPO,59`OOQO'#Cn'#CnO%wQPO,59XOVQPO,59ZOVQPO,59[OVQPO7+$]OVQPO'#CuO&`QPO1G.zOOQO1G.z1G.zO&hQQO'#C^O&rQQO1G.sO'ZQQO1G.uOOQO1G.v1G.vO'fQPO<<GwO'wQPO,59aOOQO-E6s-E6sOOQO7+$f7+$fOVQPOAN=cO(]QQO1G.lO(tQPOG22}OOQOLD(iLD(iO%wQPO,59QO%wQPO,59Q",
139
+ stateData: ")[~OlOS~ORUOSUOTUOUUOWQO`SOnPO~OWgXZQX[QX]QX^QXeQX~OjQXXQXpQXqQXrQXsQXtQXuQX~PnOZWO[WO]XO^XO~OWYO~OWZO~OX]OZWO[WO]XO^XO~OZWO[WO]Yi^YijYiXYipYiqYirYisYitYiuYieYi~OZWO[WO]XO^XOpdOqdOrdOsdOtdOudO~OehOvfOwgO~OXkOZWO[WO]XO^XOeiO~ORUOSUOTUOUUOWQO`SOnlO~OXsOeiO~OvQXwQX~PnOZxO[xO]yO^yOeaivaiwai~OwgOecivci~OZWO[WO]XO^XOetO~OZWO[WO]XO^XOXiaeia~OZxO[xO]Yi^YieYivYiwYi~OXwOZWO[WO]XO^XO~O`UTn~",
140
+ goto: "#spPPqPPPPqPPqPPPPqP!R!W!R!RPq!Z!k!nPPP!tP#jmUOQWXYZefghitxyVbYfgRe`mTOQWXYZefghitxyR[TQjcRrjQROQVQS^WxQ_XU`YfgQcZQmeQphQqiQuyRvtQaYQnfRog",
141
+ nodeNames: "\u26A0 ColumnDefinitionExpression Column Number String True False ParenthesizedExpression OpenBrace CloseBrace ArithmeticExpression Divide Times Plus Minus ConditionalExpression If RelationalExpression RelationalOperator AndCondition OrCondition Comma CallExpression Function ArgList",
142
+ maxTerm: 39,
143
+ skippedNodes: [0],
144
+ repeatNodeCount: 1,
145
+ tokenData: ".^~RnXY#PYZ#P]^#Ppq#Pqr#brs#mxy$eyz$jz{$o{|$t|}$y}!O%O!O!P%T!P!Q%c!Q![%h!^!_%s!_!`&Q!`!a&V!c!}&d#R#S&d#T#U&u#U#Y&d#Y#Z(Y#Z#]&d#]#^*j#^#c&d#c#d+f#d#h&d#h#i,b#i#o&d~#USl~XY#PYZ#P]^#Ppq#P~#eP!_!`#h~#mOu~~#pWOX#mZ]#m^r#mrs$Ys#O#m#P;'S#m;'S;=`$_<%lO#m~$_OS~~$bP;=`<%l#m~$jOW~~$oOX~~$tO[~~$yO]~~%OOe~~%TO^~~%WP!Q![%Z~%`PR~!Q![%Z~%hOZ~~%mQR~!O!P%Z!Q![%h~%xPr~!_!`%{~&QOt~~&VOp~~&[Pq~!_!`&_~&dOs~P&iSnP!Q![&d!c!}&d#R#S&d#T#o&dR&zUnP!Q![&d!c!}&d#R#S&d#T#b&d#b#c'^#c#o&dR'cUnP!Q![&d!c!}&d#R#S&d#T#W&d#W#X'u#X#o&dR'|SvQnP!Q![&d!c!}&d#R#S&d#T#o&d~(_TnP!Q![&d!c!}&d#R#S&d#T#U(n#U#o&d~(sUnP!Q![&d!c!}&d#R#S&d#T#`&d#`#a)V#a#o&d~)[UnP!Q![&d!c!}&d#R#S&d#T#g&d#g#h)n#h#o&d~)sUnP!Q![&d!c!}&d#R#S&d#T#X&d#X#Y*V#Y#o&d~*^SU~nP!Q![&d!c!}&d#R#S&d#T#o&d~*oUnP!Q![&d!c!}&d#R#S&d#T#Y&d#Y#Z+R#Z#o&d~+YS`~nP!Q![&d!c!}&d#R#S&d#T#o&dR+kUnP!Q![&d!c!}&d#R#S&d#T#f&d#f#g+}#g#o&dR,USwQnP!Q![&d!c!}&d#R#S&d#T#o&d~,gUnP!Q![&d!c!}&d#R#S&d#T#f&d#f#g,y#g#o&d~-OUnP!Q![&d!c!}&d#R#S&d#T#i&d#i#j-b#j#o&d~-gUnP!Q![&d!c!}&d#R#S&d#T#X&d#X#Y-y#Y#o&d~.QST~nP!Q![&d!c!}&d#R#S&d#T#o&d",
146
+ tokenizers: [0, 1],
147
+ topRules: { "ColumnDefinitionExpression": [0, 1] },
148
+ tokenPrec: 375
149
+ });
150
+
151
+ // src/column-expression-input/column-language-parser/ColumnExpressionLanguage.ts
152
+ var columnExpressionLanguage = import_vuu_codemirror.LRLanguage.define({
153
+ name: "VuuColumnExpression",
154
+ parser: parser.configure({
155
+ props: [
156
+ (0, import_vuu_codemirror.styleTags)({
157
+ Function: import_vuu_codemirror.tags.variableName,
158
+ String: import_vuu_codemirror.tags.string,
159
+ Or: import_vuu_codemirror.tags.emphasis,
160
+ Operator: import_vuu_codemirror.tags.operator
161
+ })
162
+ ]
163
+ })
164
+ });
165
+ var columnExpressionLanguageSupport = () => {
166
+ return new import_vuu_codemirror.LanguageSupport(
167
+ columnExpressionLanguage
168
+ /*, [exampleCompletion]*/
169
+ );
170
+ };
171
+
172
+ // src/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.ts
173
+ var LiteralExpressionImpl = class {
174
+ constructor(value) {
175
+ this.value = value;
176
+ switch (typeof value) {
177
+ case "boolean":
178
+ this.type = "booleanLiteralExpression";
179
+ break;
180
+ case "number":
181
+ this.type = "numberLiteralExpression";
182
+ break;
183
+ default:
184
+ this.type = "stringLiteralExpression";
185
+ }
186
+ }
187
+ toJSON() {
188
+ return {
189
+ type: this.type,
190
+ value: this.value
191
+ };
192
+ }
193
+ };
194
+ var ColumnExpressionImpl = class {
195
+ constructor(columnName) {
196
+ this.type = "colExpression";
197
+ this.column = columnName;
198
+ }
199
+ toJSON() {
200
+ return {
201
+ type: this.type,
202
+ column: this.column
203
+ };
204
+ }
205
+ };
206
+ var _expressions, _op;
207
+ var ArithmeticExpressionImpl = class {
208
+ constructor(op = "unknown") {
209
+ __privateAdd(this, _expressions, [
210
+ { type: "unknown" },
211
+ { type: "unknown" }
212
+ ]);
213
+ __privateAdd(this, _op, void 0);
214
+ this.type = "arithmeticExpression";
215
+ __privateSet(this, _op, op);
216
+ }
217
+ get op() {
218
+ return __privateGet(this, _op);
219
+ }
220
+ set op(op) {
221
+ __privateSet(this, _op, op);
222
+ }
223
+ get expressions() {
224
+ return __privateGet(this, _expressions);
225
+ }
226
+ toJSON() {
227
+ return {
228
+ type: this.type,
229
+ op: __privateGet(this, _op),
230
+ expressions: __privateGet(this, _expressions)
231
+ };
232
+ }
233
+ };
234
+ _expressions = new WeakMap();
235
+ _op = new WeakMap();
236
+ var _expressions2;
237
+ var CallExpressionImpl = class {
238
+ constructor(functionName) {
239
+ __privateAdd(this, _expressions2, []);
240
+ this.type = "callExpression";
241
+ this.functionName = functionName;
242
+ }
243
+ get expressions() {
244
+ return __privateGet(this, _expressions2);
245
+ }
246
+ get arguments() {
247
+ return __privateGet(this, _expressions2);
248
+ }
249
+ toJSON() {
250
+ return {
251
+ type: this.type,
252
+ functionName: this.functionName,
253
+ arguments: __privateGet(this, _expressions2).map((e) => {
254
+ var _a;
255
+ return (_a = e.toJSON) == null ? void 0 : _a.call(e);
256
+ })
257
+ };
258
+ }
259
+ };
260
+ _expressions2 = new WeakMap();
261
+ var _expressions3, _op2;
262
+ var RelationalExpressionImpl = class {
263
+ constructor() {
264
+ __privateAdd(this, _expressions3, [
265
+ { type: "unknown" },
266
+ { type: "unknown" }
267
+ ]);
268
+ __privateAdd(this, _op2, "unknown");
269
+ this.type = "relationalExpression";
270
+ }
271
+ get op() {
272
+ return __privateGet(this, _op2);
273
+ }
274
+ set op(op) {
275
+ __privateSet(this, _op2, op);
276
+ }
277
+ get expressions() {
278
+ return __privateGet(this, _expressions3);
279
+ }
280
+ toJSON() {
281
+ return {
282
+ type: this.type,
283
+ op: __privateGet(this, _op2),
284
+ expressions: __privateGet(this, _expressions3)
285
+ };
286
+ }
287
+ };
288
+ _expressions3 = new WeakMap();
289
+ _op2 = new WeakMap();
290
+ var _expressions4, _op3;
291
+ var BooleanConditionImp = class {
292
+ constructor(booleanOperator) {
293
+ __privateAdd(this, _expressions4, [
294
+ { type: "unknown" },
295
+ { type: "unknown" }
296
+ ]);
297
+ __privateAdd(this, _op3, void 0);
298
+ this.type = "booleanCondition";
299
+ __privateSet(this, _op3, booleanOperator);
300
+ }
301
+ get op() {
302
+ return __privateGet(this, _op3);
303
+ }
304
+ get expressions() {
305
+ return __privateGet(this, _expressions4);
306
+ }
307
+ toJSON() {
308
+ return {
309
+ type: this.type,
310
+ op: __privateGet(this, _op3),
311
+ expressions: __privateGet(this, _expressions4).map((e) => {
312
+ var _a;
313
+ return (_a = e.toJSON) == null ? void 0 : _a.call(e);
314
+ })
315
+ };
316
+ }
317
+ };
318
+ _expressions4 = new WeakMap();
319
+ _op3 = new WeakMap();
320
+ var _expressions5;
321
+ var ConditionalExpressionImpl = class {
322
+ constructor(booleanOperator) {
323
+ __privateAdd(this, _expressions5, void 0);
324
+ this.type = "conditionalExpression";
325
+ __privateSet(this, _expressions5, [
326
+ booleanOperator ? new BooleanConditionImp(booleanOperator) : new RelationalExpressionImpl(),
327
+ { type: "unknown" },
328
+ { type: "unknown" }
329
+ ]);
330
+ }
331
+ get expressions() {
332
+ return __privateGet(this, _expressions5);
333
+ }
334
+ get condition() {
335
+ return __privateGet(this, _expressions5)[0];
336
+ }
337
+ get truthyExpression() {
338
+ return __privateGet(this, _expressions5)[1];
339
+ }
340
+ set truthyExpression(expression) {
341
+ __privateGet(this, _expressions5)[1] = expression;
342
+ }
343
+ get falsyExpression() {
344
+ return __privateGet(this, _expressions5)[2];
345
+ }
346
+ set falsyExpression(expression) {
347
+ __privateGet(this, _expressions5)[2] = expression;
348
+ }
349
+ toJSON() {
350
+ var _a, _b, _c, _d, _e;
351
+ return {
352
+ type: this.type,
353
+ condition: (_b = (_a = this.condition).toJSON) == null ? void 0 : _b.call(_a),
354
+ truthyExpression: this.truthyExpression,
355
+ falsyExpression: (_e = (_d = (_c = this.falsyExpression) == null ? void 0 : _c.toJSON) == null ? void 0 : _d.call(_c)) != null ? _e : this.falsyExpression
356
+ };
357
+ }
358
+ };
359
+ _expressions5 = new WeakMap();
360
+ var isUnknown = (e) => e.type === "unknown";
361
+ var isArithmeticExpression = (expression) => expression.type === "arithmeticExpression";
362
+ var isCallExpression = (expression) => expression.type === "callExpression";
363
+ var isConditionalExpression = (expression) => expression.type === "conditionalExpression";
364
+ var isCondition = (expression) => expression.type === "relationalExpression" || expression.type === "booleanCondition";
365
+ var isBooleanCondition = (expression) => expression.type === "booleanCondition";
366
+ var isRelationalExpression = (expression) => (expression == null ? void 0 : expression.type) === "relationalExpression";
367
+ var firstIncompleteExpression = (expression) => {
368
+ if (isUnknown(expression)) {
369
+ return expression;
370
+ } else if (isRelationalExpression(expression)) {
371
+ const [operand1, operand2] = expression.expressions;
372
+ if (expressionIsIncomplete(operand1)) {
373
+ return firstIncompleteExpression(operand1);
374
+ } else if (expression.op === "unknown") {
375
+ return expression;
376
+ } else if (expressionIsIncomplete(operand2)) {
377
+ return firstIncompleteExpression(operand2);
378
+ }
379
+ } else if (isCondition(expression)) {
380
+ const { expressions = [] } = expression;
381
+ for (const e of expressions) {
382
+ if (expressionIsIncomplete(e)) {
383
+ return firstIncompleteExpression(e);
384
+ }
385
+ }
386
+ } else if (isConditionalExpression(expression)) {
387
+ const { condition, truthyExpression, falsyExpression } = expression;
388
+ if (expressionIsIncomplete(condition)) {
389
+ return firstIncompleteExpression(condition);
390
+ } else if (expressionIsIncomplete(truthyExpression)) {
391
+ return firstIncompleteExpression(truthyExpression);
392
+ } else if (expressionIsIncomplete(falsyExpression)) {
393
+ return firstIncompleteExpression(falsyExpression);
394
+ }
395
+ } else if (isArithmeticExpression(expression)) {
396
+ const { expressions = [] } = expression;
397
+ for (const e of expressions) {
398
+ if (expressionIsIncomplete(e)) {
399
+ return firstIncompleteExpression(e);
400
+ }
401
+ }
402
+ }
403
+ };
404
+ var replaceUnknownExpression = (incompleteExpression, unknownExpression, expression) => {
405
+ const { expressions = [] } = incompleteExpression;
406
+ if (expressions.includes(unknownExpression)) {
407
+ const pos = expressions.indexOf(unknownExpression);
408
+ expressions.splice(pos, 1, expression);
409
+ return true;
410
+ } else {
411
+ for (const e of expressions) {
412
+ if (replaceUnknownExpression(e, unknownExpression, expression)) {
413
+ return true;
414
+ }
415
+ }
416
+ }
417
+ return false;
418
+ };
419
+ var expressionIsIncomplete = (expression) => {
420
+ if (isUnknown(expression)) {
421
+ return true;
422
+ } else if (isConditionalExpression(expression)) {
423
+ return expressionIsIncomplete(expression.condition) || expressionIsIncomplete(expression.truthyExpression) || expressionIsIncomplete(expression.falsyExpression);
424
+ } else if (isRelationalExpression(expression) || isBooleanCondition(expression)) {
425
+ return expression.op === void 0 || expression.expressions.some((e) => expressionIsIncomplete(e));
426
+ }
427
+ return false;
428
+ };
429
+ var addExpression = (expression, subExpression) => {
430
+ const targetExpression = firstIncompleteExpression(expression);
431
+ if (targetExpression) {
432
+ if (targetExpression.expressions) {
433
+ targetExpression.expressions.push(subExpression);
434
+ } else {
435
+ console.warn("don't know how to treat targetExpression");
436
+ }
437
+ } else {
438
+ console.error("no target expression found");
439
+ }
440
+ };
441
+ var _expression, _callStack;
442
+ var ColumnExpression = class {
443
+ constructor() {
444
+ __privateAdd(this, _expression, void 0);
445
+ __privateAdd(this, _callStack, []);
446
+ }
447
+ setCondition(booleanOperator) {
448
+ if (__privateGet(this, _expression) === void 0) {
449
+ this.addExpression(new ConditionalExpressionImpl(booleanOperator));
450
+ } else if (isConditionalExpression(__privateGet(this, _expression))) {
451
+ if (expressionIsIncomplete(__privateGet(this, _expression).condition)) {
452
+ const condition = booleanOperator ? new BooleanConditionImp(booleanOperator) : new RelationalExpressionImpl();
453
+ this.addExpression(condition);
454
+ } else if (isUnknown(__privateGet(this, _expression).truthyExpression)) {
455
+ __privateGet(this, _expression).truthyExpression = new ConditionalExpressionImpl(
456
+ booleanOperator
457
+ );
458
+ } else if (expressionIsIncomplete(__privateGet(this, _expression).truthyExpression)) {
459
+ const condition = booleanOperator ? new BooleanConditionImp(booleanOperator) : new RelationalExpressionImpl();
460
+ this.addExpression(condition);
461
+ } else if (isUnknown(__privateGet(this, _expression).falsyExpression)) {
462
+ __privateGet(this, _expression).falsyExpression = new ConditionalExpressionImpl(
463
+ booleanOperator
464
+ );
465
+ } else if (expressionIsIncomplete(__privateGet(this, _expression).falsyExpression)) {
466
+ const condition = booleanOperator ? new BooleanConditionImp(booleanOperator) : new RelationalExpressionImpl();
467
+ this.addExpression(condition);
468
+ }
469
+ } else {
470
+ console.error("setCondition called unexpectedly");
471
+ }
472
+ }
473
+ addExpression(expression) {
474
+ if (__privateGet(this, _callStack).length > 0) {
475
+ const currentCallExpression = __privateGet(this, _callStack).at(-1);
476
+ currentCallExpression == null ? void 0 : currentCallExpression.arguments.push(expression);
477
+ } else if (__privateGet(this, _expression) === void 0) {
478
+ __privateSet(this, _expression, expression);
479
+ } else if (isArithmeticExpression(__privateGet(this, _expression))) {
480
+ const targetExpression = firstIncompleteExpression(__privateGet(this, _expression));
481
+ if (targetExpression && isUnknown(targetExpression)) {
482
+ replaceUnknownExpression(
483
+ __privateGet(this, _expression),
484
+ targetExpression,
485
+ expression
486
+ );
487
+ }
488
+ } else if (isConditionalExpression(__privateGet(this, _expression))) {
489
+ if (expressionIsIncomplete(__privateGet(this, _expression))) {
490
+ const targetExpression = firstIncompleteExpression(__privateGet(this, _expression));
491
+ if (targetExpression && isUnknown(targetExpression)) {
492
+ replaceUnknownExpression(
493
+ __privateGet(this, _expression),
494
+ targetExpression,
495
+ expression
496
+ );
497
+ } else if (targetExpression) {
498
+ addExpression(targetExpression, expression);
499
+ }
500
+ }
501
+ }
502
+ }
503
+ setFunction(functionName) {
504
+ const callExpression = new CallExpressionImpl(functionName);
505
+ this.addExpression(callExpression);
506
+ __privateGet(this, _callStack).push(callExpression);
507
+ }
508
+ setColumn(columnName) {
509
+ this.addExpression(new ColumnExpressionImpl(columnName));
510
+ }
511
+ setArithmeticOp(value) {
512
+ const op = value;
513
+ const expression = __privateGet(this, _expression);
514
+ if (isArithmeticExpression(expression)) {
515
+ expression.op = op;
516
+ }
517
+ }
518
+ setRelationalOperator(value) {
519
+ const op = value;
520
+ if (__privateGet(this, _expression) && isConditionalExpression(__privateGet(this, _expression))) {
521
+ const targetExpression = firstIncompleteExpression(__privateGet(this, _expression));
522
+ if (isRelationalExpression(targetExpression)) {
523
+ targetExpression.op = op;
524
+ } else {
525
+ console.error(`no target expression found (op = ${value})`);
526
+ }
527
+ }
528
+ }
529
+ setValue(value) {
530
+ const literalExpression = new LiteralExpressionImpl(value);
531
+ if (__privateGet(this, _expression) === void 0) {
532
+ __privateSet(this, _expression, literalExpression);
533
+ } else if (isArithmeticExpression(__privateGet(this, _expression))) {
534
+ this.addExpression(literalExpression);
535
+ } else if (isCallExpression(__privateGet(this, _expression))) {
536
+ __privateGet(this, _expression).arguments.push(literalExpression);
537
+ } else if (isConditionalExpression(__privateGet(this, _expression))) {
538
+ if (expressionIsIncomplete(__privateGet(this, _expression))) {
539
+ const targetExpression = firstIncompleteExpression(__privateGet(this, _expression));
540
+ if (targetExpression && isUnknown(targetExpression)) {
541
+ replaceUnknownExpression(
542
+ __privateGet(this, _expression),
543
+ targetExpression,
544
+ literalExpression
545
+ );
546
+ } else if (targetExpression) {
547
+ addExpression(targetExpression, literalExpression);
548
+ }
549
+ } else {
550
+ console.log("what do we do with value, in a complete expression");
551
+ }
552
+ }
553
+ }
554
+ closeBrace() {
555
+ __privateGet(this, _callStack).pop();
556
+ }
557
+ get expression() {
558
+ return __privateGet(this, _expression);
559
+ }
560
+ toJSON() {
561
+ var _a;
562
+ return (_a = __privateGet(this, _expression)) == null ? void 0 : _a.toJSON();
563
+ }
564
+ };
565
+ _expression = new WeakMap();
566
+ _callStack = new WeakMap();
567
+ var walkTree = (tree, source) => {
568
+ const columnExpression = new ColumnExpression();
569
+ const cursor = tree.cursor();
570
+ do {
571
+ const { name, from, to } = cursor;
572
+ switch (name) {
573
+ case "AndCondition":
574
+ columnExpression.setCondition("and");
575
+ break;
576
+ case "OrCondition":
577
+ columnExpression.setCondition("or");
578
+ break;
579
+ case "RelationalExpression":
580
+ columnExpression.setCondition();
581
+ break;
582
+ case "ArithmeticExpression":
583
+ columnExpression.addExpression(new ArithmeticExpressionImpl());
584
+ break;
585
+ case "Column":
586
+ {
587
+ const columnName = source.substring(from, to);
588
+ columnExpression.setColumn(columnName);
589
+ }
590
+ break;
591
+ case "Function":
592
+ {
593
+ const functionName = source.substring(from, to);
594
+ columnExpression.setFunction(functionName);
595
+ }
596
+ break;
597
+ case "Times":
598
+ case "Divide":
599
+ case "Plus":
600
+ case "Minus":
601
+ {
602
+ const op = source.substring(from, to);
603
+ columnExpression.setArithmeticOp(op);
604
+ }
605
+ break;
606
+ case "RelationalOperator":
607
+ {
608
+ const op = source.substring(from, to);
609
+ columnExpression.setRelationalOperator(op);
610
+ }
611
+ break;
612
+ case "False":
613
+ case "True":
614
+ {
615
+ const value = source.substring(from, to);
616
+ columnExpression.setValue(value === "true" ? true : false);
617
+ }
618
+ break;
619
+ case "String":
620
+ columnExpression.setValue(source.substring(from + 1, to - 1));
621
+ break;
622
+ case "Number":
623
+ columnExpression.setValue(parseFloat(source.substring(from, to)));
624
+ break;
625
+ case "CloseBrace":
626
+ columnExpression.closeBrace();
627
+ break;
628
+ default:
629
+ }
630
+ } while (cursor.next());
631
+ return columnExpression.toJSON();
632
+ };
633
+
634
+ // src/column-expression-input/column-language-parser/column-expression-parse-utils.ts
635
+ var strictParser = parser.configure({ strict: true });
636
+ var RelationalOperands = ["Number", "String"];
637
+ var ColumnNamedTerms = [
638
+ ...RelationalOperands,
639
+ "AndCondition",
640
+ "ArithmeticExpression",
641
+ "BooleanOperator",
642
+ "RelationalOperatorOperator",
643
+ "CallExpression",
644
+ "CloseBrace",
645
+ "Column",
646
+ "Comma",
647
+ "ConditionalExpression",
648
+ "Divide",
649
+ "Equal",
650
+ "If",
651
+ "Minus",
652
+ "OpenBrace",
653
+ "OrCondition",
654
+ "ParenthesizedExpression",
655
+ "Plus",
656
+ "RelationalExpression",
657
+ "RelationalOperator",
658
+ "Times"
659
+ ];
660
+ var isCompleteExpression = (src) => {
661
+ try {
662
+ strictParser.parse(src);
663
+ return true;
664
+ } catch (err) {
665
+ return false;
666
+ }
667
+ };
668
+ var lastNamedChild = (node) => {
669
+ let { lastChild } = node;
670
+ while (lastChild && !ColumnNamedTerms.includes(lastChild.name)) {
671
+ lastChild = lastChild.prevSibling;
672
+ console.log(lastChild == null ? void 0 : lastChild.name);
673
+ }
674
+ return lastChild;
675
+ };
676
+ var isCompleteRelationalExpression = (node) => {
677
+ if ((node == null ? void 0 : node.name) === "RelationalExpression") {
678
+ const { firstChild } = node;
679
+ const lastChild = lastNamedChild(node);
680
+ if ((firstChild == null ? void 0 : firstChild.name) === "Column" && typeof (lastChild == null ? void 0 : lastChild.name) === "string" && RelationalOperands.includes(lastChild.name)) {
681
+ return true;
682
+ }
683
+ }
684
+ return false;
685
+ };
686
+
687
+ // src/column-expression-input/highlighting.ts
688
+ var import_vuu_codemirror2 = require("@vuu-ui/vuu-codemirror");
689
+ var myHighlightStyle = import_vuu_codemirror2.HighlightStyle.define([
690
+ { tag: import_vuu_codemirror2.tags.variableName, color: "var(--vuuFilterEditor-variableColor)" },
691
+ { tag: import_vuu_codemirror2.tags.comment, color: "green", fontStyle: "italic" }
692
+ ]);
693
+ var vuuHighlighting = (0, import_vuu_codemirror2.syntaxHighlighting)(myHighlightStyle);
694
+
695
+ // src/column-expression-input/theme.ts
696
+ var import_vuu_codemirror3 = require("@vuu-ui/vuu-codemirror");
697
+ var vuuTheme = import_vuu_codemirror3.EditorView.theme(
698
+ {
699
+ "&": {
700
+ border: "solid 1px var(--salt-container-primary-borderColor)",
701
+ color: "var(--vuuFilterEditor-color)",
702
+ backgroundColor: "var(--vuuFilterEditor-background)"
703
+ },
704
+ ".cm-content": {
705
+ caretColor: "var(--vuuFilterEditor-cursorColor)"
706
+ },
707
+ "&.cm-focused .cm-cursor": {
708
+ borderLeftColor: "var(--vuuFilterEditor-cursorColor)"
709
+ },
710
+ "&.cm-focused .cm-selectionBackground, ::selection": {
711
+ backgroundColor: "var(--vuuFilterEditor-selectionBackground)"
712
+ },
713
+ ".cm-selectionBackground, ::selection": {
714
+ backgroundColor: "var(--vuuFilterEditor-selectionBackground)"
715
+ },
716
+ ".cm-scroller": {
717
+ fontFamily: "var(--vuuFilterEditor-fontFamily)"
718
+ },
719
+ ".cm-tooltip": {
720
+ background: "var(--vuuFilterEditor-tooltipBackground)",
721
+ border: "var(--vuuFilterEditor-tooltipBorder)",
722
+ boxShadow: "var(--vuuFilterEditor-tooltipElevation)",
723
+ "&.cm-tooltip-autocomplete > ul": {
724
+ fontFamily: "var(--vuuFilterEditor-fontFamily)",
725
+ fontSize: "var(--vuuFilterEditor-fontSize)",
726
+ maxHeight: "240px"
727
+ },
728
+ "&.cm-tooltip-autocomplete > ul > li": {
729
+ height: "var(--vuuFilterEditor-suggestion-height)",
730
+ padding: "0 3px",
731
+ lineHeight: "var(--vuuFilterEditor-suggestion-height)"
732
+ },
733
+ "&.cm-tooltip-autocomplete li[aria-selected]": {
734
+ background: "var(--vuuFilterEditor-suggestion-selectedBackground)",
735
+ color: "var(--vuuFilterEditor-suggestion-selectedColor)"
736
+ },
737
+ "&.cm-tooltip-autocomplete li .cm-completionDetail": {
738
+ color: "var(--vuuFilterEditor-suggestion-detailColor)"
739
+ }
740
+ }
741
+ },
742
+ { dark: false }
743
+ );
744
+
745
+ // src/column-expression-input/useColumnAutoComplete.ts
746
+ var import_vuu_codemirror4 = require("@vuu-ui/vuu-codemirror");
747
+ var import_react2 = require("react");
748
+ var applyPrefix = (completions, prefix) => prefix ? completions.map((completion) => {
749
+ var _a;
750
+ return {
751
+ ...completion,
752
+ apply: typeof completion.apply === "function" ? completion.apply : `${prefix}${(_a = completion.apply) != null ? _a : completion.label}`
753
+ };
754
+ }) : completions;
755
+ var isOperator = (node) => node === void 0 ? false : ["Times", "Divide", "Plus", "Minus"].includes(node.name);
756
+ var getLastChild = (node, context) => {
757
+ var _a;
758
+ let { lastChild: childNode } = node;
759
+ const { pos } = context;
760
+ while (childNode) {
761
+ const isBeforeCursor = childNode.from < pos;
762
+ if (isBeforeCursor && ColumnNamedTerms.includes(childNode.name)) {
763
+ if (childNode.name === "ParenthesizedExpression") {
764
+ const expression = (_a = childNode.firstChild) == null ? void 0 : _a.nextSibling;
765
+ if (expression) {
766
+ childNode = expression;
767
+ }
768
+ }
769
+ return childNode;
770
+ } else {
771
+ childNode = childNode.prevSibling;
772
+ }
773
+ }
774
+ };
775
+ var getFunctionName = (node, state) => {
776
+ var _a;
777
+ if (node.name === "ArgList") {
778
+ const functionNode = node.prevSibling;
779
+ if (functionNode) {
780
+ return (0, import_vuu_codemirror4.getValue)(functionNode, state);
781
+ }
782
+ } else if (node.name === "OpenBrace") {
783
+ const maybeFunction = (_a = node.parent) == null ? void 0 : _a.prevSibling;
784
+ if ((maybeFunction == null ? void 0 : maybeFunction.name) === "Function") {
785
+ return (0, import_vuu_codemirror4.getValue)(maybeFunction, state);
786
+ }
787
+ }
788
+ };
789
+ var getRelationalOperator = (node, state) => {
790
+ if (node.name === "RelationalExpression") {
791
+ const lastNode = lastNamedChild(node);
792
+ if ((lastNode == null ? void 0 : lastNode.name) === "RelationalOperator") {
793
+ return (0, import_vuu_codemirror4.getValue)(lastNode, state);
794
+ }
795
+ } else {
796
+ const prevNode = node.prevSibling;
797
+ if ((prevNode == null ? void 0 : prevNode.name) === "RelationalOperator") {
798
+ return (0, import_vuu_codemirror4.getValue)(prevNode, state);
799
+ }
800
+ }
801
+ };
802
+ var getColumnName = (node, state) => {
803
+ var _a;
804
+ if (node.name === "RelationalExpression") {
805
+ if (((_a = node.firstChild) == null ? void 0 : _a.name) === "Column") {
806
+ return (0, import_vuu_codemirror4.getValue)(node.firstChild, state);
807
+ }
808
+ } else {
809
+ const prevNode = node.prevSibling;
810
+ if ((prevNode == null ? void 0 : prevNode.name) === "Column") {
811
+ return (0, import_vuu_codemirror4.getValue)(prevNode, state);
812
+ } else if ((prevNode == null ? void 0 : prevNode.name) === "RelationalOperator") {
813
+ return getColumnName(prevNode, state);
814
+ }
815
+ }
816
+ };
817
+ var makeSuggestions = async (context, suggestionProvider, suggestionType, optionalArgs = {}) => {
818
+ const options = await suggestionProvider.getSuggestions(
819
+ suggestionType,
820
+ optionalArgs
821
+ );
822
+ const { startsWith = "" } = optionalArgs;
823
+ return { from: context.pos - startsWith.length, options };
824
+ };
825
+ var handleConditionalExpression = (node, context, suggestionProvider, maybeComplete, onSubmit) => {
826
+ const lastChild = getLastChild(node, context);
827
+ console.log(`conditional expression last child ${lastChild == null ? void 0 : lastChild.name}`);
828
+ switch (lastChild == null ? void 0 : lastChild.name) {
829
+ case "If":
830
+ return makeSuggestions(context, suggestionProvider, "expression", {
831
+ prefix: "( "
832
+ });
833
+ case "OpenBrace":
834
+ return makeSuggestions(context, suggestionProvider, "expression");
835
+ case "Condition":
836
+ return makeSuggestions(context, suggestionProvider, "expression", {
837
+ prefix: ", "
838
+ });
839
+ case "CloseBrace":
840
+ if (maybeComplete) {
841
+ const options = [
842
+ {
843
+ apply: () => {
844
+ onSubmit == null ? void 0 : onSubmit();
845
+ },
846
+ label: "Save Expression",
847
+ boost: 10
848
+ }
849
+ ];
850
+ return { from: context.pos, options };
851
+ }
852
+ }
853
+ };
854
+ var promptToSave = (context, onSubmit) => {
855
+ const options = [
856
+ {
857
+ apply: () => {
858
+ onSubmit == null ? void 0 : onSubmit();
859
+ },
860
+ label: "Save Expression",
861
+ boost: 10
862
+ }
863
+ ];
864
+ return { from: context.pos, options };
865
+ };
866
+ var useColumnAutoComplete = (suggestionProvider, onSubmit) => {
867
+ const makeSuggestions2 = (0, import_react2.useCallback)(
868
+ async (context, suggestionType, optionalArgs = {}) => {
869
+ const options = await suggestionProvider.getSuggestions(
870
+ suggestionType,
871
+ optionalArgs
872
+ );
873
+ const { startsWith = "" } = optionalArgs;
874
+ return { from: context.pos - startsWith.length, options };
875
+ },
876
+ [suggestionProvider]
877
+ );
878
+ return (0, import_react2.useCallback)(
879
+ async (context) => {
880
+ var _a, _b;
881
+ const { state, pos } = context;
882
+ const word = (_a = context.matchBefore(/\w*/)) != null ? _a : {
883
+ from: 0,
884
+ to: 0,
885
+ text: void 0
886
+ };
887
+ const tree = (0, import_vuu_codemirror4.syntaxTree)(state);
888
+ const nodeBefore = tree.resolveInner(pos, -1);
889
+ const text = state.doc.toString();
890
+ const maybeComplete = isCompleteExpression(text);
891
+ console.log({ nodeBeforeName: nodeBefore.name });
892
+ switch (nodeBefore.name) {
893
+ case "If": {
894
+ console.log(`conditional expression If`);
895
+ return makeSuggestions2(context, "expression", { prefix: "( " });
896
+ }
897
+ case "Condition":
898
+ {
899
+ const lastChild = getLastChild(nodeBefore, context);
900
+ if ((lastChild == null ? void 0 : lastChild.name) === "Column") {
901
+ const prevChild = (0, import_vuu_codemirror4.getPreviousNode)(lastChild);
902
+ if ((prevChild == null ? void 0 : prevChild.name) !== "RelationalOperator") {
903
+ return makeSuggestions2(context, "condition-operator", {
904
+ columnName: (0, import_vuu_codemirror4.getValue)(lastChild, state)
905
+ });
906
+ }
907
+ console.log(
908
+ `Condition last child Column, prev child ${prevChild == null ? void 0 : prevChild.name}`
909
+ );
910
+ } else if ((lastChild == null ? void 0 : lastChild.name) === "RelationalOperator") {
911
+ return makeSuggestions2(context, "expression");
912
+ }
913
+ console.log(`condition last child ${lastChild == null ? void 0 : lastChild.name}`);
914
+ }
915
+ break;
916
+ case "ConditionalExpression":
917
+ return handleConditionalExpression(
918
+ nodeBefore,
919
+ context,
920
+ suggestionProvider
921
+ );
922
+ case "RelationalExpression":
923
+ {
924
+ if (isCompleteRelationalExpression(nodeBefore)) {
925
+ return {
926
+ from: context.pos,
927
+ options: import_vuu_codemirror4.booleanJoinSuggestions.concat({
928
+ label: ", <truthy expression>, <falsy expression>",
929
+ apply: ", "
930
+ })
931
+ };
932
+ } else {
933
+ const operator = getRelationalOperator(nodeBefore, state);
934
+ const columnName = getColumnName(nodeBefore, state);
935
+ if (!operator) {
936
+ const options = await suggestionProvider.getSuggestions(
937
+ "condition-operator",
938
+ {
939
+ columnName
940
+ }
941
+ );
942
+ return { from: context.pos, options };
943
+ } else {
944
+ return makeSuggestions2(context, "expression");
945
+ }
946
+ }
947
+ }
948
+ break;
949
+ case "RelationalOperator":
950
+ return makeSuggestions2(context, "expression");
951
+ case "String":
952
+ {
953
+ const operator = getRelationalOperator(
954
+ nodeBefore,
955
+ state
956
+ );
957
+ const columnName = getColumnName(nodeBefore, state);
958
+ const { from, to } = nodeBefore;
959
+ if (to - from === 2 && context.pos === from + 1) {
960
+ if (columnName && operator) {
961
+ return makeSuggestions2(context, "columnValue", {
962
+ columnName,
963
+ operator,
964
+ startsWith: word.text
965
+ });
966
+ }
967
+ } else if (to - from > 2 && context.pos === to) {
968
+ return makeSuggestions2(context, "expression", {
969
+ prefix: ", "
970
+ });
971
+ }
972
+ console.log(
973
+ `we have a string, column is ${columnName} ${from} ${to}`
974
+ );
975
+ }
976
+ break;
977
+ case "ArithmeticExpression":
978
+ {
979
+ const lastChild = getLastChild(nodeBefore, context);
980
+ if ((lastChild == null ? void 0 : lastChild.name) === "Column") {
981
+ return makeSuggestions2(context, "expression");
982
+ } else if (isOperator(lastChild)) {
983
+ const operator = lastChild.name;
984
+ return makeSuggestions2(context, "column", { operator });
985
+ }
986
+ }
987
+ break;
988
+ case "OpenBrace":
989
+ {
990
+ const functionName = getFunctionName(nodeBefore, state);
991
+ return makeSuggestions2(context, "expression", { functionName });
992
+ }
993
+ break;
994
+ case "ArgList": {
995
+ const functionName = getFunctionName(nodeBefore, state);
996
+ const lastArgument = getLastChild(nodeBefore, context);
997
+ const prefix = (lastArgument == null ? void 0 : lastArgument.name) === "OpenBrace" ? void 0 : ",";
998
+ let options = await suggestionProvider.getSuggestions("expression", {
999
+ functionName
1000
+ });
1001
+ options = prefix ? applyPrefix(options, ", ") : options;
1002
+ if ((lastArgument == null ? void 0 : lastArgument.name) !== "OpenBrace" && (lastArgument == null ? void 0 : lastArgument.name) !== "Comma") {
1003
+ options = [
1004
+ {
1005
+ apply: ") ",
1006
+ boost: 10,
1007
+ label: "Done - no more arguments"
1008
+ }
1009
+ ].concat(options);
1010
+ }
1011
+ return { from: context.pos, options };
1012
+ }
1013
+ case "Equal":
1014
+ if (text.trim() === "=") {
1015
+ return makeSuggestions2(context, "expression");
1016
+ }
1017
+ break;
1018
+ case "ParenthesizedExpression":
1019
+ case "ColumnDefinitionExpression":
1020
+ if (context.pos === 0) {
1021
+ return makeSuggestions2(context, "expression");
1022
+ } else {
1023
+ const lastChild = getLastChild(nodeBefore, context);
1024
+ if ((lastChild == null ? void 0 : lastChild.name) === "Column") {
1025
+ if (maybeComplete) {
1026
+ const options = [
1027
+ {
1028
+ apply: () => {
1029
+ onSubmit.current();
1030
+ },
1031
+ label: "Save Expression",
1032
+ boost: 10
1033
+ }
1034
+ ];
1035
+ const columnName = (0, import_vuu_codemirror4.getValue)(lastChild, state);
1036
+ const columnOptions = await suggestionProvider.getSuggestions("operator", {
1037
+ columnName
1038
+ });
1039
+ return {
1040
+ from: context.pos,
1041
+ options: options.concat(columnOptions)
1042
+ };
1043
+ }
1044
+ } else if ((lastChild == null ? void 0 : lastChild.name) === "CallExpression") {
1045
+ if (maybeComplete) {
1046
+ const options = [
1047
+ {
1048
+ apply: () => {
1049
+ onSubmit.current();
1050
+ },
1051
+ label: "Save Expression",
1052
+ boost: 10
1053
+ }
1054
+ ];
1055
+ return {
1056
+ from: context.pos,
1057
+ options
1058
+ };
1059
+ }
1060
+ } else if ((lastChild == null ? void 0 : lastChild.name) === "ArithmeticExpression") {
1061
+ if (maybeComplete) {
1062
+ let options = [
1063
+ {
1064
+ apply: () => {
1065
+ onSubmit.current();
1066
+ },
1067
+ label: "Save Expression",
1068
+ boost: 10
1069
+ }
1070
+ ];
1071
+ const lastExpressionChild = getLastChild(lastChild, context);
1072
+ if ((lastExpressionChild == null ? void 0 : lastExpressionChild.name) === "Column") {
1073
+ const columnName = (0, import_vuu_codemirror4.getValue)(lastExpressionChild, state);
1074
+ const suggestions = await suggestionProvider.getSuggestions(
1075
+ "operator",
1076
+ { columnName }
1077
+ );
1078
+ options = options.concat(suggestions);
1079
+ }
1080
+ return {
1081
+ from: context.pos,
1082
+ options
1083
+ };
1084
+ }
1085
+ } else if ((lastChild == null ? void 0 : lastChild.name) === "ConditionalExpression") {
1086
+ return handleConditionalExpression(
1087
+ lastChild,
1088
+ context,
1089
+ suggestionProvider,
1090
+ maybeComplete,
1091
+ onSubmit.current
1092
+ );
1093
+ }
1094
+ break;
1095
+ }
1096
+ case "Column":
1097
+ {
1098
+ const isPartialMatch = await suggestionProvider.isPartialMatch(
1099
+ "expression",
1100
+ void 0,
1101
+ word.text
1102
+ );
1103
+ if (isPartialMatch) {
1104
+ return makeSuggestions2(context, "expression", {
1105
+ startsWith: word.text
1106
+ });
1107
+ }
1108
+ }
1109
+ break;
1110
+ case "Comma":
1111
+ {
1112
+ const parentNode = (0, import_vuu_codemirror4.getNamedParentNode)(nodeBefore);
1113
+ if ((parentNode == null ? void 0 : parentNode.name) === "ConditionalExpression") {
1114
+ return makeSuggestions2(context, "expression");
1115
+ }
1116
+ }
1117
+ break;
1118
+ case "CloseBrace":
1119
+ {
1120
+ const parentNode = (0, import_vuu_codemirror4.getNamedParentNode)(nodeBefore);
1121
+ if ((parentNode == null ? void 0 : parentNode.name) === "ConditionalExpression") {
1122
+ return handleConditionalExpression(
1123
+ parentNode,
1124
+ context,
1125
+ suggestionProvider,
1126
+ maybeComplete,
1127
+ onSubmit.current
1128
+ );
1129
+ } else if ((parentNode == null ? void 0 : parentNode.name) === "ArgList") {
1130
+ if (maybeComplete) {
1131
+ return promptToSave(context, onSubmit.current);
1132
+ }
1133
+ }
1134
+ console.log(
1135
+ `does closebrace denote an ARgList or a parenthetised expression ? ${parentNode}`
1136
+ );
1137
+ }
1138
+ break;
1139
+ default: {
1140
+ if (((_b = nodeBefore == null ? void 0 : nodeBefore.prevSibling) == null ? void 0 : _b.name) === "FilterClause") {
1141
+ console.log("looks like we ight be a or|and operator");
1142
+ }
1143
+ }
1144
+ }
1145
+ },
1146
+ [makeSuggestions2, onSubmit, suggestionProvider]
1147
+ );
1148
+ };
1149
+
1150
+ // src/column-expression-input/useColumnExpressionEditor.ts
1151
+ var getView = (ref) => {
1152
+ if (ref.current == void 0) {
1153
+ throw Error("EditorView not defined");
1154
+ }
1155
+ return ref.current;
1156
+ };
1157
+ var getOptionClass = () => {
1158
+ return "vuuSuggestion";
1159
+ };
1160
+ var noop = () => console.log("noooop");
1161
+ var hasExpressionType = (completion) => "expressionType" in completion;
1162
+ var injectOptionContent = (completion) => {
1163
+ if (hasExpressionType(completion)) {
1164
+ const div = (0, import_vuu_utils4.createEl)("div", "expression-type-container");
1165
+ const span = (0, import_vuu_utils4.createEl)("span", "expression-type", completion.expressionType);
1166
+ div.appendChild(span);
1167
+ return div;
1168
+ } else {
1169
+ return null;
1170
+ }
1171
+ };
1172
+ var useColumnExpressionEditor = ({
1173
+ onChange,
1174
+ onSubmitExpression,
1175
+ suggestionProvider
1176
+ }) => {
1177
+ const editorRef = (0, import_react3.useRef)(null);
1178
+ const onSubmit = (0, import_react3.useRef)(noop);
1179
+ const viewRef = (0, import_react3.useRef)();
1180
+ const completionFn = useColumnAutoComplete(suggestionProvider, onSubmit);
1181
+ const [createState, clearInput] = (0, import_react3.useMemo)(() => {
1182
+ const parseExpression = () => {
1183
+ const view = getView(viewRef);
1184
+ const source = view.state.doc.toString();
1185
+ const tree = (0, import_vuu_codemirror5.ensureSyntaxTree)(view.state, view.state.doc.length, 5e3);
1186
+ if (tree) {
1187
+ const expression = walkTree(tree, source);
1188
+ return [source, expression];
1189
+ } else {
1190
+ return ["", void 0];
1191
+ }
1192
+ };
1193
+ const clearInput2 = () => {
1194
+ getView(viewRef).setState(createState2());
1195
+ };
1196
+ const submitExpressionAndClearInput = () => {
1197
+ const [source, expression] = parseExpression();
1198
+ onSubmitExpression == null ? void 0 : onSubmitExpression(source, expression);
1199
+ clearInput2();
1200
+ };
1201
+ const submitFilter = (key) => {
1202
+ return import_vuu_codemirror5.keymap.of([
1203
+ {
1204
+ key,
1205
+ run() {
1206
+ submitExpressionAndClearInput();
1207
+ return true;
1208
+ }
1209
+ }
1210
+ ]);
1211
+ };
1212
+ const showSuggestions = (key) => {
1213
+ return import_vuu_codemirror5.keymap.of([
1214
+ {
1215
+ key,
1216
+ run() {
1217
+ (0, import_vuu_codemirror5.startCompletion)(getView(viewRef));
1218
+ return true;
1219
+ }
1220
+ }
1221
+ ]);
1222
+ };
1223
+ const createState2 = () => import_vuu_codemirror5.EditorState.create({
1224
+ doc: "",
1225
+ extensions: [
1226
+ import_vuu_codemirror5.minimalSetup,
1227
+ (0, import_vuu_codemirror5.autocompletion)({
1228
+ addToOptions: [
1229
+ {
1230
+ render: injectOptionContent,
1231
+ position: 70
1232
+ }
1233
+ ],
1234
+ override: [completionFn],
1235
+ optionClass: getOptionClass
1236
+ }),
1237
+ columnExpressionLanguageSupport(),
1238
+ import_vuu_codemirror5.keymap.of(import_vuu_codemirror5.defaultKeymap),
1239
+ submitFilter("Ctrl-Enter"),
1240
+ showSuggestions("ArrowDown"),
1241
+ import_vuu_codemirror5.EditorView.updateListener.of((v) => {
1242
+ const view = getView(viewRef);
1243
+ if (v.docChanged) {
1244
+ (0, import_vuu_codemirror5.startCompletion)(view);
1245
+ const source = view.state.doc.toString();
1246
+ onChange == null ? void 0 : onChange(source, void 0);
1247
+ }
1248
+ }),
1249
+ // Enforces single line view
1250
+ // EditorState.transactionFilter.of((tr) =>
1251
+ // tr.newDoc.lines > 1 ? [] : tr
1252
+ // ),
1253
+ vuuTheme,
1254
+ vuuHighlighting
1255
+ ]
1256
+ });
1257
+ onSubmit.current = () => {
1258
+ submitExpressionAndClearInput();
1259
+ setTimeout(() => {
1260
+ getView(viewRef).focus();
1261
+ }, 100);
1262
+ };
1263
+ return [createState2, clearInput2];
1264
+ }, [completionFn, onChange, onSubmitExpression]);
1265
+ (0, import_react3.useEffect)(() => {
1266
+ if (!editorRef.current) {
1267
+ throw Error("editor not in dom");
1268
+ }
1269
+ viewRef.current = new import_vuu_codemirror5.EditorView({
1270
+ state: createState(),
1271
+ parent: editorRef.current
1272
+ });
1273
+ return () => {
1274
+ var _a;
1275
+ (_a = viewRef.current) == null ? void 0 : _a.destroy();
1276
+ };
1277
+ }, [completionFn, createState]);
1278
+ return { editorRef, clearInput };
1279
+ };
1280
+
1281
+ // src/column-expression-input/ColumnExpressionInput.tsx
1282
+ var import_jsx_runtime2 = require("react/jsx-runtime");
1283
+ var classBase2 = "vuuColumnExpressionInput";
1284
+ var ColumnExpressionInput = ({
1285
+ onChange,
1286
+ onSubmitExpression,
1287
+ suggestionProvider
1288
+ }) => {
1289
+ const { editorRef } = useColumnExpressionEditor({
1290
+ onChange,
1291
+ onSubmitExpression,
1292
+ suggestionProvider
1293
+ });
1294
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: `${classBase2}`, ref: editorRef });
1295
+ };
1296
+
1297
+ // src/column-expression-input/useColumnExpressionSuggestionProvider.ts
1298
+ var import_vuu_codemirror6 = require("@vuu-ui/vuu-codemirror");
1299
+ var import_vuu_data = require("@vuu-ui/vuu-data");
1300
+ var import_vuu_utils6 = require("@vuu-ui/vuu-utils");
1301
+ var import_react4 = require("react");
1302
+
1303
+ // src/column-expression-input/column-function-descriptors.ts
1304
+ var columnFunctionDescriptors = [
1305
+ /**
1306
+ * concatenate()
1307
+ */
1308
+ {
1309
+ accepts: "string",
1310
+ description: "Returns multiple string values as a single joined string. Arguments may be string literal values, string columns or other string expressions. Non string arguments may also be included, these will be converted to strings.",
1311
+ example: {
1312
+ expression: 'concatenate("example", "-test")',
1313
+ result: '"example-test"'
1314
+ },
1315
+ name: "concatenate",
1316
+ params: {
1317
+ description: "( string, string, [ string* ] )"
1318
+ },
1319
+ type: "string"
1320
+ },
1321
+ /**
1322
+ * contains()
1323
+ */
1324
+ {
1325
+ accepts: ["string", "string"],
1326
+ description: "Tests a string value to determine whether it contains a given substring. Accepts two arguments: source text and target substring. Returns true if <source text> contains one or more occurrences of <target subscring>",
1327
+ example: {
1328
+ expression: 'contains("Royal Bank of Scotland", "bank")',
1329
+ result: "true"
1330
+ },
1331
+ name: "contains",
1332
+ params: {
1333
+ description: "( string )"
1334
+ },
1335
+ type: "boolean"
1336
+ },
1337
+ /**
1338
+ * left()
1339
+ */
1340
+ {
1341
+ accepts: ["string", "number"],
1342
+ description: "Returns the leftmost <number> characters from <string>. First argument may be a string literal, string column or other string expression.",
1343
+ example: {
1344
+ expression: 'left("USD Benchmark Report", 3)',
1345
+ result: '"USD"'
1346
+ },
1347
+ name: "left",
1348
+ params: {
1349
+ count: 2,
1350
+ description: "( string, number )"
1351
+ },
1352
+ type: "string"
1353
+ },
1354
+ /**
1355
+ * len()
1356
+ */
1357
+ {
1358
+ accepts: "string",
1359
+ description: "Returns the number of characters in <string>. Argument may be a string literal, string column or other string expression.",
1360
+ example: {
1361
+ expression: 'len("example")',
1362
+ result: "7"
1363
+ },
1364
+ name: "len",
1365
+ params: {
1366
+ description: "(string)"
1367
+ },
1368
+ type: "number"
1369
+ },
1370
+ /**
1371
+ * lower()
1372
+ */
1373
+ {
1374
+ accepts: "string",
1375
+ description: "Convert a string value to lowercase. Argument may be a string column or other string expression.",
1376
+ example: {
1377
+ expression: 'lower("examPLE")',
1378
+ result: '"example"'
1379
+ },
1380
+ name: "lower",
1381
+ params: {
1382
+ description: "( string )"
1383
+ },
1384
+ type: "string"
1385
+ },
1386
+ /**
1387
+ * upper()
1388
+ */
1389
+ {
1390
+ accepts: "string",
1391
+ description: "Convert a string value to uppercase. Argument may be a string column or other string expression.",
1392
+ example: {
1393
+ expression: 'upper("example")',
1394
+ result: '"EXAMPLE"'
1395
+ },
1396
+ name: "upper",
1397
+ params: {
1398
+ description: "( string )"
1399
+ },
1400
+ type: "string"
1401
+ },
1402
+ /**
1403
+ * right()
1404
+ */
1405
+ {
1406
+ accepts: ["string", "number"],
1407
+ description: "Returns the rightmost <number> characters from <string>. First argument may be a string literal, string column or other string expression.",
1408
+ example: {
1409
+ expression: "blah",
1410
+ result: "blah"
1411
+ },
1412
+ name: "right",
1413
+ params: {
1414
+ description: "( string )"
1415
+ },
1416
+ type: "string"
1417
+ },
1418
+ /**
1419
+ * replace()
1420
+ */
1421
+ {
1422
+ accepts: ["string", "string", "string"],
1423
+ description: "Replace characters within a string. Accepts three arguments: source text, text to replace and replacement text. Returns a copy of <source text> with any occurrences of <text to replace> replaced by <replacement text>",
1424
+ example: {
1425
+ expression: "blah",
1426
+ result: "blah"
1427
+ },
1428
+ name: "replace",
1429
+ params: {
1430
+ description: "( string )"
1431
+ },
1432
+ type: "string"
1433
+ },
1434
+ /**
1435
+ * text()
1436
+ */
1437
+ {
1438
+ accepts: "number",
1439
+ description: "Converts a number to a string.",
1440
+ example: {
1441
+ expression: "blah",
1442
+ result: "blah"
1443
+ },
1444
+ name: "text",
1445
+ params: {
1446
+ description: "( string )"
1447
+ },
1448
+ type: "string"
1449
+ },
1450
+ /**
1451
+ * starts()
1452
+ */
1453
+ {
1454
+ accepts: "string",
1455
+ description: "Tests a string value to determine whether it starts with a given substring. Accepts two arguments: source text and target substring. Returns true if <source text> starts with <target subscring>.",
1456
+ example: {
1457
+ expression: "blah",
1458
+ result: "blah"
1459
+ },
1460
+ name: "starts",
1461
+ params: {
1462
+ description: "( string )"
1463
+ },
1464
+ type: "boolean"
1465
+ },
1466
+ /**
1467
+ * starts()
1468
+ */
1469
+ {
1470
+ accepts: "string",
1471
+ description: "Tests a string value to determine whether it ends with a given substring. Accepts two arguments: source text and target substring. Returns true if <source text> ends with <target subscring>.",
1472
+ example: {
1473
+ expression: "blah",
1474
+ result: "blah"
1475
+ },
1476
+ name: "ends",
1477
+ params: {
1478
+ description: "( string )"
1479
+ },
1480
+ type: "boolean"
1481
+ },
1482
+ {
1483
+ accepts: "number",
1484
+ description: "blah",
1485
+ example: {
1486
+ expression: "blah",
1487
+ result: "blah"
1488
+ },
1489
+ name: "min",
1490
+ params: {
1491
+ description: "( string )"
1492
+ },
1493
+ type: "number"
1494
+ },
1495
+ {
1496
+ accepts: "number",
1497
+ description: "blah",
1498
+ example: {
1499
+ expression: "blah",
1500
+ result: "blah"
1501
+ },
1502
+ name: "max",
1503
+ params: {
1504
+ description: "( string )"
1505
+ },
1506
+ type: "number"
1507
+ },
1508
+ {
1509
+ accepts: "number",
1510
+ description: "blah",
1511
+ example: {
1512
+ expression: "blah",
1513
+ result: "blah"
1514
+ },
1515
+ name: "sum",
1516
+ params: {
1517
+ description: "( string )"
1518
+ },
1519
+ type: "number"
1520
+ },
1521
+ {
1522
+ accepts: "number",
1523
+ description: "blah",
1524
+ example: {
1525
+ expression: "blah",
1526
+ result: "blah"
1527
+ },
1528
+ name: "round",
1529
+ params: {
1530
+ description: "( string )"
1531
+ },
1532
+ type: "number"
1533
+ },
1534
+ {
1535
+ accepts: "any",
1536
+ description: "blah",
1537
+ example: {
1538
+ expression: "blah",
1539
+ result: "blah"
1540
+ },
1541
+ name: "or",
1542
+ params: {
1543
+ description: "( string )"
1544
+ },
1545
+ type: "boolean"
1546
+ },
1547
+ {
1548
+ accepts: "any",
1549
+ description: "blah",
1550
+ example: {
1551
+ expression: "blah",
1552
+ result: "blah"
1553
+ },
1554
+ name: "and",
1555
+ params: {
1556
+ description: "( string )"
1557
+ },
1558
+ type: "boolean"
1559
+ },
1560
+ {
1561
+ accepts: "any",
1562
+ description: "Return one of two possible result values, depending on the evaluation of a filter expression. If <filterExpression> resolves to true, result is <expression1>, otherwise <expression2>. ",
1563
+ example: {
1564
+ expression: "blah",
1565
+ result: "blah"
1566
+ },
1567
+ name: "if",
1568
+ params: {
1569
+ description: "( filterExpression, expression1, expression 2)"
1570
+ },
1571
+ type: "variable"
1572
+ }
1573
+ ];
1574
+
1575
+ // src/column-expression-input/functionDocInfo.ts
1576
+ var import_vuu_utils5 = require("@vuu-ui/vuu-utils");
1577
+ var functionDocInfo = ({
1578
+ name,
1579
+ description,
1580
+ example,
1581
+ params,
1582
+ type
1583
+ }) => {
1584
+ const rootElement = (0, import_vuu_utils5.createEl)("div", "vuuFunctionDoc");
1585
+ const headingElement = (0, import_vuu_utils5.createEl)("div", "function-heading");
1586
+ const nameElement = (0, import_vuu_utils5.createEl)("span", "function-name", name);
1587
+ const paramElement = (0, import_vuu_utils5.createEl)("span", "param-list", params.description);
1588
+ const typeElement = (0, import_vuu_utils5.createEl)("span", "function-type", type);
1589
+ headingElement.appendChild(nameElement);
1590
+ headingElement.appendChild(paramElement);
1591
+ headingElement.appendChild(typeElement);
1592
+ const child2 = (0, import_vuu_utils5.createEl)("p", void 0, description);
1593
+ rootElement.appendChild(headingElement);
1594
+ rootElement.appendChild(child2);
1595
+ if (example) {
1596
+ const exampleElement = (0, import_vuu_utils5.createEl)("div", "example-container", "Example:");
1597
+ const expressionElement = (0, import_vuu_utils5.createEl)(
1598
+ "div",
1599
+ "example-expression",
1600
+ example.expression
1601
+ );
1602
+ const resultElement = (0, import_vuu_utils5.createEl)("div", "example-result", example.result);
1603
+ exampleElement.appendChild(expressionElement);
1604
+ exampleElement.appendChild(resultElement);
1605
+ rootElement.appendChild(exampleElement);
1606
+ }
1607
+ return rootElement;
1608
+ };
1609
+
1610
+ // src/column-expression-input/useColumnExpressionSuggestionProvider.ts
1611
+ var NO_OPERATORS = [];
1612
+ var withApplySpace = (suggestions) => suggestions.map((suggestion) => {
1613
+ var _a;
1614
+ return {
1615
+ ...suggestion,
1616
+ apply: ((_a = suggestion.apply) != null ? _a : suggestion.label) + " "
1617
+ };
1618
+ });
1619
+ var getValidColumns = (columns, { functionName, operator }) => {
1620
+ if (operator) {
1621
+ return columns.filter(import_vuu_utils6.isNumericColumn);
1622
+ } else if (functionName) {
1623
+ const fn = columnFunctionDescriptors.find((f) => f.name === functionName);
1624
+ if (fn) {
1625
+ switch (fn.accepts) {
1626
+ case "string":
1627
+ return columns.filter(import_vuu_utils6.isTextColumn);
1628
+ case "number":
1629
+ return columns.filter(import_vuu_utils6.isNumericColumn);
1630
+ default:
1631
+ return columns;
1632
+ }
1633
+ }
1634
+ }
1635
+ return columns;
1636
+ };
1637
+ var getColumns = (columns, options) => {
1638
+ const validColumns = getValidColumns(columns, options);
1639
+ return validColumns.map((column) => {
1640
+ var _a;
1641
+ const label = (_a = column.label) != null ? _a : column.name;
1642
+ return {
1643
+ apply: options.prefix ? `${options.prefix}${label}` : label,
1644
+ label,
1645
+ boost: 5,
1646
+ type: "column",
1647
+ expressionType: column.serverDataType
1648
+ };
1649
+ });
1650
+ };
1651
+ var arithmeticOperators = [
1652
+ { apply: "* ", boost: 2, label: "*", type: "operator" },
1653
+ { apply: "/ ", boost: 2, label: "/", type: "operator" },
1654
+ { apply: "+ ", boost: 2, label: "+", type: "operator" },
1655
+ { apply: "- ", boost: 2, label: "-", type: "operator" }
1656
+ ];
1657
+ var getOperators = (column) => {
1658
+ if (column === void 0 || (0, import_vuu_utils6.isNumericColumn)(column)) {
1659
+ return arithmeticOperators;
1660
+ } else {
1661
+ return NO_OPERATORS;
1662
+ }
1663
+ };
1664
+ var getConditionOperators = (column) => {
1665
+ switch (column.serverDataType) {
1666
+ case "string":
1667
+ case "char":
1668
+ return withApplySpace(
1669
+ import_vuu_codemirror6.stringOperators
1670
+ /*, startsWith*/
1671
+ );
1672
+ case "int":
1673
+ case "long":
1674
+ case "double":
1675
+ return withApplySpace(import_vuu_codemirror6.numericOperators);
1676
+ }
1677
+ };
1678
+ var toFunctionCompletion = (functionDescriptor) => ({
1679
+ apply: `${functionDescriptor.name}( `,
1680
+ boost: 2,
1681
+ expressionType: functionDescriptor.type,
1682
+ info: () => functionDocInfo(functionDescriptor),
1683
+ label: functionDescriptor.name,
1684
+ type: "function"
1685
+ });
1686
+ var getAcceptedTypes = (fn) => {
1687
+ if (fn) {
1688
+ if (typeof fn.accepts === "string") {
1689
+ return fn.accepts;
1690
+ } else if (Array.isArray(fn.accepts)) {
1691
+ if (fn.accepts.every((s) => s === "string")) {
1692
+ return "string";
1693
+ } else {
1694
+ return "any";
1695
+ }
1696
+ }
1697
+ }
1698
+ return "any";
1699
+ };
1700
+ var functions = columnFunctionDescriptors.map(toFunctionCompletion);
1701
+ var getFunctions = ({ functionName }) => {
1702
+ if (functionName) {
1703
+ const fn = columnFunctionDescriptors.find((f) => f.name === functionName);
1704
+ const acceptedTypes = getAcceptedTypes(fn);
1705
+ if (fn) {
1706
+ switch (acceptedTypes) {
1707
+ case "string":
1708
+ return columnFunctionDescriptors.filter((f) => f.type === "string" || f.type === "variable").map(toFunctionCompletion);
1709
+ case "number":
1710
+ return columnFunctionDescriptors.filter((f) => f.type === "number" || f.type === "variable").map(toFunctionCompletion);
1711
+ default:
1712
+ }
1713
+ }
1714
+ }
1715
+ return functions;
1716
+ };
1717
+ var NONE = {};
1718
+ var useColumnExpressionSuggestionProvider = ({
1719
+ columns,
1720
+ table
1721
+ }) => {
1722
+ const findColumn = (0, import_react4.useCallback)(
1723
+ (name) => name ? columns.find((col) => col.name === name) : void 0,
1724
+ [columns]
1725
+ );
1726
+ const latestSuggestionsRef = (0, import_react4.useRef)();
1727
+ const getTypeaheadSuggestions = (0, import_vuu_data.useTypeaheadSuggestions)();
1728
+ const getSuggestions = (0, import_react4.useCallback)(
1729
+ async (suggestionType, options = NONE) => {
1730
+ const { columnName, functionName, operator, prefix } = options;
1731
+ switch (suggestionType) {
1732
+ case "expression": {
1733
+ const suggestions = await withApplySpace(
1734
+ getColumns(columns, { functionName, prefix })
1735
+ ).concat(getFunctions(options));
1736
+ return latestSuggestionsRef.current = suggestions;
1737
+ }
1738
+ case "column": {
1739
+ const suggestions = await getColumns(columns, options);
1740
+ return latestSuggestionsRef.current = withApplySpace(suggestions);
1741
+ }
1742
+ case "operator": {
1743
+ const suggestions = await getOperators(findColumn(columnName));
1744
+ return latestSuggestionsRef.current = withApplySpace(suggestions);
1745
+ }
1746
+ case "relational-operator": {
1747
+ const suggestions = await (0, import_vuu_codemirror6.getRelationalOperators)(
1748
+ findColumn(columnName)
1749
+ );
1750
+ return latestSuggestionsRef.current = withApplySpace(suggestions);
1751
+ }
1752
+ case "condition-operator":
1753
+ {
1754
+ const column = findColumn(columnName);
1755
+ if (column) {
1756
+ const suggestions = await getConditionOperators(column);
1757
+ if (suggestions) {
1758
+ return latestSuggestionsRef.current = withApplySpace(suggestions);
1759
+ }
1760
+ }
1761
+ }
1762
+ break;
1763
+ case "columnValue":
1764
+ if (columnName && operator) {
1765
+ const params = (0, import_vuu_data.getTypeaheadParams)(
1766
+ table,
1767
+ columnName
1768
+ /*, startsWith*/
1769
+ );
1770
+ const suggestions = await getTypeaheadSuggestions(params);
1771
+ latestSuggestionsRef.current = (0, import_vuu_codemirror6.toSuggestions)(suggestions, {
1772
+ suffix: ""
1773
+ });
1774
+ latestSuggestionsRef.current.forEach((suggestion) => {
1775
+ suggestion.apply = (view, completion, from) => {
1776
+ const annotation = new import_vuu_codemirror6.AnnotationType();
1777
+ const cursorPos = from + completion.label.length + 1;
1778
+ view.dispatch({
1779
+ changes: { from, insert: completion.label },
1780
+ selection: { anchor: cursorPos, head: cursorPos },
1781
+ annotations: annotation.of(completion)
1782
+ });
1783
+ };
1784
+ });
1785
+ return latestSuggestionsRef.current;
1786
+ }
1787
+ break;
1788
+ }
1789
+ return [];
1790
+ },
1791
+ [columns, findColumn, getTypeaheadSuggestions, table]
1792
+ );
1793
+ const isPartialMatch = (0, import_react4.useCallback)(
1794
+ async (valueType, columnName, pattern) => {
1795
+ const { current: latestSuggestions } = latestSuggestionsRef;
1796
+ let maybe = false;
1797
+ const suggestions = latestSuggestions || await getSuggestions(valueType, { columnName });
1798
+ if (pattern && suggestions) {
1799
+ for (const option of suggestions) {
1800
+ if (option.label === pattern) {
1801
+ return false;
1802
+ } else if (option.label.startsWith(pattern)) {
1803
+ maybe = true;
1804
+ }
1805
+ }
1806
+ }
1807
+ return maybe;
1808
+ },
1809
+ [getSuggestions]
1810
+ );
1811
+ return {
1812
+ getSuggestions,
1813
+ isPartialMatch
1814
+ };
1815
+ };
1816
+
1817
+ // src/datagrid-configuration-ui/settings-panel/DatagridSettingsPanel.tsx
1818
+ var import_core7 = require("@salt-ds/core");
1819
+ var import_classnames5 = __toESM(require("classnames"), 1);
1820
+ var import_react12 = require("react");
1821
+
1822
+ // src/datagrid-configuration-ui/column-picker/ColumnPicker.tsx
1823
+ var import_salt_lab2 = require("@heswell/salt-lab");
1824
+ var import_core = require("@salt-ds/core");
1825
+ var import_react5 = require("react");
1826
+
1827
+ // src/datagrid-configuration-ui/column-picker/ColumnListItem.tsx
1828
+ var import_salt_lab = require("@heswell/salt-lab");
1829
+ var import_classnames2 = __toESM(require("classnames"), 1);
1830
+ var import_jsx_runtime3 = require("react/jsx-runtime");
1831
+ var classBase3 = "vuuColumnListItem";
1832
+ var ColumnListItem = ({
1833
+ className: classNameProp,
1834
+ item,
1835
+ label,
1836
+ style: styleProp,
1837
+ ...restProps
1838
+ }) => {
1839
+ const className = (0, import_classnames2.default)(classBase3, classNameProp, {
1840
+ [`${classBase3}-calculated`]: item == null ? void 0 : item.expression,
1841
+ [`${classBase3}-hidden`]: item == null ? void 0 : item.hidden
1842
+ });
1843
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_salt_lab.ListItem, { className, ...restProps, children: [
1844
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: `${classBase3}-iconType` }),
1845
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("label", { className: `${classBase3}-label`, children: label }),
1846
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: `${classBase3}-iconHidden` })
1847
+ ] });
1848
+ };
1849
+
1850
+ // src/datagrid-configuration-ui/column-picker/ColumnPicker.tsx
1851
+ var import_jsx_runtime4 = require("react/jsx-runtime");
1852
+ var classBase4 = "vuuColumnPicker";
1853
+ var removeSelectedColumns = (availableColumns, selectedColumns) => {
1854
+ return availableColumns.filter(
1855
+ (column) => selectedColumns.find((col) => col.name === column.name) == null
1856
+ );
1857
+ };
1858
+ var ColumnPicker = ({
1859
+ availableColumns,
1860
+ id: idProp,
1861
+ dispatchColumnAction: dispatch,
1862
+ onAddCalculatedColumnClick,
1863
+ onSelectionChange,
1864
+ chosenColumns,
1865
+ selectedColumn
1866
+ }) => {
1867
+ const [selected1, setSelected1] = (0, import_react5.useState)([]);
1868
+ const id = (0, import_core.useIdMemo)(idProp);
1869
+ const unusedColumns = removeSelectedColumns(availableColumns, chosenColumns);
1870
+ const addColumn2 = (0, import_react5.useCallback)(() => {
1871
+ if (selected1.length > 0) {
1872
+ setSelected1([]);
1873
+ dispatch({ type: "addColumn", columns: selected1 });
1874
+ }
1875
+ }, [dispatch, selected1]);
1876
+ const removeColumn2 = (0, import_react5.useCallback)(
1877
+ () => selectedColumn && dispatch({ type: "removeColumn", column: selectedColumn }),
1878
+ [selectedColumn, dispatch]
1879
+ );
1880
+ const moveColumnUp = (0, import_react5.useCallback)(
1881
+ () => selectedColumn && dispatch({ type: "moveColumn", column: selectedColumn, moveBy: -1 }),
1882
+ [dispatch, selectedColumn]
1883
+ );
1884
+ const moveColumnDown = (0, import_react5.useCallback)(
1885
+ () => selectedColumn && dispatch({ type: "moveColumn", column: selectedColumn, moveBy: 1 }),
1886
+ [dispatch, selectedColumn]
1887
+ );
1888
+ const handleSelectionChange1 = (0, import_react5.useCallback)(
1889
+ (evt, selected) => setSelected1(selected),
1890
+ []
1891
+ );
1892
+ const handleSelectionChange2 = (0, import_react5.useCallback)(
1893
+ (evt, selected) => onSelectionChange == null ? void 0 : onSelectionChange(selected),
1894
+ [onSelectionChange]
1895
+ );
1896
+ const handleDrop = (0, import_react5.useCallback)(
1897
+ (moveFrom, moveTo) => {
1898
+ dispatch({ type: "moveColumn", moveFrom, moveTo });
1899
+ },
1900
+ [dispatch]
1901
+ );
1902
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: classBase4, id, children: [
1903
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: `${classBase4}-listColumn`, children: [
1904
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("label", { htmlFor: `available-${id}`, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_core.Text, { as: "h4", children: "Available Columns" }) }),
1905
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1906
+ "div",
1907
+ {
1908
+ className: `${classBase4}-listContainer`,
1909
+ style: { flex: 1, overflow: "hidden" },
1910
+ children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1911
+ import_salt_lab2.List,
1912
+ {
1913
+ borderless: true,
1914
+ checkable: false,
1915
+ height: "100%",
1916
+ id: `available-${id}`,
1917
+ itemHeight: 24,
1918
+ itemToString: (item) => item.name,
1919
+ onSelectionChange: handleSelectionChange1,
1920
+ selected: selected1,
1921
+ selectionStrategy: "extended",
1922
+ source: unusedColumns
1923
+ }
1924
+ )
1925
+ }
1926
+ ),
1927
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1928
+ "div",
1929
+ {
1930
+ style: {
1931
+ display: "flex",
1932
+ alignItems: "center",
1933
+ flex: "0 0 32px",
1934
+ marginTop: "var(--salt-size-basis-unit)"
1935
+ },
1936
+ children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_core.Button, { onClick: addColumn2, disabled: selected1.length === 0, children: [
1937
+ "Show",
1938
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { "data-icon": "arrow-thin-right", style: { marginLeft: 8 } })
1939
+ ] })
1940
+ }
1941
+ )
1942
+ ] }),
1943
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: `${classBase4}-listColumn`, children: [
1944
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("label", { htmlFor: `selected-${id}`, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_core.Text, { as: "h4", children: "Included Columns" }) }),
1945
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1946
+ "div",
1947
+ {
1948
+ className: `${classBase4}-listContainer`,
1949
+ style: { flex: 1, overflow: "hidden" },
1950
+ children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1951
+ import_salt_lab2.List,
1952
+ {
1953
+ ListItem: ColumnListItem,
1954
+ allowDragDrop: true,
1955
+ borderless: true,
1956
+ height: "100%",
1957
+ id: `selected-${id}`,
1958
+ itemHeight: 24,
1959
+ itemToString: (item) => item.name,
1960
+ onMoveListItem: handleDrop,
1961
+ onSelectionChange: handleSelectionChange2,
1962
+ selected: selectedColumn,
1963
+ style: { flex: 1 },
1964
+ source: chosenColumns
1965
+ }
1966
+ )
1967
+ }
1968
+ ),
1969
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
1970
+ "div",
1971
+ {
1972
+ style: {
1973
+ alignItems: "center",
1974
+ flex: "0 0 32px",
1975
+ display: "flex",
1976
+ gap: 6,
1977
+ marginTop: "var(--salt-size-basis-unit)"
1978
+ },
1979
+ children: [
1980
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_core.Button, { onClick: removeColumn2, disabled: selectedColumn === null, children: [
1981
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { "data-icon": "arrow-thin-left", style: { marginRight: 8 } }),
1982
+ "Hide"
1983
+ ] }),
1984
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1985
+ import_core.Button,
1986
+ {
1987
+ "aria-label": "Move column up",
1988
+ onClick: moveColumnUp,
1989
+ disabled: selectedColumn === null || (chosenColumns == null ? void 0 : chosenColumns.indexOf(selectedColumn)) === 0,
1990
+ style: { width: 28 },
1991
+ children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { "data-icon": "arrow-thin-up" })
1992
+ }
1993
+ ),
1994
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1995
+ import_core.Button,
1996
+ {
1997
+ "aria-label": "Move column down",
1998
+ onClick: moveColumnDown,
1999
+ disabled: selectedColumn === null || chosenColumns.indexOf(selectedColumn) === chosenColumns.length - 1,
2000
+ style: { width: 28 },
2001
+ children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { "data-icon": "arrow-thin-down" })
2002
+ }
2003
+ ),
2004
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
2005
+ import_core.Button,
2006
+ {
2007
+ "aria-label": "Add calculated column",
2008
+ className: `${classBase4}-addCalculatedColumn`,
2009
+ onClick: onAddCalculatedColumnClick,
2010
+ variant: "primary",
2011
+ children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { "data-icon": "add" })
2012
+ }
2013
+ )
2014
+ ]
2015
+ }
2016
+ )
2017
+ ] })
2018
+ ] });
2019
+ };
2020
+
2021
+ // src/datagrid-configuration-ui/column-settings-panel/ColumnSettingsPanel.tsx
2022
+ var import_vuu_layout = require("@vuu-ui/vuu-layout");
2023
+ var import_salt_lab5 = require("@heswell/salt-lab");
2024
+ var import_core4 = require("@salt-ds/core");
2025
+ var import_classnames4 = __toESM(require("classnames"), 1);
2026
+ var import_react8 = require("react");
2027
+
2028
+ // src/datagrid-configuration-ui/column-type-panel/ColumnTypePanel.tsx
2029
+ var import_vuu_utils7 = require("@vuu-ui/vuu-utils");
2030
+ var import_salt_lab4 = require("@heswell/salt-lab");
2031
+ var import_core3 = require("@salt-ds/core");
2032
+ var import_classnames3 = __toESM(require("classnames"), 1);
2033
+ var import_react7 = require("react");
2034
+
2035
+ // src/datagrid-configuration-ui/column-type-panel/NumericColumnPanel.tsx
2036
+ var import_salt_lab3 = require("@heswell/salt-lab");
2037
+ var import_core2 = require("@salt-ds/core");
2038
+ var import_react6 = require("react");
2039
+ var import_jsx_runtime5 = require("react/jsx-runtime");
2040
+ var defaultValues = {
2041
+ alignOnDecimals: false,
2042
+ decimals: 4,
2043
+ zeroPad: false
2044
+ };
2045
+ var getColumnValues = (columnType, gridDefaultValues) => {
2046
+ const columnValue = typeof columnType === "object" && columnType.formatting ? columnType.formatting : {};
2047
+ const properties = ["alignOnDecimals", "decimals", "zeroPad"];
2048
+ return properties.reduce((configValues, property) => {
2049
+ if (columnValue[property] !== void 0) {
2050
+ return {
2051
+ ...configValues,
2052
+ [property]: columnValue[property]
2053
+ };
2054
+ } else if ((gridDefaultValues == null ? void 0 : gridDefaultValues[property]) !== void 0) {
2055
+ return {
2056
+ ...configValues,
2057
+ [property]: gridDefaultValues[property]
2058
+ };
2059
+ }
2060
+ return configValues;
2061
+ }, defaultValues);
2062
+ };
2063
+ var NumericColumnPanel = ({
2064
+ column,
2065
+ dispatchColumnAction
2066
+ }) => {
2067
+ const { decimals, alignOnDecimals, zeroPad } = getColumnValues(column == null ? void 0 : column.type);
2068
+ const dispatchUpdate = (0, import_react6.useCallback)(
2069
+ (values) => dispatchColumnAction({
2070
+ type: "updateColumnTypeFormatting",
2071
+ column,
2072
+ ...values
2073
+ }),
2074
+ [column, dispatchColumnAction]
2075
+ );
2076
+ const handleChangeDecimals = (0, import_react6.useCallback)(
2077
+ (value) => dispatchUpdate({ decimals: parseInt(value.toString(), 10) }),
2078
+ [dispatchUpdate]
2079
+ );
2080
+ const handleChangeAlignOnDecimals = (0, import_react6.useCallback)(
2081
+ (evt, value) => dispatchUpdate({ alignOnDecimals: value }),
2082
+ [dispatchUpdate]
2083
+ );
2084
+ const handleChangeZeroPad = (0, import_react6.useCallback)(
2085
+ (evt, value) => dispatchUpdate({ zeroPad: value }),
2086
+ [dispatchUpdate]
2087
+ );
2088
+ switch (column.serverDataType) {
2089
+ case "double":
2090
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
2091
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_salt_lab3.FormField, { label: "No of Decimals", labelPlacement: "top", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_salt_lab3.StepperInput, { value: decimals, onChange: handleChangeDecimals }) }),
2092
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
2093
+ import_salt_lab3.Switch,
2094
+ {
2095
+ checked: alignOnDecimals,
2096
+ label: "Align on decimals",
2097
+ LabelProps: { className: "vuuColumnPanelSwitch" },
2098
+ onChange: handleChangeAlignOnDecimals
2099
+ }
2100
+ ),
2101
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
2102
+ import_salt_lab3.Switch,
2103
+ {
2104
+ checked: zeroPad,
2105
+ label: "Zero pad",
2106
+ LabelProps: { className: "vuuColumnPanelSwitch" },
2107
+ onChange: handleChangeZeroPad
2108
+ }
2109
+ )
2110
+ ] });
2111
+ case "long":
2112
+ case "int":
2113
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_jsx_runtime5.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_core2.Text, { children: "Work in progress" }) });
2114
+ default:
2115
+ return null;
2116
+ }
2117
+ };
2118
+
2119
+ // src/datagrid-configuration-ui/column-type-panel/StringColumnPanel.tsx
2120
+ var import_jsx_runtime6 = require("react/jsx-runtime");
2121
+ var StringColumnPanel = ({
2122
+ column,
2123
+ dispatchColumnAction
2124
+ }) => {
2125
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_jsx_runtime6.Fragment, { children: "String" });
2126
+ };
2127
+
2128
+ // src/datagrid-configuration-ui/column-type-panel/ColumnTypePanel.tsx
2129
+ var import_jsx_runtime7 = require("react/jsx-runtime");
2130
+ var classBase5 = "vuuColumnTypePanel";
2131
+ var integerCellRenderers = ["Default Renderer (int, long)"];
2132
+ var doubleCellRenderers = ["Default Renderer (double)"];
2133
+ var stringCellRenderers = ["Default Renderer (string)"];
2134
+ var getAvailableCellRenderers = (column) => {
2135
+ const customCellRenderers = (0, import_vuu_utils7.getRegisteredCellRenderers)(column.serverDataType);
2136
+ const customRendererNames = customCellRenderers.map((r) => r.name);
2137
+ console.log({ customRendererNames });
2138
+ switch (column.serverDataType) {
2139
+ case "char":
2140
+ case "string":
2141
+ return stringCellRenderers;
2142
+ case "int":
2143
+ case "long":
2144
+ return integerCellRenderers;
2145
+ case "double":
2146
+ return doubleCellRenderers.concat(customRendererNames);
2147
+ default:
2148
+ return stringCellRenderers;
2149
+ }
2150
+ };
2151
+ var ColumnTypePanel = ({
2152
+ className,
2153
+ column,
2154
+ dispatchColumnAction,
2155
+ ...props
2156
+ }) => {
2157
+ const content = (0, import_react7.useMemo)(() => {
2158
+ switch (column.serverDataType) {
2159
+ case "double":
2160
+ case "int":
2161
+ case "long":
2162
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
2163
+ NumericColumnPanel,
2164
+ {
2165
+ column,
2166
+ dispatchColumnAction
2167
+ }
2168
+ );
2169
+ default:
2170
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
2171
+ StringColumnPanel,
2172
+ {
2173
+ column,
2174
+ dispatchColumnAction
2175
+ }
2176
+ );
2177
+ }
2178
+ }, [column, dispatchColumnAction]);
2179
+ const { serverDataType = "string" } = column;
2180
+ const availableRenderers = getAvailableCellRenderers(column);
2181
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_jsx_runtime7.Fragment, { children: [
2182
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
2183
+ import_salt_lab4.Dropdown,
2184
+ {
2185
+ className: (0, import_classnames3.default)(`${classBase5}-renderer`),
2186
+ fullWidth: true,
2187
+ selected: availableRenderers[0],
2188
+ source: availableRenderers
2189
+ }
2190
+ ),
2191
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
2192
+ import_core3.Panel,
2193
+ {
2194
+ ...props,
2195
+ className: (0, import_classnames3.default)(classBase5, className, `${classBase5}-${serverDataType}`),
2196
+ children: content
2197
+ }
2198
+ )
2199
+ ] });
2200
+ };
2201
+
2202
+ // src/datagrid-configuration-ui/column-settings-panel/ColumnSettingsPanel.tsx
2203
+ var import_jsx_runtime8 = require("react/jsx-runtime");
2204
+ var classBase6 = "vuuColumnSettingsPanel";
2205
+ var tabstripProps = {
2206
+ className: "salt-density-high"
2207
+ };
2208
+ var NullActivationIndicator = () => null;
2209
+ var ColumnSettingsPanel = ({
2210
+ column,
2211
+ dispatchColumnAction,
2212
+ style: styleProp,
2213
+ ...props
2214
+ }) => {
2215
+ var _a, _b, _c, _d;
2216
+ const [activeTab, setActiveTab] = (0, import_react8.useState)(0);
2217
+ const dispatchUpdate = (0, import_react8.useCallback)(
2218
+ (values) => dispatchColumnAction({
2219
+ type: "updateColumnProp",
2220
+ column,
2221
+ ...values
2222
+ }),
2223
+ [column, dispatchColumnAction]
2224
+ );
2225
+ const handleChangeAlign = (0, import_react8.useCallback)(
2226
+ (evt) => dispatchUpdate({ align: evt.target.value }),
2227
+ [dispatchUpdate]
2228
+ );
2229
+ const handleChangePin = (0, import_react8.useCallback)(
2230
+ (evt) => dispatchUpdate({ pin: evt.target.value }),
2231
+ [dispatchUpdate]
2232
+ );
2233
+ const handleChangeHidden = (0, import_react8.useCallback)(
2234
+ (evt, value) => dispatchUpdate({ hidden: value }),
2235
+ [dispatchUpdate]
2236
+ );
2237
+ const handleChangeLabel = (0, import_react8.useCallback)(
2238
+ (evt, value) => dispatchUpdate({ label: value }),
2239
+ [dispatchUpdate]
2240
+ );
2241
+ const handleChangeWidth = (0, import_react8.useCallback)(
2242
+ (value) => dispatchUpdate({ width: parseInt(value.toString(), 10) }),
2243
+ [dispatchUpdate]
2244
+ );
2245
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
2246
+ "div",
2247
+ {
2248
+ className: classBase6,
2249
+ ...props,
2250
+ style: {
2251
+ ...styleProp
2252
+ },
2253
+ children: [
2254
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_core4.Text, { as: "h4", children: "Column Settings" }),
2255
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
2256
+ import_vuu_layout.Stack,
2257
+ {
2258
+ active: activeTab,
2259
+ showTabs: true,
2260
+ className: (0, import_classnames4.default)(`${classBase6}-columnTabs`),
2261
+ onTabSelectionChanged: setActiveTab,
2262
+ TabstripProps: tabstripProps,
2263
+ children: [
2264
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_core4.Panel, { title: "Column", children: [
2265
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_salt_lab5.FormField, { label: "Hidden", labelPlacement: "left", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
2266
+ import_salt_lab5.Checkbox,
2267
+ {
2268
+ checked: column.hidden === true,
2269
+ onChange: handleChangeHidden
2270
+ }
2271
+ ) }),
2272
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_salt_lab5.FormField, { label: "Label", labelPlacement: "left", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
2273
+ import_salt_lab5.Input,
2274
+ {
2275
+ value: (_a = column.label) != null ? _a : column.name,
2276
+ onChange: handleChangeLabel
2277
+ }
2278
+ ) }),
2279
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_salt_lab5.FormField, { label: "Width", labelPlacement: "left", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
2280
+ import_salt_lab5.StepperInput,
2281
+ {
2282
+ value: (_b = column.width) != null ? _b : 100,
2283
+ onChange: handleChangeWidth
2284
+ }
2285
+ ) }),
2286
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
2287
+ import_salt_lab5.FormField,
2288
+ {
2289
+ label: "Align",
2290
+ labelPlacement: "left",
2291
+ ActivationIndicatorComponent: NullActivationIndicator,
2292
+ children: /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
2293
+ import_salt_lab5.RadioButtonGroup,
2294
+ {
2295
+ "aria-label": "Column Align",
2296
+ value: (_c = column.align) != null ? _c : "left",
2297
+ legend: "Align",
2298
+ onChange: handleChangeAlign,
2299
+ children: [
2300
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_salt_lab5.RadioButton, { label: "Left", value: "left" }),
2301
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_salt_lab5.RadioButton, { label: "Right", value: "right" })
2302
+ ]
2303
+ }
2304
+ )
2305
+ }
2306
+ ),
2307
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
2308
+ import_salt_lab5.FormField,
2309
+ {
2310
+ label: "Pin Column",
2311
+ labelPlacement: "left",
2312
+ ActivationIndicatorComponent: NullActivationIndicator,
2313
+ children: /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
2314
+ import_salt_lab5.RadioButtonGroup,
2315
+ {
2316
+ "aria-label": "Pin Column",
2317
+ value: (_d = column.pin) != null ? _d : "",
2318
+ legend: "Pin Column",
2319
+ onChange: handleChangePin,
2320
+ children: [
2321
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_salt_lab5.RadioButton, { label: "Do not pin", value: "" }),
2322
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_salt_lab5.RadioButton, { label: "Left", value: "left" }),
2323
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_salt_lab5.RadioButton, { label: "Right", value: "right" })
2324
+ ]
2325
+ }
2326
+ )
2327
+ }
2328
+ )
2329
+ ] }),
2330
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
2331
+ ColumnTypePanel,
2332
+ {
2333
+ column,
2334
+ dispatchColumnAction,
2335
+ title: "Data Cell"
2336
+ }
2337
+ ),
2338
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_core4.Panel, { title: "Vuu", variant: "secondary", children: [
2339
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
2340
+ import_salt_lab5.FormField,
2341
+ {
2342
+ label: "Name",
2343
+ labelPlacement: "top",
2344
+ readOnly: true,
2345
+ variant: "secondary",
2346
+ children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_salt_lab5.Input, { value: column.name })
2347
+ }
2348
+ ),
2349
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
2350
+ import_salt_lab5.FormField,
2351
+ {
2352
+ label: "Vuu type",
2353
+ labelPlacement: "top",
2354
+ readOnly: true,
2355
+ variant: "secondary",
2356
+ children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_salt_lab5.Input, { value: column.serverDataType })
2357
+ }
2358
+ )
2359
+ ] })
2360
+ ]
2361
+ }
2362
+ )
2363
+ ]
2364
+ }
2365
+ );
2366
+ };
2367
+
2368
+ // src/datagrid-configuration-ui/settings-panel/GridSettingsPanel.tsx
2369
+ var import_salt_lab6 = require("@heswell/salt-lab");
2370
+ var import_core5 = require("@salt-ds/core");
2371
+ var import_react9 = require("react");
2372
+ var import_jsx_runtime9 = require("react/jsx-runtime");
2373
+ var classBase7 = "vuuGridSettingsPanel";
2374
+ var NullActivationIndicator2 = () => null;
2375
+ var GridSettingsPanel = ({
2376
+ config,
2377
+ dispatchColumnAction,
2378
+ style: styleProp,
2379
+ ...props
2380
+ }) => {
2381
+ var _a;
2382
+ const dispatchUpdate = (0, import_react9.useCallback)(
2383
+ (values) => dispatchColumnAction({
2384
+ type: "updateGridSettings",
2385
+ ...values
2386
+ }),
2387
+ [dispatchColumnAction]
2388
+ );
2389
+ const handleChangeLabelFormatting = (0, import_react9.useCallback)(
2390
+ (evt) => dispatchUpdate({
2391
+ columnFormatHeader: evt.target.value
2392
+ }),
2393
+ [dispatchUpdate]
2394
+ );
2395
+ const handleChangeWidth = (0, import_react9.useCallback)(
2396
+ (value) => dispatchUpdate({ columnDefaultWidth: parseInt(value.toString(), 10) }),
2397
+ [dispatchUpdate]
2398
+ );
2399
+ console.log(`GridSettingsPanel ${JSON.stringify(config.columns, null, 2)}`);
2400
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
2401
+ "div",
2402
+ {
2403
+ className: classBase7,
2404
+ ...props,
2405
+ style: {
2406
+ ...styleProp
2407
+ },
2408
+ children: [
2409
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_core5.Text, { as: "h4", children: "Grid Settings" }),
2410
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_core5.Panel, { children: [
2411
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
2412
+ import_salt_lab6.FormField,
2413
+ {
2414
+ label: "Format column labels",
2415
+ labelPlacement: "left",
2416
+ ActivationIndicatorComponent: NullActivationIndicator2,
2417
+ children: /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
2418
+ import_salt_lab6.RadioButtonGroup,
2419
+ {
2420
+ "aria-label": "Format column labels",
2421
+ value: config.columnFormatHeader,
2422
+ legend: "Format column labels",
2423
+ onChange: handleChangeLabelFormatting,
2424
+ children: [
2425
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_salt_lab6.RadioButton, { label: "No Formatting", value: void 0 }),
2426
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_salt_lab6.RadioButton, { label: "Capitalize", value: "capitalize" }),
2427
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_salt_lab6.RadioButton, { label: "Uppercase", value: "uppercase" })
2428
+ ]
2429
+ }
2430
+ )
2431
+ }
2432
+ ),
2433
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_salt_lab6.FormField, { label: "Default Column Width", labelPlacement: "left", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
2434
+ import_salt_lab6.StepperInput,
2435
+ {
2436
+ value: (_a = config.columnDefaultWidth) != null ? _a : 100,
2437
+ onChange: handleChangeWidth
2438
+ }
2439
+ ) })
2440
+ ] })
2441
+ ]
2442
+ }
2443
+ );
2444
+ };
2445
+
2446
+ // src/datagrid-configuration-ui/settings-panel/useGridSettings.ts
2447
+ var import_react10 = require("react");
2448
+ var import_salt_lab7 = require("@heswell/salt-lab");
2449
+ var import_vuu_utils8 = require("@vuu-ui/vuu-utils");
2450
+ var gridSettingsReducer = (state, action) => {
2451
+ console.log(`gridSettingsReducer ${action.type}`);
2452
+ switch (action.type) {
2453
+ case "addColumn":
2454
+ return addColumn(state, action);
2455
+ case "addCalculatedColumn":
2456
+ return addCalculatedColumn(state, action);
2457
+ case "moveColumn":
2458
+ return moveColumn(state, action);
2459
+ case "removeColumn":
2460
+ return removeColumn(state, action);
2461
+ case "updateColumn":
2462
+ return state;
2463
+ case "updateColumnProp":
2464
+ return updateColumnProp(state, action);
2465
+ case "updateGridSettings":
2466
+ return updateGridSettings(state, action);
2467
+ case "updateColumnTypeFormatting":
2468
+ return updateColumnTypeFormatting(state, action);
2469
+ default:
2470
+ return state;
2471
+ }
2472
+ };
2473
+ var useGridSettings = (config) => {
2474
+ const [state, dispatchColumnAction] = (0, import_react10.useReducer)(
2475
+ gridSettingsReducer,
2476
+ config
2477
+ );
2478
+ return {
2479
+ gridSettings: state,
2480
+ dispatchColumnAction
2481
+ };
2482
+ };
2483
+ function addColumn(state, { column, columns, index = -1 }) {
2484
+ const { columns: stateColumns } = state;
2485
+ if (index === -1) {
2486
+ if (Array.isArray(columns)) {
2487
+ return { ...state, columns: stateColumns.concat(columns) };
2488
+ } else if (column) {
2489
+ return { ...state, columns: stateColumns.concat(column) };
2490
+ }
2491
+ }
2492
+ return state;
2493
+ }
2494
+ function addCalculatedColumn(state, { columnName, columnType, expression }) {
2495
+ const { columns: stateColumns } = state;
2496
+ const calculatedColumn = {
2497
+ name: columnName,
2498
+ expression,
2499
+ serverDataType: columnType
2500
+ };
2501
+ return { ...state, columns: stateColumns.concat(calculatedColumn) };
2502
+ }
2503
+ function removeColumn(state, { column }) {
2504
+ const { columns: stateColumns } = state;
2505
+ return {
2506
+ ...state,
2507
+ columns: stateColumns.filter((col) => col.name !== column.name)
2508
+ };
2509
+ }
2510
+ function moveColumn(state, { column, moveBy, moveFrom, moveTo }) {
2511
+ const { columns: stateColumns } = state;
2512
+ if (column && typeof moveBy === "number") {
2513
+ const idx = stateColumns.indexOf(column);
2514
+ const newColumns = stateColumns.slice();
2515
+ const [movedColumns] = newColumns.splice(idx, 1);
2516
+ newColumns.splice(idx + moveBy, 0, movedColumns);
2517
+ return {
2518
+ ...state,
2519
+ columns: newColumns
2520
+ };
2521
+ } else if (typeof moveFrom === "number" && typeof moveTo === "number") {
2522
+ return {
2523
+ ...state,
2524
+ columns: (0, import_salt_lab7.moveItem)(stateColumns, moveFrom, moveTo)
2525
+ };
2526
+ } else {
2527
+ return state;
2528
+ }
2529
+ }
2530
+ function updateColumnProp(state, { align, column, hidden, label, width }) {
2531
+ let { columns: stateColumns } = state;
2532
+ if (align === "left" || align === "right") {
2533
+ stateColumns = replaceColumn(stateColumns, { ...column, align });
2534
+ }
2535
+ if (typeof hidden === "boolean") {
2536
+ stateColumns = replaceColumn(stateColumns, { ...column, hidden });
2537
+ }
2538
+ if (typeof label === "string") {
2539
+ stateColumns = replaceColumn(stateColumns, { ...column, label });
2540
+ }
2541
+ if (typeof width === "number") {
2542
+ stateColumns = replaceColumn(stateColumns, { ...column, width });
2543
+ }
2544
+ return {
2545
+ ...state,
2546
+ columns: stateColumns
2547
+ };
2548
+ }
2549
+ function updateGridSettings(state, { columnFormatHeader }) {
2550
+ return {
2551
+ ...state,
2552
+ columnFormatHeader: columnFormatHeader != null ? columnFormatHeader : state.columnFormatHeader
2553
+ };
2554
+ }
2555
+ function updateColumnTypeFormatting(state, {
2556
+ alignOnDecimals,
2557
+ column,
2558
+ decimals,
2559
+ zeroPad
2560
+ }) {
2561
+ const { columns: stateColumns } = state;
2562
+ const targetColumn = stateColumns.find((col) => col.name === column.name);
2563
+ if (targetColumn) {
2564
+ const {
2565
+ serverDataType = "string",
2566
+ type: columnType = (0, import_vuu_utils8.fromServerDataType)(serverDataType)
2567
+ } = column;
2568
+ const type = typeof columnType === "string" ? {
2569
+ name: columnType
2570
+ } : {
2571
+ ...columnType
2572
+ };
2573
+ if (typeof alignOnDecimals === "boolean") {
2574
+ type.formatting = {
2575
+ ...type.formatting,
2576
+ alignOnDecimals
2577
+ };
2578
+ }
2579
+ if (typeof decimals === "number") {
2580
+ type.formatting = {
2581
+ ...type.formatting,
2582
+ decimals
2583
+ };
2584
+ }
2585
+ if (typeof zeroPad === "boolean") {
2586
+ type.formatting = {
2587
+ ...type.formatting,
2588
+ zeroPad
2589
+ };
2590
+ }
2591
+ return {
2592
+ ...state,
2593
+ columns: replaceColumn(stateColumns, { ...column, type })
2594
+ };
2595
+ } else {
2596
+ return state;
2597
+ }
2598
+ }
2599
+ function replaceColumn(columns, column) {
2600
+ return columns.map((col) => col.name === column.name ? column : col);
2601
+ }
2602
+
2603
+ // src/datagrid-configuration-ui/settings-panel/DatagridSettingsPanel.tsx
2604
+ var import_vuu_layout2 = require("@vuu-ui/vuu-layout");
2605
+
2606
+ // src/datagrid-configuration-ui/calculated-column-panel/CalculatedColumnPanel.tsx
2607
+ var import_salt_lab8 = require("@heswell/salt-lab");
2608
+ var import_core6 = require("@salt-ds/core");
2609
+ var import_react11 = require("react");
2610
+ var import_jsx_runtime10 = require("react/jsx-runtime");
2611
+ var CalculatedColumnPanel = ({
2612
+ columns,
2613
+ dispatchColumnAction,
2614
+ table
2615
+ }) => {
2616
+ const [columnName, setColumnName] = (0, import_react11.useState)("");
2617
+ const [, setExpression] = (0, import_react11.useState)();
2618
+ const sourceRef = (0, import_react11.useRef)("");
2619
+ const suggestionProvider = useColumnExpressionSuggestionProvider({
2620
+ columns,
2621
+ table
2622
+ });
2623
+ const handleChangeName = (0, import_react11.useCallback)(
2624
+ (evt) => {
2625
+ const { value } = evt.target;
2626
+ setColumnName(value);
2627
+ },
2628
+ []
2629
+ );
2630
+ const handleChangeExpression = (0, import_react11.useCallback)((source) => {
2631
+ sourceRef.current = source;
2632
+ }, []);
2633
+ const handleSubmitExpression = (0, import_react11.useCallback)(
2634
+ (source, expression) => {
2635
+ console.log({ source });
2636
+ setExpression(expression);
2637
+ },
2638
+ []
2639
+ );
2640
+ const handleSave = (0, import_react11.useCallback)(() => {
2641
+ if (sourceRef.current) {
2642
+ console.log(
2643
+ `save expression ${JSON.stringify(sourceRef.current, null, 2)}`
2644
+ );
2645
+ dispatchColumnAction({
2646
+ type: "addCalculatedColumn",
2647
+ columnName,
2648
+ expression: sourceRef.current,
2649
+ columnType: "string"
2650
+ });
2651
+ }
2652
+ }, [columnName, dispatchColumnAction]);
2653
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_core6.Panel, { className: "vuuCalculatedColumnPanel", title: "Define Computed Column", children: [
2654
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_core6.Text, { styleAs: "h4", children: "Define Computed Column" }),
2655
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_salt_lab8.FormField, { label: "Column Name", labelPlacement: "left", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_salt_lab8.Input, { value: columnName, onChange: handleChangeName }) }),
2656
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
2657
+ ColumnExpressionInput,
2658
+ {
2659
+ onChange: handleChangeExpression,
2660
+ onSubmitExpression: handleSubmitExpression,
2661
+ suggestionProvider
2662
+ }
2663
+ ),
2664
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { style: { marginTop: 12 }, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_core6.Button, { onClick: handleSave, children: "Add Column" }) })
2665
+ ] });
2666
+ };
2667
+
2668
+ // src/datagrid-configuration-ui/settings-panel/DatagridSettingsPanel.tsx
2669
+ var import_jsx_runtime11 = require("react/jsx-runtime");
2670
+ var classBase8 = "vuuDatagridSettingsPanel";
2671
+ var getTabLabel = () => void 0;
2672
+ var icons = [
2673
+ "table-settings",
2674
+ "column-chooser",
2675
+ "column-settings",
2676
+ "define-column"
2677
+ ];
2678
+ var getTabIcon = (component, tabIndex) => icons[tabIndex];
2679
+ var DatagridSettingsPanel = ({
2680
+ availableColumns,
2681
+ className,
2682
+ gridConfig,
2683
+ onCancel,
2684
+ onConfigChange,
2685
+ ...props
2686
+ }) => {
2687
+ var _a;
2688
+ console.log(`DatagridSettingsPanel render`);
2689
+ const [selectedTabIndex, setSelectedTabIndex] = (0, import_react12.useState)(0);
2690
+ const { gridSettings, dispatchColumnAction } = useGridSettings(gridConfig);
2691
+ const [selectedColumnName, setSelectedColumnName] = (0, import_react12.useState)(
2692
+ null
2693
+ );
2694
+ const handleColumnSelected = (0, import_react12.useCallback)(
2695
+ (selected) => {
2696
+ setSelectedColumnName(selected ? selected.name : null);
2697
+ },
2698
+ []
2699
+ );
2700
+ const handleApply = (0, import_react12.useCallback)(
2701
+ (evt, closePanel = false) => {
2702
+ console.log(`1) DataGridSettingsPanel fire onConfigChange`);
2703
+ onConfigChange == null ? void 0 : onConfigChange(gridSettings, closePanel);
2704
+ },
2705
+ [gridSettings, onConfigChange]
2706
+ );
2707
+ const handleTabSelectionChanged = (0, import_react12.useCallback)((selectedTabIndex2) => {
2708
+ setSelectedTabIndex(selectedTabIndex2);
2709
+ }, []);
2710
+ const handleSave = (0, import_react12.useCallback)(
2711
+ (evt) => handleApply(evt, true),
2712
+ [handleApply]
2713
+ );
2714
+ const selectedColumn = selectedColumnName === null ? null : (_a = gridSettings.columns.find((col) => col.name === selectedColumnName)) != null ? _a : null;
2715
+ const tabstripProps2 = {
2716
+ activeTabIndex: selectedTabIndex,
2717
+ enableRenameTab: false,
2718
+ orientation: "vertical"
2719
+ };
2720
+ const handleAddCalculatedColumn = (0, import_react12.useCallback)(
2721
+ () => setSelectedTabIndex(3),
2722
+ []
2723
+ );
2724
+ const panelShift = selectedTabIndex === 2 ? "right" : void 0;
2725
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { ...props, className: (0, import_classnames5.default)(classBase8, className), children: [
2726
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
2727
+ import_vuu_layout2.Stack,
2728
+ {
2729
+ TabstripProps: tabstripProps2,
2730
+ className: `${classBase8}-stack`,
2731
+ getTabIcon,
2732
+ getTabLabel,
2733
+ active: selectedTabIndex === 2 ? 1 : selectedTabIndex,
2734
+ onTabSelectionChanged: handleTabSelectionChanged,
2735
+ showTabs: true,
2736
+ children: [
2737
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
2738
+ GridSettingsPanel,
2739
+ {
2740
+ config: gridSettings,
2741
+ dispatchColumnAction
2742
+ }
2743
+ ),
2744
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: `${classBase8}-columnPanels`, "data-align": panelShift, children: [
2745
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
2746
+ ColumnPicker,
2747
+ {
2748
+ availableColumns,
2749
+ chosenColumns: gridSettings.columns,
2750
+ dispatchColumnAction,
2751
+ onSelectionChange: handleColumnSelected,
2752
+ onAddCalculatedColumnClick: handleAddCalculatedColumn,
2753
+ selectedColumn
2754
+ }
2755
+ ),
2756
+ selectedColumn === null ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_core7.Panel, { className: "vuuColumnSettingsPanel", children: "Select a column" }) : /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
2757
+ ColumnSettingsPanel,
2758
+ {
2759
+ column: selectedColumn,
2760
+ dispatchColumnAction,
2761
+ style: { background: "white", flex: "1 0 150px" }
2762
+ }
2763
+ )
2764
+ ] }),
2765
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { title: "Column Settings", children: "Column Settings" }),
2766
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
2767
+ CalculatedColumnPanel,
2768
+ {
2769
+ columns: gridSettings.columns,
2770
+ dispatchColumnAction,
2771
+ table: { module: "SIMUL", table: "instruments" }
2772
+ }
2773
+ )
2774
+ ]
2775
+ }
2776
+ ),
2777
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: `${classBase8}-buttonBar`, children: [
2778
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_core7.Button, { onClick: onCancel, children: "Cancel" }),
2779
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_core7.Button, { onClick: handleApply, children: "Apply" }),
2780
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_core7.Button, { onClick: handleSave, children: "Save" })
2781
+ ] })
2782
+ ] });
2783
+ };
2784
+
2785
+ // src/datasource-stats/DatasourceStats.tsx
2786
+ var import_react13 = require("react");
2787
+ var import_classnames6 = __toESM(require("classnames"), 1);
2788
+ var import_jsx_runtime12 = require("react/jsx-runtime");
2789
+ var classBase9 = "vuuDatasourceStats";
2790
+ var numberFormatter = new Intl.NumberFormat();
2791
+ var DataSourceStats = ({
2792
+ className: classNameProp,
2793
+ dataSource
2794
+ }) => {
2795
+ const [optimize, setOptimize] = (0, import_react13.useState)(
2796
+ dataSource.optimize
2797
+ );
2798
+ const [range, setRange] = (0, import_react13.useState)(dataSource.range);
2799
+ const [size, setSize] = (0, import_react13.useState)(dataSource.size);
2800
+ (0, import_react13.useEffect)(() => {
2801
+ setOptimize(dataSource.optimize);
2802
+ setSize(dataSource.size);
2803
+ dataSource.on("optimize", setOptimize);
2804
+ dataSource.on("resize", setSize);
2805
+ dataSource.on("range", setRange);
2806
+ }, [dataSource]);
2807
+ const className = (0, import_classnames6.default)(classBase9, classNameProp);
2808
+ const from = numberFormatter.format(range.from);
2809
+ const to = numberFormatter.format(range.to - 1);
2810
+ const value = numberFormatter.format(size);
2811
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className, children: [
2812
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { children: "Showing rows" }),
2813
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: `${classBase9}-range`, children: from }),
2814
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: `${classBase9}-range`, children: to }),
2815
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { children: "of" }),
2816
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: `${classBase9}-size`, children: value }),
2817
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: `${classBase9}-optimize`, children: optimize })
2818
+ ] });
2819
+ };
2
2820
  //# sourceMappingURL=index.js.map