tsgrid-ui 2.2.0 → 2.4.0

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.
@@ -0,0 +1,625 @@
1
+ /* tsgrid-ui 1.0.x (nightly) (5/13/2026, 7:25:10 PM) (c) 2014 vitmalina@gmail.com, (c) 2026 DaverSoGT — MIT */
2
+ "use strict";var Ye=Object.defineProperty;var fi=Object.getOwnPropertyDescriptor;var hi=Object.getOwnPropertyNames;var pi=Object.prototype.hasOwnProperty;var mi=(n,e)=>{for(var s in e)Ye(n,s,{get:e[s],enumerable:!0})},gi=(n,e,s,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of hi(e))!pi.call(n,i)&&i!==s&&Ye(n,i,{get:()=>e[i],enumerable:!(t=fi(e,i))||t.enumerable});return n};var yi=n=>gi(Ye({},"__esModule",{value:!0}),n);var Mi={};mi(Mi,{Tooltip:()=>oe,TsAlert:()=>Ht,TsBase:()=>ne,TsColor:()=>Re,TsConfirm:()=>Nt,TsDate:()=>Ue,TsDialog:()=>Me,TsEvent:()=>Se,TsField:()=>ue,TsForm:()=>qe,TsGrid:()=>Ve,TsLayout:()=>Be,TsLocale:()=>Ce,TsMenu:()=>ie,TsPopup:()=>fe,TsPrompt:()=>Pt,TsSidebar:()=>Ge,TsTabs:()=>ve,TsToolbar:()=>he,TsTooltip:()=>V,TsUi:()=>se,TsUtils:()=>p,query:()=>ke});var Ce={locale:"en-US",dateFormat:"m/d/yyyy",timeFormat:"hh:mi pm",datetimeFormat:"m/d/yyyy|hh:mi pm",currencyPrefix:"$",currencySuffix:"",currencyPrecision:2,groupSymbol:",",decimalSymbol:".",shortmonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],fullmonths:["January","February","March","April","May","June","July","August","September","October","November","December"],shortdays:["M","T","W","T","F","S","S"],fulldays:["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],weekStarts:"S",phrases:{"${count} letters or more...":"---","Add new record":"---","Add New":"---","Advanced Search":"---",after:"---","AJAX error. See console for more details.":"---","All Fields":"---",All:"---",Any:"---","Are you sure you want to delete ${count} ${records}?":"---","Attach files by dragging and dropping or Click to Select":"---",before:"---","begins with":"---",begins:"---",between:"---",buffered:"---",Cancel:"---",Close:"---",Column:"---",Confirmation:"---",contains:"---",Copied:"---","Copy to clipboard":"---","Current Date & Time":"---","Delete selected records":"---",Delete:"---",'Do you want to delete search item "${item}"?':"---","Edit selected record":"---",Edit:"---","Empty list":"---","ends with":"---",ends:"---","Field should be at least ${count} characters.":"---",Hide:"---",in:"---","is not":"---",is:"---","less than":"---","Line #":"---","Load ${count} more...":"---","Loading...":"---","Maximum number of files is ${count}":"---","Maximum total size is ${count}":"---",Modified:"---","more than":"---","Multiple Fields":"---",Name:"---","No items found":"---","No matches":"---",No:"---",none:"---","Not a float":"---","Not a hex number":"---","Not a valid date":"---","Not a valid email":"---","Not alpha-numeric":"---","Not an integer":"---","Not in money format":"---","not in":"---",Notification:"---",of:"---",Ok:"---",Opacity:"---","Record ID":"---",record:"---",records:"---","Refreshing...":"---",RegEx:"---",regex:"---","Reload data in the list":"---",Remove:"---","Remove This Field":"---","Request aborted.":"---","Required field":"---",Reset:"---","Restore Default State":"---","Returned data is not in valid JSON format.":"---","Save changed records":"---","Save Grid State":"---",Save:"---","Saved Searches":"---","Saving...":"---","Search took ${count} seconds":"---",Search:"---","Select Hour":"---","Select Minute":"---",selected:"---","Server Response ${count} seconds":"---","Show/hide columns":"---",Show:"---",Size:"---",Skip:"---","Sorting took ${count} seconds":"---","Type to search...":"---",Type:"---",Yes:"---",Yesterday:"---","Your remote data source record count has changed, reloading from the first record.":"---"}};var $e=class n{static version=.8;context;nodes;length;constructor(e,s){this.context=s??document;let t=[];if(Array.isArray(e))t=e;else if(e instanceof Node||e instanceof Window)t=[e];else if(e instanceof n)t=e.nodes;else if(typeof e=="string"){if(typeof this.context.querySelector!="function")throw new Error("Invalid context");t=Array.from(this.context.querySelectorAll(e))}else if(e==null)t=[];else{let i=Array.from(e??[]);if(typeof e=="object"&&Array.isArray(i))t=i;else throw new Error(`Invalid selector "${e}"`)}this.nodes=t,this.length=t.length,this.each((i,o)=>{this[o]=i})}static _fragment(e){let s=document.createElement("template");return s.innerHTML=e,s.content.childNodes.forEach(t=>{let i=n._scriptConvert(t);i!=t&&s.content.replaceChild(i,t)}),s.content}static _scriptConvert(e){let s=t=>{let o=t.ownerDocument.createElement("script");o.text=t.text;let l=t.attributes;for(let a=0;a<l.length;a++){let r=l[a];r&&o.setAttribute(r.name,r.value)}return o};return e.tagName=="SCRIPT"&&(e=s(e)),e.querySelectorAll&&e.querySelectorAll("script").forEach(t=>{t.parentNode.replaceChild(s(t),t)}),e}static _fixProp(e){let s={cellpadding:"cellPadding",cellspacing:"cellSpacing",class:"className",colspan:"colSpan",contenteditable:"contentEditable",for:"htmlFor",frameborder:"frameBorder",maxlength:"maxLength",readonly:"readOnly",rowspan:"rowSpan",tabindex:"tabIndex",usemap:"useMap"};return s[e]?s[e]:e}_insert(e,s){let t=[],i=this.length;if(i<1)return this;if(typeof s=="string")this.each(o=>{let l=n._fragment(s);t.push(...l.childNodes),o[e]?.(l)});else if(s instanceof n){let o=i==1;s.each(l=>{this.each(a=>{let r=o?l:l.cloneNode(!0);t.push(r),a[e]?.(r),n._scriptConvert(r)})}),o||s.remove()}else if(s instanceof Node)this.each(o=>{let l=i===1?s:n._fragment(s.outerHTML);t.push(...i===1?[s]:l.childNodes),o[e]?.(l)}),i>1&&s.remove();else throw new Error(`Incorrect argument for "${e}(html)". It expects one string argument.`);return e=="replaceWith"?new n(t,this.context):this}_save(e,s,t){e._mQuery=e._mQuery??{},Array.isArray(t)?(e._mQuery[s]=e._mQuery[s]??[],e._mQuery[s].push(...t)):t!=null?e._mQuery[s]=t:delete e._mQuery[s]}get(e){if(e==null)return this.nodes;e<0&&(e=this.length+e);let s=this[e];return s||null}eq(e){e<0&&(e=this.length+e);let s=this[e],t=s!=null?[s]:[];return new n(t,this.context)}then(e){let s=e(this);return s??this}find(e){let s=[];return this.each(t=>{let i=Array.from(t.querySelectorAll(e));i.length>0&&s.push(...i)}),new n(s,this.context)}filter(e){let s=[];return this.each(t=>{(t===e||typeof e=="string"&&t.matches&&t.matches(e)||typeof e=="function"&&e(t))&&s.push(t)}),new n(s,this.context)}next(){let e=[];return this.each(s=>{let t=s.nextElementSibling;t&&e.push(t)}),new n(e,this.context)}prev(){let e=[];return this.each(s=>{let t=s.previousElementSibling;t&&e.push(t)}),new n(e,this.context)}shadow(e){let s=[];this.each(i=>{i.shadowRoot&&s.push(i.shadowRoot)});let t=new n(s,this.context);return e?t.find(e):t}closest(e){let s=[];return this.each(t=>{let i=t.closest(e);i&&s.push(i)}),new n(s,this.context)}host(e){let s=[],t=o=>o.parentNode?t(o.parentNode):o,i=o=>{let l=t(o);s.push(l.host?l.host:l),l.host&&e&&i(l.host)};return this.each(o=>{i(o)}),new n(s,this.context)}parent(e){return this.parents(e,!0)}parents(e,s){let t=[],i=l=>{if(t.indexOf(l)==-1&&t.push(l),!s&&l.parentNode)return i(l.parentNode)};this.each(l=>{l.parentNode&&i(l.parentNode)});let o=new n(t,this.context);return e?o.filter(e):o}add(e){let s=e instanceof n?e.nodes:Array.isArray(e)?e:[e];return new n(this.nodes.concat(s),this.context)}each(e){return this.nodes.forEach((s,t)=>{e(s,t,this)}),this}append(e){return this._insert("append",e)}prepend(e){return this._insert("prepend",e)}after(e){return this._insert("after",e)}before(e){return this._insert("before",e)}replace(e){return this._insert("replaceWith",e)}remove(){return this.each(e=>{e.remove()}),this}css(e,s){let t=typeof e=="object"?e:{},i=arguments.length;if(i===0||i===1&&typeof e=="string")if(this[0]){let o=this[0].style;if(typeof e=="string"){let l=o.getPropertyPriority(e);return o.getPropertyValue(e)+(l?"!"+l:"")}else return Object.fromEntries(this[0].style.cssText.split(";").filter(l=>!!l).map(l=>l.split(":").map(a=>a.trim())))}else return;else return typeof e!="object"&&(t={},t[e]=s),this.each(o=>{Object.keys(t).forEach(l=>{let a=String(t[l]).toLowerCase().includes("!important")?"important":"";o.style.setProperty(l,String(t[l]).replace(/\!important/i,""),a)})}),this}addClass(e){return this.toggleClass(e,!0),this}removeClass(e){return this.toggleClass(e,!1),this}toggleClass(e,s){return typeof e=="string"&&(e=e.split(/[,\s]+/)),this.each(t=>{let i=e;i==null&&s===!1&&(i=Array.from(t.classList)),i&&i.forEach(o=>{if(o!==""){let l="toggle";s!=null&&(l=s?"add":"remove"),t.classList[l](o)}})}),this}hasClass(e){if(typeof e=="string"&&(e=e.split(/[,\s]+/)),e==null&&this.length>0)return Array.from(this[0].classList);let s=!1;return this.each(t=>{s=s||e.every(i=>Array.from(t.classList??[]).includes(i))}),s}on(e,s,t){let i;typeof s=="function"?(t=s,i=void 0):i=s;let o;return i?.delegate&&(o=i.delegate,delete i.delegate),e.split(/[,\s]+/).forEach(a=>{let r=String(a).toLowerCase().split("."),c=r[0]??"",d=r[1],u=t;if(o){let h=u;u=f=>{let m=j(f.target).parents(o);m.length>0?f.delegate=m[0]:f.delegate=f.target,(f.target.matches(o)||m.length>0)&&h(f)}}this.each(h=>{this._save(h,"events",[{event:c,scope:d,callback:u,options:i}]),h.addEventListener(c,u,i)})}),this}off(e,s,t){return typeof s=="function"&&(t=s,s=void 0),(e??"").split(/[,\s]+/).forEach(o=>{let l=String(o).toLowerCase().split("."),a=l[0]??"",r=l[1];this.each(c=>{if(Array.isArray(c._mQuery?.events))for(let d=c._mQuery.events.length-1;d>=0;d--){let u=c._mQuery.events[d];u&&(r==null||r===""?(u.event==a||a==="")&&(u.callback==t||t==null)&&(c.removeEventListener(u.event,u.callback,u.options),c._mQuery.events.splice(d,1)):(u.event==a||a==="")&&u.scope==r&&(c.removeEventListener(u.event,u.callback,u.options),c._mQuery.events.splice(d,1)))}})}),this}trigger(e,s){let t,i=["click","dblclick","mousedown","mouseup","mousemove"],o=["keydown","keyup","keypress"];return e instanceof Event?t=e:i.includes(e)?t=new MouseEvent(e,s):o.includes(e)?t=new KeyboardEvent(e,s):t=new Event(e,s),this.each(l=>{l.dispatchEvent(t)}),this}attr(e,s){if(s===void 0&&typeof e=="string")return this[0]?this[0].getAttribute(e)??void 0:void 0;{let t={};return typeof e=="object"?t=e:t[e]=s,this.each(i=>{Object.entries(t).forEach(([o,l])=>{i.setAttribute(o,l)})}),this}}removeAttr(...e){return this.each(s=>{e.forEach(t=>{s.removeAttribute(t)})}),this}prop(e,s){if(s===void 0&&typeof e=="string")return this[0]?this[0][e]:void 0;{let t={};return typeof e=="object"?t=e:t[e]=s,this.each(i=>{Object.entries(t).forEach(([o,l])=>{let a=n._fixProp(o);i[a]=l,a=="innerHTML"&&n._scriptConvert(i)})}),this}}removeProp(...e){return this.each(s=>{e.forEach(t=>{delete s[n._fixProp(t)]})}),this}data(e,s){if(e instanceof Object&&typeof e!="string"){Object.entries(e).forEach(t=>{this.data(t[0],t[1])});return}if(e&&typeof e=="string"&&e.indexOf("-")!=-1&&console.error(`Key "${e}" contains "-" (dash). Dashes are not allowed in property names. Use camelCase instead.`),arguments.length<2)if(this[0]){let t=Object.assign({},this[0].dataset);return Object.keys(t).forEach(i=>{let o=t[i];if(o.startsWith("[")||o.startsWith("{"))try{t[i]=JSON.parse(o)}catch{}}),e?t[e]:t}else return;else return this.each(t=>{s!=null?t.dataset[e]=s instanceof Object?JSON.stringify(s):s:delete t.dataset[e]}),this}removeData(e){return typeof e=="string"&&(e=e.split(/[,\s]+/)),this.each(s=>{e.forEach(t=>{delete s.dataset[t]})}),this}show(){return this.toggle(!0)}hide(){return this.toggle(!1)}toggle(e){return this.each(s=>{let t=s.style.display,i=getComputedStyle(s).display,o=t=="none"||i=="none";if(o&&(e==null||e===!0)){let l=s instanceof HTMLTableRowElement?"table-row":s instanceof HTMLTableCellElement?"table-cell":"block";s.style.display=s._mQuery?.prevDisplay??(t==i&&i!="none"?"":l),this._save(s,"prevDisplay",null)}!o&&(e==null||e===!1)&&(i!="none"&&this._save(s,"prevDisplay",i),s.style.setProperty("display","none"))})}empty(){return this.html("")}html(e){return e instanceof HTMLElement?this.empty().append(e):this.prop("innerHTML",e)}text(e){return this.prop("textContent",e)}val(e){return this.prop("value",e)}change(){return this.trigger("change")}click(){return this.trigger("click")}},j=function(n,e){if(typeof n=="function"){let s=n;document.readyState=="complete"?s():window.addEventListener("load",s)}else return new $e(n,e)};j.html=n=>{let e=$e._fragment(n);return j(e.children,e)};j.version=$e.version;function rt(n){return/^[0-1]+$/.test(String(n))}function Oe(n){return/^[-+]?[0-9]+$/.test(String(n))}function Xe(n,e){return typeof n=="string"&&(n=n.replace(new RegExp(e.groupSymbol,"g"),"").replace(e.decimalSymbol,".")),(typeof n=="number"||typeof n=="string"&&n!=="")&&!isNaN(Number(n))}function ct(n,e){if(typeof n=="object"||n==="")return!1;if(Xe(n,e))return!0;let s=e,t=new RegExp("^"+(s.currencyPrefix?"\\"+s.currencyPrefix+"?":"")+"[-+]?"+(s.currencyPrefix?"\\"+s.currencyPrefix+"?":"")+"[0-9]*[\\"+s.decimalSymbol+"]?[0-9]+"+(s.currencySuffix?"\\"+s.currencySuffix+"?":"")+"$","i");return typeof n=="string"&&(n=n.replace(new RegExp(s.groupSymbol,"g"),"")),t.test(String(n))}function ut(n){return/^(0x)?[0-9a-fA-F]+$/.test(String(n))}function ze(n){return/^[a-zA-Z0-9_-]+$/.test(String(n))}function dt(n){return/^[a-zA-Z0-9._%\-+]+@[а-яА-Яa-zA-Z0-9.-]+\.[а-яА-Яa-zA-Z]+$/.test(String(n))}function ft(n){return new RegExp("^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$").test(String(n))}function we(n){if(n==null||Object.prototype.toString.call(n)!=="[object Object]")return!1;if(n.constructor===void 0)return!0;let e=Object.getPrototypeOf(n);return e===null||e===Object.prototype}function Ke(n){if(typeof n!="string")return null;n=n.trim().toUpperCase(),n[0]==="#"&&(n=n.substr(1));let e={r:0,g:0,b:0,a:1};if(n.length===3){let s=n[0]??"0",t=n[1]??"0",i=n[2]??"0";e={r:parseInt(s+s,16),g:parseInt(t+t,16),b:parseInt(i+i,16),a:1}}else if(n.length===6)e={r:parseInt(n.substr(0,2),16),g:parseInt(n.substr(2,2),16),b:parseInt(n.substr(4,2),16),a:1};else if(n.length===8)e={r:parseInt(n.substr(0,2),16),g:parseInt(n.substr(2,2),16),b:parseInt(n.substr(4,2),16),a:Math.round(parseInt(n.substr(6,2),16)/255*100)/100};else if(n.length>4&&n.substr(0,4)==="RGB("){let s=n.replace("RGB","").replace(/\(/g,"").replace(/\)/g,"").split(",");e={r:parseInt(s[0]??"0",10),g:parseInt(s[1]??"0",10),b:parseInt(s[2]??"0",10),a:1}}else if(n.length>5&&n.substr(0,5)==="RGBA("){let s=n.replace("RGBA","").replace(/\(/g,"").replace(/\)/g,"").split(",");e={r:parseInt(s[0]??"0",10),g:parseInt(s[1]??"0",10),b:parseInt(s[2]??"0",10),a:parseFloat(s[3]??"1")}}else return null;return e}function Je(n,e){let s=i(n),t=i(e);return(Math.max(s,t)+.05)/(Math.min(s,t)+.05);function i(o){let{r:l,g:a,b:r}=Ke(o)??{r:0,g:0,b:0,a:1},c=2.2,d=l/255,u=a/255,h=r/255,f=d<=.03928?d/12.92:Math.pow((d+.055)/1.055,c),m=u<=.03928?u/12.92:Math.pow((u+.055)/1.055,c),y=h<=.03928?h/12.92:Math.pow((h+.055)/1.055,c);return .2126*f+.7152*m+.0722*y}}function ht(n,e){return Je(n,e).toFixed(2)}function pt(n,e,s,t){let i,o,l;typeof n=="object"&&n!==null&&(e=n.s,s=n.v,t=n.a,n=n.h),n=n/360,e=e/100,s=s/100;let a=Math.floor(n*6),r=n*6-a,c=s*(1-e),d=s*(1-r*e),u=s*(1-(1-r)*e);switch(a%6){case 0:i=s,o=u,l=c;break;case 1:i=d,o=s,l=c;break;case 2:i=c,o=s,l=u;break;case 3:i=c,o=d,l=s;break;case 4:i=u,o=c,l=s;break;case 5:i=s,o=c,l=d;break}return{r:Math.round((i??0)*255),g:Math.round((o??0)*255),b:Math.round((l??0)*255),a:t??1}}function mt(n,e,s,t){typeof n=="object"&&n!==null&&(e=n.g,s=n.b,t=n.a,n=n.r);let i=Math.max(n,e,s),o=Math.min(n,e,s),l=i-o,a,r=i===0?0:l/i,c=i/255;switch(i){case o:a=0;break;case n:a=e-s+l*(e<s?6:0),a/=6*l;break;case e:a=s-n+l*2,a/=6*l;break;case s:a=n-e+l*4,a/=6*l;break}return{h:Math.round((a??0)*360),s:Math.round(r*100),v:Math.round(c*100),a:t??1}}function _e(n,e){let s=Object.assign({functions:!0,elements:!0,events:!0,exclude:[],parent:""},e??{});if(Array.isArray(n)){let t=Array.from(n);return t.forEach((i,o)=>{t[o]=_e(i,{functions:s.functions,elements:s.elements,events:s.events,exclude:s.exclude,parent:s.parent+"[]"})}),t}else if(we(n)){let t={};return Object.assign(t,n),Array.isArray(s.exclude)&&s.exclude.forEach(i=>{delete t[i]}),Object.keys(t).forEach(i=>{typeof s.exclude=="function"&&s.exclude(i,{obj:n,parent:s.parent})?t[i]=void 0:t[i]=_e(t[i],{functions:s.functions,elements:s.elements,events:s.events,exclude:s.exclude,parent:s.parent+(s.parent?".":"")+i}),t[i]===void 0&&delete t[i]}),t}else return n instanceof Function&&!s.functions||n instanceof Node&&!s.elements||n instanceof Event&&!s.events?void 0:n}function te(n,e,...s){if(Array.isArray(n))if(Array.isArray(e))n.splice(0,n.length),e.forEach(t=>{n.push(_e(t))});else throw new Error("Arrays can be extended with arrays only");else{if(n instanceof Node||n instanceof Event)throw new Error("HTML elmenents and events cannot be extended");if(n&&typeof n=="object"&&e!=null){if(typeof e!="object")throw new Error("Object can be extended with other objects only.");Object.keys(e).forEach(t=>{if(n[t]!=null&&typeof n[t]=="object"&&e[t]!=null&&typeof e[t]=="object"){let i=_e(e[t]);n[t]instanceof Node||n[t]instanceof Event?n[t]=i:(Array.isArray(n[t])&&we(i)&&(n[t]={}),te(n[t],i))}else n[t]=_e(e[t])})}else if(e!=null)throw new Error("Object is not extendable, only {} or [] can be extended.")}if(s.length>0)for(let t=0;t<s.length;t++)te(n,s[t]);return n}function gt(n,e){let s=0,t=0,i=1,o=0,l=0,a=String.alphabet;function r(u,h,f){if(f){for(s=h;f=r(u,s),f<76&&f>65;)++s;return+u.slice(h-1,s)}let m=a?a.indexOf(u.charAt(h)):-1;return m>-1?m+76:(m=u.charCodeAt(h)||0,m<45||m>127?m:m<46?65:m<48?m-1:m<58?m+18:m<65?m-11:m<91?m+11:m<97?m-37:m<123?m+5:m-63)}let c=""+n,d=""+e;if(c!=d){for(;i;)if(t=r(c,o++),i=r(d,l++),t<76&&i<76&&t>66&&i>66&&(t=r(c,o,o),i=r(d,l,o=s),l=s),t!=i)return t<i?-1:1}return 0}function Le(n,e){let s;try{s=n;let t=String(e).split(".");for(let i=0;i<t.length;i++)s=s[t[i]??""]}catch{s=void 0}return s}function Ze(n,e={}){if(Array.isArray(n))return n.forEach((s,t)=>{if(typeof s=="string"||typeof s=="number")n[t]={id:s,text:String(s)};else if(s!=null){if(e.itemMap!=null){let i=Le(s,e.itemMap.id);e.itemMap.id!=null&&i!=null&&(s.id=i),i=Le(s,e.itemMap.text),e.itemMap.text!=null&&i&&(s.text=i)}s.caption!=null&&s.text==null&&(s.text=s.caption),s.text!=null&&s.id==null&&(s.id=s.text),s.text==null&&s.id!=null&&(s.text=s.id)}else n[t]={id:null,text:"null"}}),n;if(typeof n=="function"){let s=n(n,e);return Ze(s,e)}else if(typeof n=="object"&&n!==null){let s=n;return Object.keys(s).map(t=>({id:t,text:String(s[t]??"")}))}}function et(n,e=""){let s="";return Object.keys(n).forEach(t=>{s!=""&&(s+="&"),typeof n[t]=="object"?s+=et(n[t],e+t+(e?"]":"")+"["):s+=`${e}${t}${e?"]":""}=${n[t]}`}),s}function yt(n,e,s,t){let i=s?.dataType??t,o=e.body;switch(e.method=String(e.method).toUpperCase(),i){case"RESTFULL":case"RESTFULJSON":{["POST","PUT","DELETE"].includes(String(e.method))&&(e.headers["Content-Type"]="application/json"),String(e.method)=="GET"&&(i=="RESTFULLJSON"&&(o={request:o}),l());break}case"HTTP":case"HTTPJSON":case"JSON":{String(e.method)=="GET"?((i=="JSON"||i==="HTTPJSON")&&(o={request:o}),l()):(e.headers["Content-Type"]="application/json",e.method="POST");break}default:typeof i=="function"?e=i(n,e,s):console.log(`ERROR: Unsupported dataType "${i}". Supported types are JSON (default), HTTP, RESTFULL. For backward compatibility HTTPJSON is same as JSON. RESTULFLJSON will encode GET request as JSON.`)}return e.body!=null&&(e.body=typeof e.body=="string"?e.body:JSON.stringify(e.body)),e;function l(){let a=o;Object.keys(a).forEach(r=>{let c=a[r];typeof c=="object"&&(c=JSON.stringify(c)),n.searchParams.append(r,String(c??""))}),delete e.body}}function bt(n){let e=[],s=n.replace(/\/\(/g,"(?:/").replace(/\+/g,"__plus__").replace(/(\/)?(\.)?:(\w+)(?:(\(.*?\)))?(\?)?/g,(t,i,o,l,a,r)=>(e.push({name:l,optional:!!r}),i=i||"",""+(r?"":i)+"(?:"+(r?i:"")+(o||"")+(a||o&&"([^/.]+?)"||"([^/]+?)")+")"+(r||""))).replace(/([\/.])/g,"\\$1").replace(/__plus__/g,"(.+)").replace(/\*/g,"(.*)");return{path:new RegExp("^"+s+"$","i"),keys:e}}function xt(n,e=250){let s;return(...t)=>{clearTimeout(s),s=setTimeout(()=>{n(...t)},e)}}async function vt(n=0){return new Promise(e=>{setTimeout(()=>e(),n)})}function Ae(n){if(n==null)return n;switch(typeof n){case"number":break;case"string":n=String(n).replace(/(?:\r\n|\r|\n)/g," ").replace(/\s\s+/g," ").trim();break;case"object":if(Array.isArray(n)){let e=te([],n);return e.forEach((s,t)=>{e[t]=Ae(s)}),e}else{let e=te({},n);return Object.keys(e).forEach(s=>{e[s]=Ae(e[s])}),e}}return n}function Fe(n){if(n==null)return n;switch(typeof n){case"number":break;case"string":n=String(n).replace(/<(?:[^>=]|='[^']*'|="[^"]*"|=[^'"][^\s>]*)*>/ig,"");break;case"object":if(Array.isArray(n)){let e=te([],n);return e.forEach((s,t)=>{e[t]=Fe(s)}),e}else{let e=te({},n);return Object.keys(e).forEach(s=>{e[s]=Fe(e[s])}),e}}return n}function Ee(n){if(n==null)return n;switch(typeof n){case"number":break;case"string":n=String(n).replace(/&/g,"&amp;").replace(/>/g,"&gt;").replace(/</g,"&lt;").replace(/"/g,"&quot;");break;case"object":if(Array.isArray(n)){let e=te([],n);return e.forEach((s,t)=>{e[t]=Ee(s)}),e}else{let e=te({},n);return Object.keys(e).forEach(s=>{e[s]=Ee(e[s])}),e}}return n}function He(n){if(n==null)return n;switch(typeof n){case"number":break;case"string":n=String(n).replace(/&gt;/g,">").replace(/&lt;/g,"<").replace(/&quot;/g,'"').replace(/&amp;/g,"&");break;case"object":if(Array.isArray(n)){let e=te([],n);return e.forEach((s,t)=>{e[t]=He(s)}),e}else{let e=te({},n);return Object.keys(e).forEach(s=>{e[s]=He(e[s])}),e}}return n}function Tt(n){if(n===""||n==null)return"";let e=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-￿\w-]/g;return(n+"").replace(e,(s,t)=>t?s==="\0"?"\uFFFD":s.slice(0,-1)+"\\"+s.charCodeAt(s.length-1).toString(16)+" ":"\\"+s)}function wt(n){if(n===""||n==null)return"";let e=/\\[\da-fA-F]{1,6}[\x20\t\r\n\f]?|\\([^\r\n\f])/g;return n.replace(e,(s,t)=>{let i=parseInt("0x"+s.slice(1),16)-65536;return t||(i<0?String.fromCharCode(i+65536):String.fromCharCode(i>>10|55296,i&1023|56320))})}function _t(n){let e=new TextEncoder().encode(n),s="";for(let t of e)s+=String.fromCharCode(t);return btoa(s)}function kt(n){let e=atob(n),s=new Uint8Array(e.length);for(let t=0;t<e.length;t++)s[t]=e.charCodeAt(t);return new TextDecoder().decode(s)}async function Ct(n){let e=new TextEncoder().encode(n);return crypto.subtle.digest("SHA-256",e).then(s=>Array.from(new Uint8Array(s)).map(i=>i.toString(16).padStart(2,"0")).join(""))}function Et(n,e){return typeof n!="string"||!e||typeof e!="object"?n:n.replace(/\${([^}]+)?}/g,function(s,t){return e[t]||t})}var bi=j;function St(n,e){let s=new RegExp(`<${e.tag}[^>]*class=["']${e.class.replace(/-/g,"\\-")}["'][^>]*>([\\s\\S]*?)<\\/${e.tag}>`,"ig");if(typeof n=="string")for(;n.indexOf(`<${e.tag} class="${e.class}"`)!==-1;)n=n.replace(s,"$1");else for(;n.innerHTML.indexOf(`<${e.tag} class="${e.class}"`)!==-1;)n.innerHTML=n.innerHTML.replace(s,"$1")}function Ne(n,e,s,t){let i=t.wholeWord;typeof e!="string"&&(e=String(e)),e=e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&").replace(/&/g,"&amp;").replace(/</g,"&gt;").replace(/>/g,"&lt;");let o=new RegExp((i?"\\b":"")+e+(i?"\\b":"")+"(?![^<]*>)","i"+(t.onlyFirst?"":"g"));return n=n.replace(o,s)}function Rt(n,e,s={onlyFirst:!1,wholeWord:!1,isRegex:!1}){s.tag??="span",s.class??="tsg-marker",s.raplace=i=>`<${s.tag} class="${s.class}">${i}</${s.tag}>`;let t=s.isRegex||!1;return Array.isArray(e)||(e!=null&&e!==""?e=[e]:e=[]),typeof n=="string"?(St(n,s),e.forEach(i=>{if(t)try{let o="i"+(s.onlyFirst?"":"g"),l=new RegExp(i,o);n=n.replace(l,s.raplace)}catch(o){console.error("Invalid regular expression:",o),n=Ne(n,i,s.raplace,s)}else n=Ne(n,i,s.raplace,s)})):bi(n).each(i=>{St(i,s),t?e.forEach(o=>{try{let d=function(u){if(u.nodeType===3)c.push(u);else if(u.nodeType===1&&u.tagName!=="SCRIPT"&&u.tagName!=="STYLE")for(let h=0;h<u.childNodes.length;h++)d(u.childNodes[h])};var l=d;let a="i";s.onlyFirst||(a+="g"),s.wholeWord&&(o="\b"+o+"\b");let r=new RegExp(o,a),c=[];d(i),c.forEach(u=>{let h=u.nodeValue,f=[],m;if(s.onlyFirst)m=r.exec(h),m&&f.push({index:m.index,text:m[0]});else for(;(m=r.exec(h))!==null;)f.push({index:m.index,text:m[0]});if(f.length>0){let y=u.parentNode,x=document.createDocumentFragment(),b=0;f.forEach(g=>{g.index>b&&x.appendChild(document.createTextNode(h.substring(b,g.index)));let v=document.createElement(s.tag);v.className=s.class,v.appendChild(document.createTextNode(g.text)),x.appendChild(v),b=g.index+g.text.length}),b<h.length&&x.appendChild(document.createTextNode(h.substring(b))),y.replaceChild(x,u)}})}catch(a){console.error("Invalid regular expression:",a),i.innerHTML=Ne(i.innerHTML,o,s.raplace,s)}}):e.forEach(o=>{i.innerHTML=Ne(i.innerHTML,o,s.raplace,s)})}),n}var se={};function Pe(n){return n==null?(console.log('ERROR: Property "name" is required but not supplied.'),!1):se[n]!=null?(console.log(`ERROR: Object named "${n}" is already registered as TsUi.${n}.`),!1):ze(n)?!0:(console.log('ERROR: Property "name" has to be alpha-numeric (a-z, 0-9, dash and underscore).'),!1)}var xe=j;function $t(n,e,s){return new Promise(t=>{let i=e??{},o="";typeof n=="object"?(i=n,o=String(i.text??"")):o=String(n??""),i.where??=document.body,i.timeout??=15e3,typeof s.tmpSlot.notify_resolve=="function"&&(s.tmpSlot.notify_resolve(),xe(s.tmpSlot.notify_where).find("#tsg-notify").remove()),s.tmpSlot.notify_resolve=t,s.tmpSlot.notify_where=i.where,clearTimeout(s.tmpSlot.notify_timer);let l=i.where;if(o){if(typeof i.actions=="object"){let r={};Object.keys(i.actions).forEach(c=>{r[c]=`<a class="tsg-notify-link" value="${c}">${c}</a>`}),o=s.execTemplate(o,r)}let a=`
3
+ <div id="tsg-notify" style="${l==document.body?"position: fixed":""}">
4
+ <div class="${i.class??""} ${i.error?"tsg-notify-error":""} ${i.success?"tsg-notify-success":""}">
5
+ ${o}
6
+ <span class="tsg-notify-close tsg-icon-cross"></span>
7
+ </div>
8
+ </div>`;xe(l).append(a),xe(l).find("#tsg-notify").find(".tsg-notify-close").on("click",r=>{xe(l).find("#tsg-notify").remove(),t()}),i.actions&&xe(l).find("#tsg-notify .tsg-notify-link").on("click",r=>{let c=xe(r.target).attr("value")??"";i.actions[c](),xe(l).find("#tsg-notify").remove(),t()}),i.timeout>0&&(s.tmpSlot.notify_timer=setTimeout(()=>{xe(l).find("#tsg-notify").remove(),t()},i.timeout))}})}var xi=j,Se=class{type;detail;owner;target;phase;object;execute;isStopped;isCancelled;onComplete;listeners;complete;_resolve;_reject;constructor(e,s){Object.assign(this,{type:s.type??null,detail:s,owner:e,target:s.target??null,phase:s.phase??"before",object:s.object??null,execute:null,isStopped:!1,isCancelled:!1,onComplete:null,listeners:[]}),delete s.type,delete s.target,delete s.object,this.complete=new Promise((t,i)=>{this._resolve=t,this._reject=i}),this.complete.catch(()=>{})}finish(e){e&&te(this.detail,e),this.phase="after",this.owner.trigger.call(this.owner,this)}done(e){this.listeners.push(e)}preventDefault(){this._reject(),this.isCancelled=!0}stopPropagation(){this.isStopped=!0}};var ne=class{activeEvents=[];listeners=[];debug=!1;name;box;constructor(e){if(this.activeEvents=[],this.listeners=[],typeof e<"u"){if(!Pe(e))return;se[e]=this}this.debug=!1}on(e,s){return typeof e=="string"?e=e.split(/[,\s]+/):e=[e],e.forEach(t=>{let i=typeof t=="string"?t:t.type+":"+t.execute+"."+t.scope;if(typeof t=="string"){let[o,l]=t.split("."),[a,r]=(o??"").replace(":complete",":after").replace(":done",":after").split(":");t={type:a,execute:r??"before",scope:l}}if(t=te({type:null,execute:"before",onComplete:null},t),!t.type){console.log("ERROR: You must specify event type when calling .on() method of "+this.name);return}if(!s){console.log("ERROR: You must specify event handler function when calling .on() method of "+this.name);return}Array.isArray(this.listeners)||(this.listeners=[]),this.listeners.push({name:i,edata:t,handler:s}),this.debug&&console.log("TsBase: add event",{name:i,edata:t,handler:s})}),this}off(e,s){return typeof e=="string"?e=e.split(/[,\s]+/):e=[e],e.forEach(t=>{let i=typeof t=="string"?t:t.type+":"+t.execute+"."+t.scope;if(typeof t=="string"){let[l,a]=t.split("."),[r,c]=(l??"").replace(":complete",":after").replace(":done",":after").split(":");t={type:r||"*",execute:c||"",scope:a||""}}if(t=te({type:null,execute:null,onComplete:null},t),!t.type&&!t.scope){console.log("ERROR: You must specify event type when calling .off() method of "+this.name);return}s||(s=void 0);let o=0;this.listeners=this.listeners.filter(l=>(t.type==="*"||t.type===l.edata.type)&&(t.execute===""||t.execute===l.edata.execute)&&(t.scope===""||t.scope===l.edata.scope)&&(t.handler==null||t.handler===l.edata.handler)?(o++,!1):!0),this.debug&&console.log(`TsBase: remove event (${o})`,{name:i,edata:t,handler:s})}),this}trigger(e,s){let t;if(arguments.length==1?typeof e=="string"?t={type:e,target:this}:t=e:(t=s,t.type=e,t.target=t.target??this),we(t)&&t.phase=="after"){if(t=this.activeEvents.find(r=>r.type==t.type&&r.target==t.target),!t)return console.log(`ERROR: Cannot find even handler for "${t?.type}" on "${t?.target}".`),t;console.log(`NOTICE: This syntax "edata.trigger({ phase: 'after' })" is outdated. Use edata.finish() instead.`)}else t instanceof Se||(t=new Se(this,t),this.activeEvents.push(t));let i,o,l;Array.isArray(this.listeners)||(this.listeners=[]),this.debug&&console.log(`TsBase: trigger "${t.type}:${t.phase}"`,t);for(let r=this.listeners.length-1;r>=0;r--){let c=this.listeners[r];if(c!=null&&(c.edata.type===t.type||c.edata.type==="*")&&(c.edata.target===t.target||c.edata.target==null)&&(c.edata.execute===t.phase||c.edata.execute==="*"||c.edata.phase==="*")&&(Object.keys(c.edata).forEach(d=>{t[d]==null&&c.edata[d]!=null&&(t[d]=c.edata[d])}),i=[],l=new RegExp(/\((.*?)\)/).exec(String(c.handler).split("=>")[0]??""),l&&(i=(l[1]??"").split(/\s*,\s*/)),i.length===2?(c.handler.call(this,t.target,t),this.debug&&console.log(" - call (old)",c.handler)):(c.handler.call(this,t),this.debug&&console.log(" - call",c.handler)),t.isStopped===!0||t.stop===!0))return t}let a="on"+t.type.substr(0,1).toUpperCase()+t.type.substr(1);if(t.phase==="before"&&typeof this[a]=="function"&&(o=this[a],i=[],l=new RegExp(/\((.*?)\)/).exec(String(o).split("=>")[0]??""),l&&(i=(l[1]??"").split(/\s*,\s*/)),i.length===2?(o.call(this,t.target,t),this.debug&&console.log(" - call: on[Event] (old)",o)):(o.call(this,t),this.debug&&console.log(" - call: on[Event]",o)),t.isStopped===!0||t.stop===!0)||t.object!=null&&t.phase==="before"&&typeof t.object[a]=="function"&&(o=t.object[a],i=[],l=new RegExp(/\((.*?)\)/).exec(String(o).split("=>")[0]??""),l&&(i=(l[1]??"").split(/\s*,\s*/)),i.length===2?(o.call(this,t.target,t),this.debug&&console.log(" - call: edata.object (old)",o)):(o.call(this,t),this.debug&&console.log(" - call: edata.object",o)),t.isStopped===!0||t.stop===!0))return t;if(t.phase==="after"){typeof t.onComplete=="function"&&t.onComplete.call(this,t);for(let c=0;c<t.listeners.length;c++)typeof t.listeners[c]=="function"&&(t.listeners[c].call(this,t),this.debug&&console.log(" - call: done",o));t._resolve(t),this.debug&&console.log(`TsBase: trigger "${t.type}:${t.phase}"`,t);let r=this.activeEvents.indexOf(t);r!==-1&&this.activeEvents.splice(r,1)}return t}render(e){}unmount(){let e=this.trigger("unmount",{target:this.name});if(e.isCancelled)return;let s=[];this.box instanceof HTMLElement&&this.box.classList.forEach(t=>{t.startsWith("tsg-")&&s.push(t)}),xi(this.box).off().removeClass(s).removeAttr("name").html(""),this.box=null,e.finish()}};var G=j;function je(n,e,s){n.actions=n.actions??{};let t=Object.keys(e);return t.forEach(i=>{let o=n["btn_"+i];o&&(e[i]={text:s.lang(String(o.text??e[i]??"")),class:o.class??"",style:o.style??"",attrs:o.attrs??""},delete n["btn_"+i]),["text","class","style","attrs"].forEach(l=>{n[i+"_"+l]&&(typeof e[i]=="string"&&(e[i]={text:e[i]}),e[i][l]=n[i+"_"+l],delete n[i+"_"+l])})}),t.includes("yes")&&t.includes("no")&&(s.settings.macButtonOrder?s.extend(n.actions,{no:e.no,yes:e.yes}):s.extend(n.actions,{yes:e.yes,no:e.no})),t.includes("ok")&&t.includes("cancel")&&(s.settings.macButtonOrder?s.extend(n.actions,{cancel:e.cancel,ok:e.ok}):s.extend(n.actions,{ok:e.ok,cancel:e.cancel})),n}function tt(n,e,s){let t,i,o,l={},a=()=>{let x=G(n?.box).find(".tsg-message");x.length!=0&&(l=x.get(0)._msg_options||{},typeof l?.close=="function"&&l.close())},r=x=>{let g=x.box?._msg_prevFocus;if(G(n.box).find(".tsg-message").length<=1?n.owner?n.owner.unlock?.(n.param,150):s.unlock(n.box,150):G(n.box).find(`#tsg-message-${n.owner?.name}-${x.msgIndex-1}`).css("z-index","1500"),g){let v=G(g).closest(".tsg-message");v.length>0?v.get(0)._msg_options.setFocus(g):g.focus()}else typeof n.owner?.focus=="function"&&n.owner.focus();if(G(x.box).remove(),x.msgIndex===0){let v=x.tmp;y.css("z-index",v.zIndex),G(n.box).css("overflow",v.overflow)}x.trigger&&o?.finish?.()};if(typeof e=="string"||typeof e=="number"?l={width:String(e).length<300?350:550,height:String(e).length<300?170:250,text:String(e)}:e==null?l=n:l=e??{},(l.text===""||l.text==null)&&(l.body===""||l.body==null)){a();return}if(l.text!=null&&(l.body=`<div class="tsg-centered tsg-msg-text">${l.text}</div>`),l.width==null&&(l.width=350),l.height==null&&(l.height=170),l.hideOn==null&&(l.hideOn=["esc"]),l.cancelAction??="Ok",l.on==null){let x=l;l=new ne,s.extend(l,x)}let c=l;c.on("open",x=>{s.bindEvents(G(c.box).find(".tsg-eaction"),c);let b=x.detail;G(b.box).find("button, input, textarea, [name=hidden-first]").off(".message").on("keydown.message",function(g){g.keyCode==27&&c.hideOn.includes("esc")&&(c.cancelAction?c.action(c.cancelAction):c.close())}),setTimeout(()=>c.setFocus(c.focus),300)}),c.off(".prom");let d={self:l,action(x){return c.on("action.prom",x),d},close(x){return c.on("close.prom",x),d},open(x){return c.on("open.prom",x),d},then(x){return c.on("open:after.prom",x),d}};l.actions==null&&l.buttons==null&&l.html==null&&(l.actions={Ok(x){x.detail?.self?.close?.()}}),c.off(".buttons"),l.actions!=null&&(l.buttons="",Object.keys(l.actions).forEach(x=>{let b=l.actions[x],g=x;if(typeof b=="function"&&(l.buttons+=`<button class="tsg-btn tsg-eaction" data-click='["action","${x}","event"]' name="${x}">${x}</button>`),typeof b=="object"&&b!==null){let v=b;l.buttons+=`<button class="tsg-btn tsg-eaction ${v.class||""}" name="${x}" data-click='["action","${x}","event"]'
9
+ style="${v.style??""}" ${v.attrs??""}>${v.text||x}</button>`,g=Array.isArray(l.actions)?String(v.text):x}typeof b=="string"&&(l.buttons+=`<button class="tsg-btn tsg-eaction" name="${b}" data-click='["action","${b}","event"]'>${b}</button>`,g=b),typeof g=="string"&&(g=(g[0]??"").toLowerCase()+g.substr(1).replace(/\s+/g,"")),d[g]=function(v){return c.on("action.buttons",w=>{let T=w.detail,_=String(T.action);(_[0]??"").toLowerCase()+_.substr(1).replace(/\s+/g,"")==g&&v(w)}),d}})),["html","body","buttons"].forEach(x=>{l[x]=String(l[x]??"").trim()}),(l.body!==""||l.buttons!=="")&&(l.html=`
10
+ <div class="tsg-message-body">${l.body||""}</div>
11
+ <div class="tsg-message-buttons">${l.buttons||""}</div>
12
+ `);let u=getComputedStyle(G(n.box).get(0)),h=parseFloat(u.width),f=parseFloat(u.height),m=0;G(n.after).length>0&&(u=getComputedStyle(G(n.after).get(0)),m=parseInt(u.display!="none"?u.height:"0")),(l.width??0)>h&&(l.width=h-10),(l.height??0)>f-m&&(l.height=f-10-m),l.width!=null&&(l.originalWidth=l.width),l.height!=null&&(l.originalHeight=l.height),parseInt(String(l.width))<0&&(l.width=h+(l.width??0)),parseInt(String(l.width))<10&&(l.width=10),parseInt(String(l.height))<0&&(l.height=f+(l.height??0)-m),parseInt(String(l.height))<10&&(l.height=10),(l.originalHeight??0)<0&&(l.height=f+(l.originalHeight??0)-m),(l.originalWidth??0)<0&&(l.width=h+(l.originalWidth??0)*2);let y=G(n.box).find(n.after);if(l.tmp||(l.tmp={zIndex:String(y.css("z-index")),overflow:u.overflow}),l.html===""&&l.body===""&&l.buttons==="")a();else{l.msgIndex=G(n.box).find(".tsg-message").length,l.msgIndex===0&&typeof s.lock=="function"&&(G(n.box).css("overflow","hidden"),n.owner?n.owner.lock?.(n.param):s.lock(n.box)),G(n.box).find(".tsg-message").css("z-index","1390"),y.css("z-index","1501");let x=`
13
+ <div id="tsg-message-${n.owner?.name}-${l.msgIndex}" class="tsg-message" data-mousedown="stop"
14
+ style="z-index: 1500; left: ${(h-(l.width??0))/2}px; top: ${m}px;
15
+ width: ${l.width}px; height: ${l.height}px; transform: translateY(-${l.height}px)"
16
+ ${(l.hideOn??[]).includes("click")?n.param?`data-click='["message", "${n.param}"]`:'data-click="message"':""}>
17
+ <span name="hidden-first" tabindex="0" style="position: absolute; top: 0; outline: none"></span>
18
+ ${l.html}
19
+ <span name="hidden-last" tabindex="0" style="position: absolute; top: 0; outline: none"></span>
20
+ </div>`;G(n.after).length>0?G(n.box).find(n.after).after(x):G(n.box).prepend(x),l.box=G(n.box).find(`#tsg-message-${n.owner?.name}-${l.msgIndex}`)[0],s.bindEvents(l.box,s.self),G(l.box).addClass("animating"),l.box._msg_options=l,l.box._msg_prevFocus=document.activeElement,setTimeout(()=>{if(o=c.trigger("open",{target:s.ownerName,box:l.box,self:l}),o.isCancelled===!0){G(n.box).find(`#tsg-message-${n.owner?.name}-${l.msgIndex}`).remove(),l.msgIndex===0&&(y.css("z-index",l.tmp.zIndex),G(n.box).css("overflow",l.tmp.overflow));return}G(l.box).css({transition:"0.3s",transform:"translateY(0px)"})},0),i=setTimeout(()=>{G(n.box).find(`#tsg-message-${n.owner?.name}-${l.msgIndex}`).removeClass("animating").css({transition:"0s"}),o?.finish?.()},300)}return l.action=(x,b)=>{let g=l.actions?.[x];g instanceof Object&&g.onClick&&(g=g.onClick);let v=c.trigger("action",{target:s.ownerName,action:x,self:l,originalEvent:b,value:l.input?l.input.value:null}),w=v;w.isCancelled!==!0&&(typeof g=="function"&&g(v),w.finish?.())},l.close=()=>{if(o=c.trigger("close",{target:"self",box:l.box,self:l}),o.isCancelled!==!0){if(clearTimeout(i),G(l.box).hasClass("animating")){clearTimeout(t),r(c);return}G(l.box).addClass("tsg-closing animating").css({transition:"0.15s",transform:"translateY(-"+l.height+"px)"}),(l.msgIndex??0)!==0&&G(n.box).find(`#tsg-message-${n.owner?.name}-${(l.msgIndex??1)-1}`).css("z-index","1499"),t=setTimeout(()=>{r(c)},150)}},l.setFocus=x=>{let b=G(n.box).find(".tsg-message").length-1,g=G(n.box).find(`#tsg-message-${n.owner?.name}-${b}`),v="input, button, select, textarea, [contentEditable], .tsg-input";x!=null?(typeof x=="string"?g.find(v).filter(x).get(0):g.find(v).get(x))?.focus():g.find("[name=hidden-first]").get(0)?.focus(),G(n.box).find(".tsg-message").find(v+",[name=hidden-first],[name=hidden-last]").off(".keep-focus"),G(g).find(v+",[name=hidden-first],[name=hidden-last]").on("blur.keep-focus",function(w){setTimeout(()=>{let T=document.activeElement,_=T!=null&&G(g).find(v).filter(T).length>0,C=G(T).attr("name");!_&&T&&T!==document.body&&G(g).find(v).get(0)?.focus(),C=="hidden-last"&&G(g).find(v).get(0)?.focus(),C=="hidden-first"&&G(g).find(v).get(-1)?.focus()},1)})},d}function Mt(n,e,s){return tt(n,e,s)}function Dt(n,e,s){let t={};["string","number"].includes(typeof e)?t={text:e}:e==null?t=n:t=e??{},s.normButtons(t,{yes:"Yes",no:"No"}),t.cancelAction??="No";let i=s.message(n,t);return i&&i.action(o=>{o.detail?.self?.close?.()}),i}function It(n,e,s){let t={};["string","number"].includes(typeof e)?t={label:e}:e==null?t=n:t=e??{},t.cancelAction??="Cancel",t.label&&(t.focus=0,t.body=t.textarea?`<div class="tsg-prompt textarea">
21
+ <div>${t.label}</div>
22
+ <textarea id="TsPrompt" class="tsg-input" ${t.attrs??""}
23
+ data-keydown="keydown|event" data-keyup="change|event"></textarea>
24
+ </div>`:`<div class="tsg-prompt tsg-centered">
25
+ <label>${t.label}&nbsp;</label>
26
+ <input id="TsPrompt" class="tsg-input" ${t.attrs??""}
27
+ data-keydown="keydown|event" data-keyup="change|event">
28
+ </div>`),s.normButtons(t,{ok:s.lang("Ok"),cancel:s.lang("Cancel")});let i=s.message(n,t);return i&&(i.change=function(o){return i.self?.on?.("change.prom",o),i},i.action(o=>{o.detail?.self?.close?.()}).then(o=>{let l=o.detail;(l?.self).input=G(l?.box).find("#TsPrompt").get(0),G(l?.box).find("#TsPrompt").on("keydown",a=>{a.keyCode==13&&a.shiftKey===!1&&a.preventDefault()}).on("keyup",a=>{let r=l?.self,c=r?.trigger?.("change",{value:a.target.value,input:a.target,originalEvent:a});a.keyCode==13&&a.shiftKey===!1&&r?.action?.("Ok",a),c?.finish?.()})})),i}var K=j;function Ot(n,e,s,t){return new Promise((i,o)=>{let l=getComputedStyle(n),a=parseInt(l.width),r=parseInt(l.height),c=.5;if(!n||!e){console.log("ERROR: Cannot do transition when one of the divs is null");return}switch(n.parentNode.style.cssText+="perspective: 900px; overflow: hidden;",n.style.cssText+="; position: absolute; z-index: 1019; backface-visibility: hidden",e.style.cssText+="; position: absolute; z-index: 1020; backface-visibility: hidden",s){case"slide-left":n.style.cssText+="overflow: hidden; transform: translate3d(0, 0, 0)",e.style.cssText+="overflow: hidden; transform: translate3d("+a+"px, 0, 0)",K(e).show(),setTimeout(()=>{e.style.cssText+="transition: "+c+"s; transform: translate3d(0, 0, 0)",n.style.cssText+="transition: "+c+"s; transform: translate3d(-"+a+"px, 0, 0)"},1);break;case"slide-right":n.style.cssText+="overflow: hidden; transform: translate3d(0, 0, 0)",e.style.cssText+="overflow: hidden; transform: translate3d(-"+a+"px, 0, 0)",K(e).show(),setTimeout(()=>{e.style.cssText+="transition: "+c+"s; transform: translate3d(0px, 0, 0)",n.style.cssText+="transition: "+c+"s; transform: translate3d("+a+"px, 0, 0)"},1);break;case"slide-down":n.style.cssText+="overflow: hidden; z-index: 1; transform: translate3d(0, 0, 0)",e.style.cssText+="overflow: hidden; z-index: 0; transform: translate3d(0, 0, 0)",K(e).show(),setTimeout(()=>{e.style.cssText+="transition: "+c+"s; transform: translate3d(0, 0, 0)",n.style.cssText+="transition: "+c+"s; transform: translate3d(0, "+r+"px, 0)"},1);break;case"slide-up":n.style.cssText+="overflow: hidden; transform: translate3d(0, 0, 0)",e.style.cssText+="overflow: hidden; transform: translate3d(0, "+r+"px, 0)",K(e).show(),setTimeout(()=>{e.style.cssText+="transition: "+c+"s; transform: translate3d(0, 0, 0)",n.style.cssText+="transition: "+c+"s; transform: translate3d(0, 0, 0)"},1);break;case"flip-left":n.style.cssText+="overflow: hidden; transform: rotateY(0deg)",e.style.cssText+="overflow: hidden; transform: rotateY(-180deg)",K(e).show(),setTimeout(()=>{e.style.cssText+="transition: "+c+"s; transform: rotateY(0deg)",n.style.cssText+="transition: "+c+"s; transform: rotateY(180deg)"},1);break;case"flip-right":n.style.cssText+="overflow: hidden; transform: rotateY(0deg)",e.style.cssText+="overflow: hidden; transform: rotateY(180deg)",K(e).show(),setTimeout(()=>{e.style.cssText+="transition: "+c+"s; transform: rotateY(0deg)",n.style.cssText+="transition: "+c+"s; transform: rotateY(-180deg)"},1);break;case"flip-down":n.style.cssText+="overflow: hidden; transform: rotateX(0deg)",e.style.cssText+="overflow: hidden; transform: rotateX(180deg)",K(e).show(),setTimeout(()=>{e.style.cssText+="transition: "+c+"s; transform: rotateX(0deg)",n.style.cssText+="transition: "+c+"s; transform: rotateX(-180deg)"},1);break;case"flip-up":n.style.cssText+="overflow: hidden; transform: rotateX(0deg)",e.style.cssText+="overflow: hidden; transform: rotateX(-180deg)",K(e).show(),setTimeout(()=>{e.style.cssText+="transition: "+c+"s; transform: rotateX(0deg)",n.style.cssText+="transition: "+c+"s; transform: rotateX(180deg)"},1);break;case"pop-in":n.style.cssText+="overflow: hidden; transform: translate3d(0, 0, 0)",e.style.cssText+="overflow: hidden; transform: translate3d(0, 0, 0); transform: scale(.8); opacity: 0;",K(e).show(),setTimeout(()=>{e.style.cssText+="transition: "+c+"s; transform: scale(1); opacity: 1;",n.style.cssText+="transition: "+c+"s;"},1);break;case"pop-out":n.style.cssText+="overflow: hidden; transform: translate3d(0, 0, 0); transform: scale(1); opacity: 1;",e.style.cssText+="overflow: hidden; transform: translate3d(0, 0, 0); opacity: 0;",K(e).show(),setTimeout(()=>{e.style.cssText+="transition: "+c+"s; opacity: 1;",n.style.cssText+="transition: "+c+"s; transform: scale(1.7); opacity: 0;"},1);break;default:n.style.cssText+="overflow: hidden; transform: translate3d(0, 0, 0)",e.style.cssText+="overflow: hidden; translate3d(0, 0, 0); opacity: 0;",K(e).show(),setTimeout(()=>{e.style.cssText+="transition: "+c+"s; opacity: 1;",n.style.cssText+="transition: "+c+"s"},1);break}setTimeout(()=>{s==="slide-down"&&(K(n).css("z-index","1019"),K(e).css("z-index","1020")),e&&K(e).css({opacity:"1"}).css({transition:"",transform:""}),n&&K(n).css({opacity:"1"}).css({transition:"",transform:""}),typeof t=="function"&&t(),i()},c*1e3)})}function zt(n,e={},...s){if(n==null)return;let t=typeof e=="string"?{msg:e}:{...e};s[0]!=null&&(t.spinner=s[0]),t=te({spinner:!1},t);let i=n;n?.[0]instanceof Node&&(i=Array.isArray(n)?n:n.get()),!t.msg&&t.msg!==0&&(t.msg=""),st(i);let o=K(i).get(0),l=o.scrollWidth,r=`height: ${o.scrollHeight}px; width: ${l}px`;o.tagName=="BODY"&&(r="position: fixed; right: 0; bottom: 0;"),K(i).prepend(`<div class="tsg-lock" style="${r}"></div><div class="tsg-lock-msg"></div>`);let c=K(i).find(".tsg-lock"),d=K(i).find(".tsg-lock-msg");t.msg||d.css({"background-color":"transparent","background-image":"none",border:"0px","box-shadow":"none"}),t.spinner===!0&&(t.msg=`<div class="tsg-spinner" ${t.msg?"":'style="width: 35px; height: 35px"'}></div>`+t.msg),t.msg?d.html(String(t.msg)).css("display","block"):d.remove(),t.opacity!=null&&c.css("opacity",String(t.opacity)),c.css({display:"block"}),t.bgColor&&c.css({"background-color":t.bgColor});let h=getComputedStyle(c.get(0)).opacity??.15;c.on("mousedown",function(){typeof t.onClick=="function"?t.onClick():c.css({transition:".2s",opacity:String(Number(h)*1.5)})}).on("mouseup",function(){typeof t.onClick!="function"&&c.css({transition:".2s",opacity:String(h)})}).on("mousewheel",function(f){f&&(f.stopPropagation(),f.preventDefault())})}function st(n,e){if(n==null)return;clearTimeout(n._prevUnlock);let t=n;if(n?.[0]instanceof Node&&(t=Array.isArray(n)?n:n.get()),Oe(e)&&(e??0)>0){K(t).find(".tsg-lock").css({transition:(e??0)/1e3+"s",opacity:0});let i=K(t).get(0);clearTimeout(i._prevUnlock),i._prevUnlock=setTimeout(()=>{K(t).find(".tsg-lock").remove()},e),K(t).find(".tsg-lock-msg").remove()}else K(t).find(".tsg-lock").remove(),K(t).find(".tsg-lock-msg").remove()}function Lt(n,e){let s=K(n),t=0;if(s.length>0){let i=getComputedStyle(s[0]);switch(e){case"width":t=parseFloat(i.width),i.width==="auto"&&(t=0);break;case"height":t=parseFloat(i.height),i.height==="auto"&&(t=0);break;default:t=parseFloat(String(i[e]??""))||0;break}}return t}function At(n,e,s){let t=K("body > #_tmp_width");t.length===0&&(K("body").append('<div id="_tmp_width" style="position: absolute; top: -9000px;"></div>'),t=K("body > #_tmp_width")),s===void 0&&n.trim().startsWith("<")&&n.trim().endsWith(">")&&(s=!0),t.html(s?n:Ee(n??"")).attr("style",`position: absolute; top: -9000px; ${e||""}`);let i=t[0].clientWidth,o=t[0].clientHeight;return t.html(""),{width:i,height:o}}function Ft(n,e){let s=n;if(s?.length==0)return;let t=n;s?.[0]instanceof Node&&(t=Array.isArray(n)?n:n.get()),K(t).each(i=>{let o=K(i).data();Object.keys(o).forEach(l=>{if(["click","dblclick","mouseenter","mouseleave","mouseover","mouseout","mousedown","mousemove","mouseup","contextmenu","focus","focusin","focusout","blur","input","change","keydown","keyup","keypress"].indexOf(String(l).toLowerCase())==-1)return;let r=Array.isArray(o[l])?o[l]:[o[l]];typeof o[l]=="string"&&(r=o[l].split("|").map(d=>{let u=d;d==="true"&&(u=!0),d==="false"&&(u=!1),d==="undefined"&&(u=void 0),d==="null"&&(u=null),typeof u=="string"&&parseFloat(u)==u&&(u=parseFloat(u));let h=["'",'"',"`"];return typeof u=="string"&&h.includes(u[0]??"")&&h.includes(u[u.length-1]??"")&&(u=u.substring(1,u.length-1)),u}));let c=String(r[0]);r=r.slice(1),K(i).off(l+".TsUtils-bind").on(l+".TsUtils-bind",function(d){switch(c){case"alert":alert(r[0]);break;case"stop":d.stopPropagation();break;case"prevent":d.preventDefault();break;case"stopPrevent":return d.stopPropagation(),d.preventDefault(),!1;break;default:if(e[c]==null)throw new Error(`Cannot dispatch event as the method "${c}" does not exist.`);e[c](...r.map((u,h)=>{switch(String(u).toLowerCase()){case"event":return d;case"this":return this;default:return u}}))}})})})}var ke=j,nt=class{version;tmp;settings;i18nCompare;hasLocalStorage;isMac;isMobile;isIOS;isAndroid;isSafari;isFirefox;formatters;constructor(){this.version="2.0.x",this.tmp={},this.settings=this.extend({},{dataType:"JSON",dateStartYear:1950,dateEndYear:2030,macButtonOrder:!1,warnNoPhrase:!1},Ce,{phrases:null}),this.i18nCompare=Intl.Collator().compare,this.hasLocalStorage=e(),this.isMac=/Mac/i.test(navigator.platform),this.isMobile=/(iphone|ipod|mobile|android)/i.test(navigator.userAgent),this.isIOS=/(iphone|ipod|ipad)/i.test(navigator.platform),this.isAndroid=/(android)/i.test(navigator.userAgent),this.isSafari=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),this.isFirefox=/(Firefox)/i.test(navigator.userAgent),this.formatters={number(s,t){t==null&&(t=s);let{value:i}=t,o=t.params;return parseInt(String(o))>20&&(o=20),parseInt(String(o))<0&&(o=0),i==null||i===""?"":p.formatNumber(parseFloat(String(i)),o,!0)},float(s,t){return p.formatters.number?.(s,t)??""},int(s,t){return p.formatters.number?.(s,t)??""},money(s,t){t==null&&(t=s);let{value:i}=t;if(i==null||i==="")return"";let o=p.formatNumber(Number(i),p.settings.currencyPrecision,!0);return(p.settings.currencyPrefix||"")+o+(p.settings.currencySuffix||"")},currency(s,t){return p.formatters.money?.(s,t)??""},percent(s,t){t==null&&(t=s);let{value:i,params:o}=t;return i==null||i===""?"":p.formatNumber(i,o||1)+"%"},size(s,t){t==null&&(t=s);let{value:i}=t;return i==null||i===""?"":String(p.formatSize(parseInt(String(i))))},date(s,t){t==null&&(t=s);let{value:i}=t,o=t.params;if(o===""&&(o=p.settings.dateFormat),i==null||i===0||i==="")return"";let l=p.isDateTime(i,o??null,!0);return l===!1&&(l=p.isDate(i,o??null,!0)),'<span title="'+(l instanceof Date?l:"")+'">'+p.formatDate(l instanceof Date?l:void 0,o)+"</span>"},datetime(s,t){t==null&&(t=s);let{value:i}=t,o=t.params;if(o===""&&(o=p.settings.datetimeFormat),i==null||i===0||i==="")return"";let l=p.isDateTime(i,o??null,!0);return l===!1&&(l=p.isDate(i,o??null,!0)),'<span title="'+(l instanceof Date?l:"")+'">'+p.formatDateTime(l instanceof Date?l:void 0,o)+"</span>"},time(s,t){t==null&&(t=s);let{value:i}=t,o=t.params;if(o===""&&(o=p.settings.timeFormat),o==="h12"&&(o="hh:mi pm"),o==="h24"&&(o="h24:mi"),i==null||i===0||i==="")return"";let l=p.isDateTime(i,o??null,!0);return l===!1&&(l=p.isDate(i,o??null,!0)),'<span title="'+(l instanceof Date?l:"")+'">'+p.formatTime(i,o)+"</span>"},timestamp(s,t){t==null&&(t=s);let{value:i}=t,o=t.params;if(o===""&&(o=p.settings.datetimeFormat),i==null||i===0||i==="")return"";let l=p.isDateTime(i,o??null,!0);return l===!1&&(l=p.isDate(i,o??null,!0)),l instanceof Date?l.toString():""},gmt(s,t){t==null&&(t=s);let{value:i}=t,o=t.params;if(o===""&&(o=p.settings.datetimeFormat),i==null||i===0||i==="")return"";let l=p.isDateTime(i,o??null,!0);return l===!1&&(l=p.isDate(i,o??null,!0)),l instanceof Date?l.toUTCString():""},age(s,t){t==null&&(t=s);let{value:i,params:o}=t;if(i==null||i===0||i==="")return"";let l=p.isDateTime(i,null,!0);return l===!1&&(l=p.isDate(i,null,!0)),'<span title="'+(l instanceof Date?l:"")+'">'+p.age(i)+(o?" "+o:"")+"</span>"},interval(s,t){t==null&&(t=s);let{value:i,params:o}=t;return i==null||i===0||i===""?"":p.interval(Number(i))+(o?" "+o:"")},toggle(s,t){t==null&&(t=s);let{value:i}=t;return i?p.lang("Yes"):""},password(s,t){t==null&&(t=s);let{value:i}=t,o="";if(!i)return o;let l=String(i);for(let a=0;a<l.length;a++)o+="*";return o}};return;function e(){let s="w2ui_test";try{return localStorage.setItem(s,s),localStorage.removeItem(s),!0}catch{return!1}}}isBin(e){return rt(e)}isInt(e){return Oe(e)}isFloat(e){return Xe(e,this.settings)}isMoney(e){return ct(e,this.settings)}isHex(e){return ut(e)}isAlphaNumeric(e){return ze(e)}isEmail(e){return dt(e)}isIpAddress(e){return ft(e)}isDate(e,s,t){if(!e)return!1;let i="Invalid Date",o,l,a;if(s==null&&(s=this.settings.dateFormat),e instanceof Date)a=e.getFullYear(),o=e.getMonth()+1,l=e.getDate();else if(typeof e=="number"||typeof e=="string"&&parseInt(e)==e&&parseInt(e)>0){let u=new Date(parseInt(String(e)));a=u.getFullYear(),o=u.getMonth()+1,l=u.getDate()}else{let u=String(e);if(new RegExp("mon","ig").test(s)){s=s.replace(/month/ig,"m").replace(/mon/ig,"m").replace(/dd/ig,"d").replace(/[, ]/ig,"/").replace(/\/\//g,"/").toLowerCase(),u=u.replace(/[, ]/ig,"/").replace(/\/\//g,"/").toLowerCase();for(let m=0,y=this.settings.fullmonths.length;m<y;m++){let x=this.settings.fullmonths[m]??"";u=u.replace(new RegExp(x,"ig"),String(m+1)).replace(new RegExp(x.substr(0,3),"ig"),String(m+1))}}let h=u.replace(/-/g,"/").replace(/\./g,"/").toLowerCase().split("/"),f=s.replace(/-/g,"/").replace(/\./g,"/").toLowerCase();f==="mm/dd/yyyy"&&(o=h[0],l=h[1],a=h[2]),f==="m/d/yyyy"&&(o=h[0],l=h[1],a=h[2]),f==="dd/mm/yyyy"&&(o=h[1],l=h[0],a=h[2]),f==="d/m/yyyy"&&(o=h[1],l=h[0],a=h[2]),f==="yyyy/dd/mm"&&(o=h[2],l=h[1],a=h[0]),f==="yyyy/d/m"&&(o=h[2],l=h[1],a=h[0]),f==="yyyy/mm/dd"&&(o=h[1],l=h[2],a=h[0]),f==="yyyy/m/d"&&(o=h[1],l=h[2],a=h[0]),f==="mm/dd/yy"&&(o=h[0],l=h[1],a=h[2]),f==="m/d/yy"&&(o=h[0],l=h[1],a=parseInt(h[2]??"0")+1900),f==="dd/mm/yy"&&(o=h[1],l=h[0],a=parseInt(h[2]??"0")+1900),f==="d/m/yy"&&(o=h[1],l=h[0],a=parseInt(h[2]??"0")+1900),f==="yy/dd/mm"&&(o=h[2],l=h[1],a=parseInt(h[0]??"0")+1900),f==="yy/d/m"&&(o=h[2],l=h[1],a=parseInt(h[0]??"0")+1900),f==="yy/mm/dd"&&(o=h[1],l=h[2],a=parseInt(h[0]??"0")+1900),f==="yy/m/d"&&(o=h[1],l=h[2],a=parseInt(h[0]??"0")+1900)}if(!this.isInt(a)||!this.isInt(o)||!this.isInt(l))return!1;let r=+(a??0),c=+(o??0),d=+(l??0);return i=new Date(r,c-1,d),i.setFullYear(r),c==null||String(i)==="Invalid Date"||i.getMonth()+1!==c||i.getDate()!==d||i.getFullYear()!==r?!1:t===!0?i:!0}isTime(e,s){if(e==null)return!1;let t,i=String(e).toUpperCase(),o=i.indexOf("AM")>=0,l=i.indexOf("PM")>=0,a=l||o;a?t=12:t=24,i=i.replace("AM","").replace("PM","").trim();let r=i.split(":"),c=r[0]??"",d=r[1]??"",u=r[2]??"",h=parseInt(c||"0"),f=parseInt(d||"0"),m=parseInt(u||"0");return(!a||r.length!==1)&&r.length!==2&&r.length!==3||c===""||h<0||h>t||!this.isInt(c)||c.length>2||r.length>1&&(d===""||f<0||f>59||!this.isInt(d)||d.length!==2)||r.length>2&&(u===""||m<0||m>59||!this.isInt(u)||u.length!==2)||!a&&t===h&&(f!==0||m!==0)||a&&r.length===1&&h===0?!1:s===!0?(l&&h!==12&&(h+=12),o&&h===12&&(h+=12),{hours:h,minutes:f,seconds:m}):!0}isDateTime(e,s,t){if(e instanceof Date)return t!==!0?!0:e;let i=parseInt(String(e));if(i===e)return i<0?!1:t!==!0?!0:new Date(i);let o=String(e),l=o.indexOf(" ");if(l<0)return o.indexOf("T")<0||String(new Date(o))=="Invalid Date"?!1:t!==!0?!0:new Date(o);{s==null&&(s=this.settings.datetimeFormat);let a=s.split("|"),r=[o.substr(0,l),o.substr(l).trim()];a[0]!=null&&(a[0]=a[0].trim()),a[1]&&(a[1]=a[1].trim());let c=this.isDate(r[0],a[0],!0),d=this.isTime(r[1],!0);if(c!==!1&&d!==!1){if(t!==!0)return!0;let u=c,h=d;return u.setHours(h.hours),u.setMinutes(h.minutes),u.setSeconds(h.seconds),u}else return!1}}age(e){let s;if(e===""||e==null||(e instanceof Date?s=e:typeof e=="number"||typeof e=="string"&&parseInt(e)==e&&parseInt(e)>0?s=new Date(parseInt(String(e))):s=new Date(String(e)),String(s)==="Invalid Date"))return"";let i=(new Date().getTime()-s.getTime())/1e3,o=0,l="";return i<0?(o=0,l="sec"):i<60?(o=Math.floor(i),l="sec",i<0&&(o=0,l="sec")):i<3600?(o=Math.floor(i/60),l="min"):i<1440*60?(o=Math.floor(i/60/60),l="hour"):i<720*60*60?(o=Math.floor(i/24/60/60),l="day"):i<365*24*60*60?(o=Math.floor(i/30/24/60/60*10)/10,l="month"):i<365*4*24*60*60?(o=Math.floor(i/365/24/60/60*10)/10,l="year"):i>=365*4*24*60*60&&(o=Math.floor(i/365.25/24/60/60*10)/10,l="year"),o+" "+l+(o>1?"s":"")}interval(e){let s="";return e<100?s="< 0.01 sec":e<1e3?s=Math.floor(e/10)/100+" sec":e<1e4?s=Math.floor(e/100)/10+" sec":e<6e4?s=Math.floor(e/1e3)+" secs":e<36e5?s=Math.floor(e/6e4)+" mins":e<864e5?s=Math.floor(e/36e5*10)/10+" hours":e<2628e6?s=Math.floor(e/864e5*10)/10+" days":e<31536e6?s=Math.floor(e/2628e6*10)/10+" months":s=Math.floor(e/31536e5)/10+" years",s}date(e){if(e===""||e==null||typeof e=="object"&&!e.getMonth)return"";let s=new Date(e);if(this.isInt(e)&&(s=new Date(Number(e))),String(s)==="Invalid Date")return"";let t=this.settings.shortmonths,i=new Date,o=new Date;o.setTime(o.getTime()-864e5);let l=t[s.getMonth()]+" "+s.getDate()+", "+s.getFullYear(),a=t[i.getMonth()]+" "+i.getDate()+", "+i.getFullYear(),r=t[o.getMonth()]+" "+o.getDate()+", "+o.getFullYear(),c=s.getHours()-(s.getHours()>12?12:0)+":"+(s.getMinutes()<10?"0":"")+s.getMinutes()+" "+(s.getHours()>=12?"pm":"am"),d=s.getHours()-(s.getHours()>12?12:0)+":"+(s.getMinutes()<10?"0":"")+s.getMinutes()+":"+(s.getSeconds()<10?"0":"")+s.getSeconds()+" "+(s.getHours()>=12?"pm":"am"),u=l;return l===a&&(u=c),l===r&&(u=this.lang("Yesterday")),'<span title="'+l+" "+d+'">'+u+"</span>"}formatSize(e){if(!this.isFloat(e)||e==="")return"";let s=parseFloat(String(e));if(s===0)return 0;let t=["Bt","KB","MB","GB","TB","PB","EB","ZB"],i=parseInt(String(Math.floor(Math.log(s)/Math.log(1024))));return(Math.floor(s/Math.pow(1024,i)*10)/10).toFixed(i===0?0:1)+" "+(t[i]||"??")}formatNumber(e,s,t){if(e==null||e===""||typeof e=="object")return"";let i={minimumFractionDigits:s!=null?parseInt(String(s)):void 0,maximumFractionDigits:s!=null?parseInt(String(s)):void 0,useGrouping:!!t};return(s==null||Number(s)<0)&&(i.minimumFractionDigits=0,i.maximumFractionDigits=20),parseFloat(String(e)).toLocaleString(this.settings.locale,i)}formatDate(e,s){if(s||(s=this.settings.dateFormat),e===""||e==null||typeof e=="object"&&!e.getMonth)return"";let t=new Date(e);if(this.isInt(e)&&(t=new Date(Number(e))),String(t)==="Invalid Date")return"";let i=t.getFullYear(),o=t.getMonth(),l=t.getDate();return s.toLowerCase().replace("month",this.settings.fullmonths[o]??"").replace("mon",this.settings.shortmonths[o]??"").replace(/yyyy/g,("000"+i).slice(-4)).replace(/yyy/g,("000"+i).slice(-4)).replace(/yy/g,("0"+i).slice(-2)).replace(/(^|[^a-z$])y/g,"$1"+i).replace(/mm/g,("0"+(o+1)).slice(-2)).replace(/dd/g,("0"+l).slice(-2)).replace(/th/g,l==1?"st":"th").replace(/th/g,l==2?"nd":"th").replace(/th/g,l==3?"rd":"th").replace(/(^|[^a-z$])m/g,"$1"+(o+1)).replace(/(^|[^a-z$])d/g,"$1"+l)}formatTime(e,s){if(s||(s=this.settings.timeFormat),e===""||e==null||typeof e=="object"&&!e.getMonth)return"";let t=new Date(e);if(this.isInt(e)&&(t=new Date(Number(e))),this.isTime(e)){let f=this.isTime(e,!0);t=new Date,t.setHours(f.hours),t.setMinutes(f.minutes)}if(String(t)==="Invalid Date")return"";s=="h12"&&(s="hh:mi pm");let i="am",o=t.getHours(),l=t.getHours(),a=t.getMinutes(),r=t.getSeconds();a<10&&(a="0"+a),r<10&&(r="0"+r),(s.indexOf("am")!==-1||s.indexOf("pm")!==-1)&&(o>=12&&(i="pm"),o>12&&(o=o-12),o===0&&(o=12));let c=String(o),d=String(a),u=String(r),h=String(l);return s.toLowerCase().replace("am",i).replace("pm",i).replace("hhh",Number(o)<10?"0"+c:c).replace("hh24",l<10?"0"+h:h).replace("h24",h).replace("hh",c).replace("mm",d).replace("mi",d).replace("ss",u).replace(/(^|[^a-z$])h/g,"$1"+c).replace(/(^|[^a-z$])m/g,"$1"+d).replace(/(^|[^a-z$])s/g,"$1"+u)}formatDateTime(e,s){let t;return e===""||e==null||typeof e=="object"&&!e.getMonth?"":(typeof s!="string"?t=[this.settings.dateFormat,this.settings.timeFormat]:(t=s.split("|"),t[0]!=null&&(t[0]=t[0].trim()),t[1]=t.length>1?(t[1]??"").trim():this.settings.timeFormat),t[1]==="h12"&&(t[1]="h:m pm"),t[1]==="h24"&&(t[1]="h24:m"),this.formatDate(e,t[0])+" "+this.formatTime(e,t[1]))}stripSpaces(e){return Ae(e)}stripTags(e){return Fe(e)}encodeTags(e){return Ee(e)}decodeTags(e){return He(e)}escapeId(e){return Tt(e)}unescapeId(e){return wt(e)}base64encode(e){return _t(e)}base64decode(e){return kt(e)}sha256(e){return Ct(e)}transition(e,s,t,i){return Ot(e,s,t,i)}lock(e,s={},...t){return zt(e,s,...t)}unlock(e,s){return st(e,s)}_msgDeps(){return{extend:te,bindEvents:(e,s)=>this.bindEvents(e,s),lock:(e,s)=>this.lock(e,s),unlock:(e,s)=>this.unlock(e,s),ownerName:this.name,self:this}}_confirmDeps(){return{extend:te,normButtons:(e,s)=>je(e,s,{extend:te,lang:this.lang.bind(this),settings:this.settings}),message:(e,s)=>this.message(e,s),settings:this.settings,lang:this.lang.bind(this)}}_promptDeps(){return{extend:te,normButtons:(e,s)=>je(e,s,{extend:te,lang:this.lang.bind(this),settings:this.settings}),message:(e,s)=>this.message(e,s),settings:this.settings,lang:this.lang.bind(this)}}message(e,s){return tt(e,s,this._msgDeps())}alert(e,s){return Mt(e,s,this._msgDeps())}confirm(e,s){return Dt(e,s,this._confirmDeps())}prompt(e,s){return It(e,s,this._promptDeps())}normButtons(e,s){return je(e,s,{extend:te,lang:this.lang.bind(this),settings:this.settings})}notify(e,s){return $t(e,s,{execTemplate:this.execTemplate.bind(this),tmpSlot:this.tmp})}getSize(e,s){return Lt(e,s)}getStrDimentions(e,s,t){return At(e,s,t)}getStrWidth(e,s,t){return this.getStrDimentions(e,s,t).width}getStrHeight(e,s,t){return this.getStrDimentions(e,s,t).height}execTemplate(e,s){return Et(e,s)}marker(e,s,t){return Rt(e,s,t)}lang(e,s){if(!e||this.settings.phrases==null||typeof e!="string"||"<=>=".includes(e))return this.execTemplate(e,s);let t=this.settings.phrases[e];return t==null?(t=e,this.settings.warnNoPhrase&&(this.settings.missing||(this.settings.missing={}),this.settings.missing[e]="---",this.settings.phrases[e]="---",console.log(`Missing translation for "%c${e}%c", see %c TsUtils.settings.phrases %c with value "---"`,"color: orange","","color: #999",""))):t==="---"&&!this.settings.warnNoPhrase&&(t=e),t==="---"&&(t=`<span ${this.tooltip(e)}>---</span>`),this.execTemplate(t,s)}locale(e,s,t){return new Promise((i,o)=>{if(Array.isArray(e)){this.settings.phrases={};let a=[],r={},c=e;c.forEach((d,u)=>{d.length===5&&(d="locale/"+d.toLowerCase()+".json",c[u]=d),a.push(this.locale(d,!0,!1))}),Promise.allSettled(a).then(d=>{d.forEach(u=>{u.value&&(r[u.value.file]=u.value.data)}),c.forEach(u=>{this.settings=this.extend({},this.settings,r[u])}),i()});return}if(e||(e="en-us"),typeof e=="object"){this.settings=this.extend({},this.settings,Ce,e);return}let l=e;l.length===5&&(l="locale/"+l.toLowerCase()+".json"),fetch(l,{method:"GET"}).then(a=>a.json()).then(a=>{t!==!0&&(s?this.settings=this.extend({},this.settings,a):this.settings=this.extend({},this.settings,Ce,{phrases:{}},a)),i({file:l,data:a})}).catch(a=>{console.log("ERROR: Cannot load locale "+l),o(a)})})}scrollBarSize(){return this.tmp.scrollBarSize?this.tmp.scrollBarSize:(ke("body").append(`
29
+ <div id="_scrollbar_width" style="position: absolute; top: -300px; width: 100px; height: 100px; overflow-y: scroll;">
30
+ <div style="height: 120px">1</div>
31
+ </div>
32
+ `),this.tmp.scrollBarSize=100-ke("#_scrollbar_width > div")[0].clientWidth,ke("#_scrollbar_width").remove(),this.tmp.scrollBarSize)}checkName(e){return Pe(e)}checkUniqueId(e,s,t,i){Array.isArray(s)||(s=[s]);let o=!0;return s.forEach(l=>{l.id===e&&(console.log(`ERROR: The item id="${e}" is not unique within the ${t} "${i}".`,s),o=!1)}),o}encodeParams(e,s=""){return et(e,s)}parseRoute(e){return bt(e)}getCursorPosition(e){if(e==null)return null;let s=0,t=e.ownerDocument||e.document,i=t.defaultView||t.parentWindow,o;if(["INPUT","TEXTAREA"].includes(e.tagName))s=e.selectionStart;else if(i.getSelection){if(o=i.getSelection(),o.rangeCount>0){let l=o.getRangeAt(0),a=l.cloneRange();a.selectNodeContents(e),a.setEnd(l.endContainer,l.endOffset),s=a.toString().length}}else if((o=t.selection)&&o.type!=="Control"){let l=o.createRange(),a=t.body.createTextRange();a.moveToElementText(e),a.setEndPoint("EndToEnd",l),s=a.text.length}return s}setCursorPosition(e,s,t){if(e==null)return;let i=document.createRange(),o=null,l=window.getSelection();if(["INPUT","TEXTAREA"].includes(e.tagName))e.setSelectionRange(s,t??s);else{for(let r=0;r<e.childNodes.length;r++){let c=String(ke(e.childNodes[r]).text());if(e.childNodes[r].tagName&&(c=String(ke(e.childNodes[r]).html()),c=c.replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&amp;/g,"&").replace(/&quot;/g,'"').replace(/&nbsp;/g," ")),s<=c.length){o=e.childNodes[r]??null,o!=null&&o.childNodes&&o.childNodes.length>0&&(o=o.childNodes[0]??null),o!=null&&o.childNodes&&o.childNodes.length>0&&(o=o.childNodes[0]??null);break}else s-=c.length}if(o==null)return;let a=o.length??0;s>a&&(s=a),i.setStart(o,s),t?i.setEnd(o,t):i.collapse(!0),l?.removeAllRanges(),l?.addRange(i)}}parseColor(e){return Ke(e)}colorContrast(e,s){return ht(e,s)}colorContrastValue(e,s){return Je(e,s)}hsv2rgb(e,s,t,i){return pt(e,s,t,i)}rgb2hsv(e,s,t,i){return mt(e,s,t,i)}tooltip(e,s){let t="mouseenter",i="mouseleave",o=s??{};return typeof e=="object"&&(o=e),typeof e=="string"&&(o={...o,html:e}),o.showOn&&(t=o.showOn,delete o.showOn),o.hideOn&&(i=o.hideOn,delete o.hideOn),o.name||(o.name="no-name"),` on${t}="TsTooltip.show(this, JSON.parse(TsUtils.base64decode('${this.base64encode(JSON.stringify(o))}')))" on${i}="TsTooltip.hide('${o.name}')"`}isPlainObject(e){return we(e)}clone(e,s){return _e(e,s)}extend(e,s,...t){return te(e,s,...t)}naturalCompare(e,s){return gt(e,s)}normMenu(e,s={}){return Ze(e,s)}prepareParams(e,s,t={}){return yt(e,s,t,p.settings.dataType)}bindEvents(e,s){return Ft(e,s)}debounce(e,s=250){return xt(e,s)}async wait(e=0){return vt(e)}getNested(e,s){return Le(e,s)}},p=new nt;var A=j,Me=class extends ne{defaults;options;status;tmp;handleResize;_promCreated;_promOpened;_promClosing;_promClosed;_timer;constructor(){super(),this.defaults={title:"",text:"",body:"",buttons:"",width:450,height:250,focus:null,actions:null,style:"",speed:.3,blockPage:!0,modal:!1,maximized:!1,keyboard:!0,showClose:!0,showMax:!1,resizable:!1,transition:null,openMaximized:!1,moved:!1},this.name="popup",this.status="closed",this.onOpen=null,this.onClose=null,this.onMax=null,this.onMin=null,this.onToggle=null,this.onKeydown=null,this.onAction=null,this.onMove=null,this.tmp={},this.handleResize=e=>{this.options.moved||this.center(void 0,void 0,!0)}}open(e,s){let t=this;(this.status=="closing"||A("#tsg-popup").hasClass("animating"))&&this.close(!0);let i=this.options;["string","number"].includes(typeof e)&&(e=p.extend({title:"Notification",body:`<div class="tsg-centered">${e}</div>`,actions:{Ok(){t.close()}},cancelAction:"ok"},s??{})),e.text!=null&&(e.body=`<div class="tsg-centered tsg-msg-text">${e.text}</div>`),e=Object.assign({},this.defaults,i,{title:"",body:""},e,{maximized:!1}),this.options=e,A("#tsg-popup").length===0&&(this.off("*"),Object.keys(this).forEach(b=>{b.startsWith("on")&&b!="on"&&(this[b]=null)})),Object.keys(e).forEach(b=>{b.startsWith("on")&&b!="on"&&e[b]&&(this[b]=e[b])}),e.width=parseInt(e.width),e.height=parseInt(e.height);let o,l,{top:a,left:r,width:c,height:d}=this.center();e.width>c&&(e.width=c),e.height>d&&(e.height=d);let u={self:this,action(b){return t.on("action.prom",b),u},close(b){return t.on("close.prom",b),u},then(b){return t.on("open:after.prom",b),u}};e.actions!=null&&!e.buttons&&(e.buttons="",Object.keys(e.actions).forEach(b=>{let g=e.actions[b],v=b;typeof g=="function"&&(e.buttons+=`<button class="tsg-btn tsg-eaction" name="${b}" data-click='["action","${b}","event"]'>${b}</button>`),typeof g=="object"&&(e.buttons+=`<button class="tsg-btn tsg-eaction ${g.class||""}" name="${b}" data-click='["action","${b}","event"]'
33
+ style="${g.style}" ${g.attrs}>${g.text||b}</button>`,v=Array.isArray(e.actions)?g.text:b),typeof g=="string"&&(g.trim().startsWith("<")?(v="none",e.buttons+=g):(v=(g[0]??"").toLowerCase()+g.substr(1).replace(/\s+/g,""),e.buttons+=`<button class="tsg-btn tsg-eaction" name="${b}" data-click='["action","${v}","event"]'>${g}</button>`)),typeof v=="string"&&(v=(v[0]??"").toLowerCase()+v.substr(1).replace(/\s+/g,"")),u[v]=function(w){return t.on("action.buttons",T=>{(T.detail.action[0]??"").toLowerCase()+T.detail.action.substr(1).replace(/\s+/g,"")==v&&w(T)}),u}}));let h="";if(e.showClose&&(h+=`<div class="tsg-popup-button tsg-popup-close">
34
+ <span class="tsg-icon tsg-icon-cross tsg-eaction" data-mousedown="stop" data-click="close"></span>
35
+ </div>`),e.showMax&&(h+=`<div class="tsg-popup-button tsg-popup-max">
36
+ <span class="tsg-icon tsg-icon-box tsg-eaction" data-mousedown="stop" data-click="toggle"></span>
37
+ </div>`),A("#tsg-popup").length===0){if(o=this.trigger("open",{target:"popup",present:!1}),o.isCancelled===!0)return;this.status="opening",e.blockPage&&p.lock(document.body,{opacity:.3,...e.modal?{}:{onClick:()=>{this.close()}}});let b=`
38
+ left: ${r}px;
39
+ top: ${a}px;
40
+ width: ${parseInt(e.width)}px;
41
+ height: ${parseInt(e.height)}px;
42
+ transition: ${e.speed}s
43
+ `;l=`<div id="tsg-popup" class="tsg-popup tsg-anim-open animating ${e.blockPage?"":"tsg-non-blocking"}" style="${p.stripSpaces(b)}"></div>`,A("body").append(l),A("#tsg-popup")[0]._w2popup={self:this,created:new Promise(g=>{this._promCreated=g}),opened:new Promise(g=>{this._promOpened=g}),closing:new Promise(g=>{this._promClosing=g}),closed:new Promise(g=>{this._promClosed=g})},b=`${e.title?"":"top: 0px !important;"} ${e.buttons?"":"bottom: 0px !important;"}`,l=`
44
+ <span name="hidden-first" tabindex="0" style="position: absolute; top: -100px"></span>
45
+ <div class="tsg-popup-title-btns">${h}</div>
46
+ <div class="tsg-popup-title" style="${e.title?"":"display: none"}"></div>
47
+ <div class="tsg-box" style="${b}">
48
+ <div class="tsg-popup-body ${!e.title||" tsg-popup-no-title"}
49
+ ${!e.buttons||" tsg-popup-no-buttons"}" style="${e.style}">
50
+ </div>
51
+ </div>
52
+ <div class="tsg-popup-buttons" style="${e.buttons?"":"display: none"}"></div>
53
+ <div class="tsg-popup-resizer resize-point resize-icon"></div>
54
+ <span name="hidden-last" tabindex="0" style="position: absolute; top: -100px"></span>
55
+ `,A("#tsg-popup").html(l),e.title&&A("#tsg-popup .tsg-popup-title").append(p.lang(e.title)),e.buttons&&A("#tsg-popup .tsg-popup-buttons").append(e.buttons),e.body&&A("#tsg-popup .tsg-popup-body").append(e.body),setTimeout(()=>{A("#tsg-popup").css("transition",e.speed+"s").removeClass("tsg-anim-open"),p.bindEvents("#tsg-popup .tsg-eaction",this),A("#tsg-popup").find(".tsg-popup-body").show(),this._promCreated()},1),clearTimeout(this._timer),this._timer=setTimeout(()=>{this.status="open",t.setFocus(e.focus),o.finish(),this._promOpened(),A("#tsg-popup").removeClass("animating")},e.speed*1e3)}else{if(o=this.trigger("open",{target:"popup",present:!0}),o.isCancelled===!0)return;this.status="opening",i!=null&&(!i.maximized&&(i.width!=e.width||i.height!=e.height)&&this.resize(e.width,e.height),e.prevSize=e.width+"px:"+e.height+"px",e.maximized=i.maximized);let b=A("#tsg-popup .tsg-box").get(0).cloneNode(!0);A(b).removeClass("tsg-box").addClass("tsg-box-temp").find(".tsg-popup-body").empty().append(e.body),A("#tsg-popup .tsg-box").after(b),e.buttons?(A("#tsg-popup .tsg-popup-buttons").show().html("").append(e.buttons),A("#tsg-popup .tsg-popup-body").removeClass("tsg-popup-no-buttons"),A("#tsg-popup .tsg-box, #tsg-popup .tsg-box-temp").css("bottom","")):(A("#tsg-popup .tsg-popup-buttons").hide().html(""),A("#tsg-popup .tsg-popup-body").addClass("tsg-popup-no-buttons"),A("#tsg-popup .tsg-box, #tsg-popup .tsg-box-temp").css("bottom","0px")),e.title?(A("#tsg-popup .tsg-popup-title").show().html(p.lang(e.title)),A("#tsg-popup .tsg-popup-body").removeClass("tsg-popup-no-title"),A("#tsg-popup .tsg-box, #tsg-popup .tsg-box-temp").css("top","")):(A("#tsg-popup .tsg-popup-title").hide().html(""),A("#tsg-popup .tsg-popup-body").addClass("tsg-popup-no-title"),A("#tsg-popup .tsg-box, #tsg-popup .tsg-box-temp").css("top","0px")),h?A("#tsg-popup .tsg-popup-title-btns").show().html(h):A("#tsg-popup .tsg-popup-title-btns").hide();let g=A("#tsg-popup .tsg-box")[0],v=A("#tsg-popup .tsg-box-temp")[0];A("#tsg-popup").addClass("animating"),p.transition(g,v,e.transition,()=>{A(g).remove(),A(v).removeClass("tsg-box-temp").addClass("tsg-box");let w=A(v).find(".tsg-popup-body");w.length==1&&(w[0].style.cssText=e.style,w.show()),t.setFocus(e.focus),A("#tsg-popup").removeClass("animating")}),this.status="open",o.finish(),p.bindEvents("#tsg-popup .tsg-eaction",this),A("#tsg-popup").find(".tsg-popup-body").show()}e.openMaximized&&this.max(),e._last_focus=document.activeElement,e.keyboard&&A(document.body).off(".TsPopup").on("keydown.TsPopup",b=>{this.keydown(b)}),A(window).on("resize",this.handleResize);let f={changing:!1,mvMove:y,mvStop:x};return A("#tsg-popup .tsg-popup-title").off("mousedown").on("mousedown",function(b){t.options.maximized||m(b)}),e.resizable?(A("#tsg-popup .tsg-popup-resizer").show(),A("#tsg-popup .tsg-popup-resizer").off("mousedown").on("mousedown",b=>{m(b,!0)})):A("#tsg-popup .tsg-popup-resizer").hide(),u;function m(b,g){b||(b=window.event),t.status=g?"resizing":"moving";let v=A("#tsg-popup").get(0).getBoundingClientRect();if(Object.assign(f,{changing:!0,isLocked:A("#tsg-popup > .tsg-lock").length==1,x:b.screenX,y:b.screenY,pos_x:v.x,pos_y:v.y,width:v.width,height:v.height}),f.isLocked||t.lock({opacity:0}),A(document.body).on("mousemove.tsg-popup",f.mvMove).on("mouseup.tsg-popup",f.mvStop),b.stopPropagation?b.stopPropagation():b.cancelBubble=!0,b.preventDefault)b.preventDefault();else return!1}function y(b){if(f.changing!=!0)return;b||(b=window.event),f.div_x=b.screenX-f.x,f.div_y=b.screenY-f.y;let g=t.trigger("move",{target:"popup",div_x:f.div_x,div_y:f.div_y,originalEvent:b});g.isCancelled!==!0&&(t.status=="moving"?(A("#tsg-popup").css({transition:"none",transform:"translate3d("+f.div_x+"px, "+f.div_y+"px, 0px)"}),t.options.moved=!0):A("#tsg-popup").css({transition:"none",width:f.width+f.div_x+"px",height:f.height+f.div_y+"px"}),g.finish())}function x(b){f.changing==!0&&(b||(b=window.event),f.div_x=b.screenX-f.x,f.div_y=b.screenY-f.y,t.status=="moving"?A("#tsg-popup").css({left:f.pos_x+f.div_x+"px",top:f.pos_y+f.div_y+"px"}).css({transition:"none",transform:"translate3d(0px, 0px, 0px)"}):(A("#tsg-popup").css({transition:"none",width:f.width+f.div_x+"px",height:f.height+f.div_y+"px"}),t.resizeMessages()),f.changing=!1,t.status="open",A(document.body).off(".tsg-popup"),f.isLocked||t.unlock())}}load(e){return new Promise((s,t)=>{if(typeof e=="string"&&(e={url:e}),e.url==null){console.log("ERROR: The url is not defined."),t("The url is not defined");return}this.status="loading";let[i,o]=String(e.url).split("#");i&&fetch(i).then(l=>l.text()).then(l=>{s(this.template(l,o,e))})})}template(e,s,t={}){let i;try{i=A(e)}catch{i=j.html(e)}return s&&(i=i.filter("#"+s)),Object.assign(t,{width:parseInt(A(i).css("width")),height:parseInt(A(i).css("height")),title:A(i).find("[rel=title]").html(),body:A(i).find("[rel=body]").html(),buttons:A(i).find("[rel=buttons]").html(),style:A(i).find("[rel=body]").get(0).style.cssText}),this.open(t)}action(e,s){let t=this.options.actions?.[e];t instanceof Object&&t.onClick&&(t=t.onClick);let i=this.trigger("action",{action:e,target:"popup",self:this,originalEvent:s,value:this.input?this.input.value:null});i.isCancelled!==!0&&(typeof t=="function"&&t.call(this,s),i.finish())}keydown(e){if(this.options&&!this.options.keyboard)return;let s=this.trigger("keydown",{target:"popup",originalEvent:e});s.isCancelled!==!0&&(e.keyCode===27&&(e.preventDefault(),A("#tsg-popup .tsg-message").length==0&&(this.options.cancelAction?this.action(this.options.cancelAction):this.close())),s.finish())}close(e){let s=this.trigger("close",{target:"popup"});if(s.isCancelled===!0)return;let t=()=>{A("#tsg-popup").remove(),this.options._last_focus&&this.options._last_focus.focus(),this.status="closed",this.options={},s.finish(),this._promClosed()};if(!(A("#tsg-popup").length===0||this.status=="closed")){if(this.status=="opening"&&(e=!0),this.status=="closing"&&e===!0){t(),clearTimeout(this.tmp.closingTimer),p.unlock(document.body,0);return}this.status="closing",A("#tsg-popup").css("transition",this.options.speed+"s").addClass("tsg-anim-close animating"),p.unlock(document.body,300),this._promClosing(),e?t():this.tmp.closingTimer=setTimeout(t,(this.options.speed??.3)*1e3),this.options.keyboard&&A(document.body).off("keydown",this.keydown),A(window).off("resize",this.handleResize)}}toggle(){let e=this.trigger("toggle",{target:"popup"});e.isCancelled!==!0&&(this.options.maximized===!0?this.min():this.max(),setTimeout(()=>{e.finish()},(this.options.speed??.3)*1e3+50))}max(){if(this.options.maximized===!0)return;let e=this.trigger("max",{target:"popup"});if(e.isCancelled===!0)return;this.status="resizing";let s=A("#tsg-popup").get(0).getBoundingClientRect();this.options.prevSize=s.width+":"+s.height,this.resize(1e4,1e4,()=>{this.status="open",this.options.maximized=!0,e.finish()})}min(){if(this.options.maximized!==!0)return;let e=(this.options.prevSize??"").split(":"),s=this.trigger("min",{target:"popup"});s.isCancelled!==!0&&(this.status="resizing",this.options.maximized=!1,this.resize(parseInt(e[0]??"0"),parseInt(e[1]??"0"),()=>{this.status="open",this.options.prevSize=null,s.finish()}))}clear(){A("#tsg-popup .tsg-popup-title").html(""),A("#tsg-popup .tsg-popup-body").html(""),A("#tsg-popup .tsg-popup-buttons").html("")}reset(){this.open(this.defaults)}message(e){return p.message({owner:this,box:A("#tsg-popup").get(0),after:".tsg-popup-title"},e)}confirm(e){return p.confirm({owner:this,box:A("#tsg-popup").get(0),after:".tsg-popup-title"},e)}setFocus(e){let s=A("#tsg-popup"),t="input, button, select, textarea, [contentEditable], [tabindex], .tsg-input";if(e!=null)(isNaN(e)?s.find(t).filter(e).filter(":not([name=hidden-first])").get(0):s.find(t).filter(":not([name=hidden-first])").get(e))?.focus();else{let i=s.find("[name=hidden-first]").get(0);i&&i.focus()}A(s).find(t).off(".keep-focus").on("blur.keep-focus",function(i){setTimeout(()=>{let o=document.activeElement,l=A(s).find(t).filter(o).length>0,a=A(o).attr("name");!l&&o&&o!==document.body&&A(s).find(t).get(0)?.focus(),a=="hidden-last"&&A(s).find(t).get(1)?.focus(),a=="hidden-first"&&A(s).find(t).get(-2)?.focus()},1)})}lock(e,s){p.lock(A("#tsg-popup"),e,s)}unlock(e){p.unlock(A("#tsg-popup"),e)}center(e,s,t){let i,o;window.innerHeight==null?(i=Math.floor(document.documentElement.offsetWidth),o=Math.floor(document.documentElement.offsetHeight)):(i=Math.floor(window.innerWidth),o=Math.floor(window.innerHeight)),e=parseInt(e??this.options.width),s=parseInt(s??this.options.height),this.options.maximized===!0&&(e=i,s=o),i-10<e&&(e=i-10),o-10<s&&(s=o-10);let l=(o-s)/3,a=(i-e)/2;return t&&(A("#tsg-popup").css({transition:"none",top:l+"px",left:a+"px",width:e+"px",height:s+"px"}),this.resizeMessages()),{top:l,left:a,width:e,height:s}}resize(e,s,t){return new Promise(i=>{let o=this;this.options.speed==null&&(this.options.speed=0);let{top:l,left:a,width:r,height:c}=this.center(e,s),d=this.options.speed;A("#tsg-popup").css({transition:`${d}s width, ${d}s height, ${d}s left, ${d}s top`,top:l+"px",left:a+"px",width:r+"px",height:c+"px"});let u=setInterval(()=>{o.resizeMessages()},10);setTimeout(()=>{clearInterval(u),o.resizeMessages(),typeof t=="function"&&t(),i(void 0)},this.options.speed*1e3+50)})}resizeMessages(){A("#tsg-popup .tsg-message").each(e=>{let s=e,t=s._msg_options,i=A("#tsg-popup");parseInt(t.width)<10&&(t.width=10),parseInt(t.height)<10&&(t.height=10);let o=i[0].getBoundingClientRect(),l=i.find(".tsg-popup-title")[0].clientHeight,a=Math.floor(o.width),r=Math.floor(o.height);t.width=t.originalWidth,t.width>a-10&&(t.width=a-10),t.height=t.originalHeight,t.height>r-l-5&&(t.height=r-l-5),t.originalHeight<0&&(t.height=r+t.originalHeight-l),t.originalWidth<0&&(t.width=a+t.originalWidth*2),A(s).css({left:(a-t.width)/2+"px",width:t.width+"px",height:t.height+"px"})})}};function Ht(n,e,s){let t,i={title:p.lang(e??"Notification"),body:`<div class="tsg-centered tsg-msg-text">${n}</div>`,showClose:!1,actions:{ok:p.lang("Ok")},cancelAction:"ok"};return A("#tsg-popup").length>0&&fe.status!="closing"?t=fe.message(i):t=fe.open(i),t.ok(o=>{typeof o.detail.self?.close=="function"&&o.detail.self.close(),typeof s=="function"&&s()}),t}function Nt(n,e,s){let t,i=n;return["string","number"].includes(typeof i)&&(i={msg:i}),i.msg&&(i.body=`<div class="tsg-centered tsg-msg-text">${i.msg}</div>`,delete i.msg),typeof e=="function"&&s==null&&(s=e,e=void 0),p.extend(i,{title:p.lang(e??i.title??"Confirmation"),showClose:!1,modal:!0,cancelAction:"no"}),s==null&&i.callBack!=null&&(s=i.callBack),p.normButtons(i,{yes:p.lang("Yes"),no:p.lang("No")}),A("#tsg-popup").length>0&&fe.status!="closing"?t=fe.message(i):t=fe.open(i),t.self.off(".confirm").on("action:after.confirm",o=>{typeof o.detail.self?.close=="function"&&o.detail.self.close(),typeof s=="function"&&s(o.detail.action)}),t}function Pt(n,e,s){let t,i=n;return["string","number"].includes(typeof i)&&(i={label:i}),i.label&&(i.focus=0,i.body=i.textarea?`<div class="tsg-prompt textarea">
56
+ <div>${i.label}</div>
57
+ <textarea id="TsPrompt" class="tsg-input" ${i.attrs??""}
58
+ data-keydown="keydown|event" data-keyup="change|event"></textarea>
59
+ </div>`:`<div class="tsg-prompt tsg-centered">
60
+ <label>${i.label}</label>
61
+ <input id="TsPrompt" class="tsg-input" ${i.attrs??""}
62
+ data-keydown="keydown|event" data-keyup="change|event">
63
+ </div>`),p.extend(i,{title:p.lang(e??i.title??"Notification"),showClose:!1,modal:!0,cancelAction:"cancel"}),p.normButtons(i,{ok:p.lang("Ok"),cancel:p.lang("Cancel")}),A("#tsg-popup").length>0&&fe.status!="closing"?t=fe.message(i):t=fe.open(i),t.self.box?t.self.input=A(t.self.box).find("#TsPrompt").get(0):t.self.input=A("#tsg-popup .tsg-popup-body #TsPrompt").get(0),i.value!=null&&(t.self.input.value=i.value,t.self.input.select()),t.change=function(o){return t.self.on("change",o),this},t.self.off(".prompt").on("open:after.prompt",o=>{let l=o.detail.box?o.detail.box:A("#tsg-popup .tsg-popup-body").get(0);p.bindEvents(A(l).find("#TsPrompt"),{keydown(a){a.keyCode==27&&a.stopPropagation()},change(a){let r=t.self.trigger("change",{target:"prompt",originalEvent:a});r.isCancelled!==!0&&(a.keyCode==13&&(a.ctrlKey||a.metaKey||a.target.tagName!="TEXTAREA")&&t.self.action("Ok",a),a.keyCode==27&&t.self.action("Cancel",a),r.finish())}}),A(l).find(".tsg-eaction").trigger("keyup")}).on("action:after.prompt",o=>{typeof o.detail.self?.close=="function"&&o.detail.self.close(),typeof s=="function"&&s(o.detail.action)}),t}var fe=new Me;var M=j,oe=class n{static active={};defaults;setColor;initControls(e){}constructor(){this.defaults={name:null,html:"",style:"",class:"",position:"top|bottom",draggable:!1,align:"",anchor:null,contextMenu:!1,anchorClass:"",anchorStyle:"",autoShow:!1,autoShowOn:null,autoHideOn:null,arrowSize:8,screenMargin:2,autoResize:!0,margin:1,offsetX:0,offsetY:0,maxWidth:null,maxHeight:null,hideOn:null,onThen:null,onShow:null,onHide:null,onUpdate:null,onMove:null}}static observeRemove=new MutationObserver(e=>{let s=0;Object.keys(n.active).forEach(t=>{let i=n.active[t];i?.displayed&&(!i.anchor||!i.anchor.isConnected?i.hide():s++)}),s===0&&n.observeRemove.disconnect()});trigger(e,s){if(arguments.length==2){let t=e;e=s,s.type=t}return e.overlay?e.overlay.trigger(e):(console.log("ERROR: cannot find overlay where to trigger events"),{finish:()=>{}})}get(e){return arguments.length==0?Object.keys(n.active):e===!0?n.active:n.active[(e??"").replace(/[\s\.#]/g,"_")]}attach(e,s){let t=e,i=s,o,l,a=this;if(arguments.length==0)return;arguments.length==1&&t instanceof Object?(o=t,t=o.anchor):arguments.length===2&&typeof i=="string"?(o={anchor:t,html:i},i=o.html):arguments.length===2&&i!=null&&typeof i=="object"&&(o=i,i=o.html),o=p.extend({},this.defaults,o||{}),!i&&o.text&&(i=o.text),!i&&o.html&&(i=o.html),delete o.anchor;let r=o.name?o.name:t?.id;if((t==document||t==null)&&(t=document.body),o.contextMenu&&(t=document.body,r=r??"context-menu"),r||(r="noname-"+Object.keys(n.active).length,console.log("NOTICE: name property is not defined for tooltip, could lead to too many instances")),r=r.replace(/[\s\.#]/g,"_"),n.active[r]?(l=n.active[r],l.prevOptions=l.options,l.options=o,l.anchor=t,(l.prevOptions.html!=l.options.html||l.prevOptions.class!=l.options.class||l.prevOptions.style!=l.options.style)&&(l.needsUpdate=!0),o=l.options,Object.keys(l).forEach(d=>{let u=l[d];d.startsWith("on")&&typeof u=="function"&&delete l[d]})):(l=new ne,Object.assign(l,{id:"w2overlay-"+r,name:r,options:o,anchor:t,self:a,displayed:!1,tmp:{observeTooltipResize:new ResizeObserver(()=>{this.resize(l.name)}),observeAnchorResize:new ResizeObserver(()=>{this.resize(l.name)}),observeAnchorMove:new MutationObserver(d=>{let u=d[0].target,h=u.getBoundingClientRect(),f=u._lastBoundingRect;u._lastBoundingRect?(h.left!==f.left||h.top!==f.top)&&(this.resize(l.name),u._lastBoundingRect=h):u._lastBoundingRect=h})},hide(){a.hide(r)}}),n.active[r]=l),Object.keys(l.options).forEach(d=>{let u=l.options[d];d.startsWith("on")&&typeof u=="function"&&(l[d]=u,delete l.options[d])}),o.autoShow===!0&&(o.autoShowOn=o.autoShowOn??"mouseenter",o.autoHideOn=o.autoHideOn??"mouseleave",o.autoShow=!1,o._keep=!0),o.autoShowOn){let d="autoShow-"+l.name;M(t).off(`.${d}`).on(`${o.autoShowOn}.${d}`,u=>{a.show(l.name),u.stopPropagation()}),delete o.autoShowOn,o._keep=!0}if(o.autoHideOn){let d="autoHide-"+l.name;M(t).off(`.${d}`).on(`${o.autoHideOn}.${d}`,u=>{a.hide(l.name),u.stopPropagation()}),delete o.autoHideOn,o._keep=!0}l.off(".attach");let c={overlay:l,then:d=>(l.on("show:after.attach",u=>{d(u)}),c),show:d=>(l.on("show.attach",u=>{d(u)}),c),hide:d=>(l.on("hide.attach",u=>{d(u)}),c),update:d=>(l.on("update.attach",u=>{d(u)}),c),move:d=>(l.on("move.attach",u=>{d(u)}),c)};return c}update(e,s){let t=n.active[e];t?(t.needsUpdate=!0,t.options.html=s,this.show(e)):console.log(`Tooltip "${e}" is not displayed. Cannot update it.`)}show(e,s){if(e instanceof HTMLElement||e instanceof Object){let h=e;e instanceof HTMLElement&&(h=s||{},h.anchor=e);let f=this.attach(h);return f.overlay.tmp.hidden=!1,M(f.overlay.anchor).off(".autoShow-"+f.overlay.name).off(".autoHide-"+f.overlay.name),setTimeout(()=>{f.overlay.tmp.hidden||(this.show(f.overlay.name),this.initControls&&this.initControls(f.overlay))},1),f}let t,i=this,o=n.active[e.replace(/[\s\.#]/g,"_")];if(!o)return;let l=o.options;if(!o||o.displayed&&!o.needsUpdate){this.resize(o?.name);return}let a=l.position.split("|"),r=["top","bottom"].includes(a[0]),c=l.align=="both"&&r?"":"white-space: nowrap;";if(l.maxWidth==null&&/^<div[^>]*style=["'][^"']*max-width[^"']*["'][^>]*>/i.test(l.html?.trim?.()??"")&&(l.maxWidth=p.getStrWidth(l.html,"",!0)),l.maxWidth&&p.getStrWidth(l.html,"",!0)>=l.maxWidth&&(c="width: "+l.maxWidth+"px; white-space: inherit; overflow: auto;"),c+=" max-height: "+(l.maxHeight?l.maxHeight:window.innerHeight-4)+"px;",l.html===""||l.html==null){i.hide(e);return}else if(o.box){if(t=this.trigger("update",{target:e,overlay:o}),t.isCancelled===!0){o.prevOptions&&(o.options=o.prevOptions,delete o.prevOptions);return}M(o.box).find(".tsg-overlay-body").attr("style",(l.style||"")+"; "+c).removeClass(null).addClass("tsg-overlay-body "+l.class+(l.draggable?" tsg-draggable":"")).html(l.html),this.resize(o.name)}else{if(t=this.trigger("show",{target:e,overlay:o}),t.isCancelled===!0)return;M("body").append(`<div id="${o.id}" name="${e}" style="display: none; pointer-events: none" class="tsg-overlay"
64
+ data-click="stop" data-focusin="stop">
65
+ <style></style>
66
+ <div class="tsg-overlay-body tsg-eaction ${l.class} ${l.draggable?"tsg-draggable":""}"
67
+ style="${l.style||""}; ${c}" ${l.draggable?'data-mousedown="startDrag|event"':""}>
68
+ ${l.html}
69
+ </div>
70
+ </div>`),o.box=M("#"+p.escapeId(o.id))[0],o.displayed=!0;let h=M(o.anchor).data("tooltipName")??[];h.push(e),M(o.anchor).data("tooltipName",h),p.bindEvents(o.box,{}),o.tmp.originalCSS="",M(o.anchor).length>0&&(o.tmp.originalCSS=M(o.anchor)[0].style.cssText),this.resize(o.name)}return l.anchorStyle&&(o.anchor.style.cssText+=";"+l.anchorStyle),l.anchorClass&&(l.anchorClass=="tsg-focus"&&o.anchor==document.body||M(o.anchor).addClass(l.anchorClass)),typeof l.hideOn=="string"&&(l.hideOn=[l.hideOn]),Array.isArray(l.hideOn)||(l.hideOn=[]),Object.assign(o.tmp,{scrollLeft:document.body.scrollLeft,scrollTop:document.body.scrollTop}),u(),d(document.body),M(o.box).show(),o.tmp.observeTooltipResize.observe(o.box),o.tmp.observeAnchorResize.observe(o.anchor),o.tmp.observeAnchorMove.observe(o.anchor,{attributes:!0}),n.observeRemove.observe(document.body,{subtree:!0,childList:!0}),M(o.box).css("opacity",1).find(".tsg-overlay-body").html(l.html),setTimeout(()=>{M(o.box).css({"pointer-events":"auto"}).data("ready","yes")},100),p.bindEvents(M(o.box).find(".tsg-eaction"),this),delete o.needsUpdate,o.box.overlay=o,M(o.box).off("mousedown.tsg-bringfront").on("mousedown.tsg-bringfront",()=>{i.bringOverlayToFront(o)}),t&&t.finish(),{overlay:o};function d(h){let f="tooltip-"+o.name,m=h;h.tagName=="BODY"&&(m=h.ownerDocument),M(m).off(`.${f}`).on(`scroll.${f}`,y=>{Object.assign(o.tmp,{scrollLeft:h.scrollLeft,scrollTop:h.scrollTop}),i.resize(o.name)})}function u(){let h=y=>{i.hide(o.name)},f=M(o.anchor),m="tooltip-"+o.name;M("html").off(`.${m}`),l.hideOn.includes("doc-click")&&(["INPUT","TEXTAREA"].includes(o.anchor.tagName)&&f.off(`.${m}-doc`).on(`click.${m}-doc`,y=>{y.stopPropagation()}),M("html").on(`click.${m}`,h)),l.hideOn.includes("tooltip-click")&&M(o.box).off(`click.${m}`).on(`click.${m}`,h),(l.hideOn.includes("focus-change")||l.hideOn.includes("blur"))&&M("html").on(`focusin.${m}`,y=>{document.activeElement!=o.anchor&&i.hide(o.name)}),["INPUT","TEXTAREA"].includes(o.anchor.tagName)&&(f.off(`.${m}`),l.hideOn.forEach(y=>{["doc-click","focus-change","blur"].indexOf(y)==-1&&f.on(`${y}.${m}`,{once:!0},h)}))}}hide(e){let s;if(arguments.length==0){Object.keys(n.active).forEach(r=>{this.hide(r)});return}if(e instanceof HTMLElement){(M(e).data("tooltipName")??[]).forEach(c=>{this.hide(c)});return}if(typeof e=="string"&&(e=e.replace(/[\s\.#]/g,"_"),s=n.active[e]),s?.tmp&&(s.tmp.hidden=!0),!s||!s.box)return;let t=this.trigger("hide",{target:e,overlay:s});if(t.isCancelled===!0)return;s.options._keep||delete n.active[e];let i="tooltip-"+s.name;s.tmp.observeTooltipResize?.disconnect(),s.tmp.observeAnchorResize?.disconnect(),s.tmp.observeAnchorMove?.disconnect();let o=0;Object.keys(n.active).forEach(r=>{n.active[r]?.displayed&&o++}),o==0&&n.observeRemove.disconnect(),M("html").off(`.${i}`),M(document).off(`.${i}`),s.box?.remove(),s.box=null,s.displayed=!1;let l=M(s.anchor).data("tooltipName")??[];l.indexOf(s.name)!=-1&&l.splice(l.indexOf(s.name),1),l.length==0?M(s.anchor).removeData("tooltipName"):M(s.anchor).data("tooltipName",l),s.options.anchorStyle&&(s.anchor.style.cssText=s.tmp.originalCSS),M(s.anchor).off(`.${i}`).removeClass(s.options.anchorClass),s.options.url&&(s.options.items.splice(0),s.tmp.remote.hasMore=!0,s.tmp.remote.search=null),t.finish()}resize(e){let s={moved:!1,resize:!1};if(arguments.length==0)return Object.keys(n.active).forEach(d=>{let u=n.active[d];u.displayed&&this.resize(u.name)}),{multiple:!0};let t=n.active[(e??"").replace(/[\s\.#]/g,"_")],i=this.getPosition(t.name),o=i.left+"x"+i.top,l=i.width+"x"+i.height,a,r;return t.tmp.lastPos!=o&&(a=this.trigger("move",{target:e,overlay:t,pos:i}),s.moved=!0),t.tmp.lastSize!=l&&(r=this.trigger("resize",{target:e,overlay:t,pos:i}),s.moved=!0),M(t.box).css({left:i.left+"px",top:i.top+"px"}).then(d=>(i.width!=null&&d.css("width",i.width+"px").find(".tsg-overlay-body").css("width","100%"),i.height!=null&&d.css("height",i.height+"px").find(".tsg-overlay-body").css("height","100%"),d)).find(".tsg-overlay-body").removeClass("tsg-arrow-right tsg-arrow-left tsg-arrow-top tsg-arrow-bottom").addClass(i.arrow.class).closest(".tsg-overlay").find("style:first-child").text(i.arrow.style),t.tmp.lastPos!=o&&a&&(t.tmp.lastPos=o,a.finish()),t.tmp.lastSize!=l&&r&&(t.tmp.lastSize=l,r.finish()),s}getPosition(e){let s=n.active[e.replace(/[\s\.#]/g,"_")];if(!s||!s.box)return;let t=s.options;(s.tmp.resizedY||s.tmp.resizedX)&&M(s.box).css({width:"",height:"",scroll:"auto"});let i=p.scrollBarSize(),o=document.body.scrollWidth!=document.body.clientWidth,l=document.body.scrollHeight!=document.body.clientHeight,a={width:window.innerWidth-(l?i:0),height:window.innerHeight-(o?i:0)},r=t.position=="auto"?"top|bottom|right|left".split("|"):Array.isArray(t.position)?t.position:t.position.split("|"),c=["top","bottom"].includes(r[0]),d=s.box.getBoundingClientRect(),u=s.anchor?.getBoundingClientRect?.(),h=p.getStrWidth(t.html,"",!0);if(d.width<h&&(d.width=h),s.anchor==document.body){let S=t.originalEvent;for(;S?.originalEvent;)S=S.originalEvent;let{x:$,y:H,width:Q,height:Y}=S??{x:t.x,y:t.y,width:0,height:10};u={left:$-(t.contextMenu?4:0),top:H-(t.contextMenu?4:0),width:Q??0,height:Y??10,arrow:t.contextMenu?"none":null}}let f=t.arrowSize;u.arrow=="none"&&(f=0),isNaN(f)&&(f=this.defaults.arrowSize);let m={top:u.top-f,bottom:a.height-f-(u.top+u.height)-(o?i:0)-2,left:u.left,right:a.width-(u.left+u.width)+(l?i:0)};d.width<22&&(d.width=22),d.height<14&&(d.height=14);let y,x,b,g,v="",w={offset:0,class:"",style:`#${s.id} { --tip-size: ${f}px; }`},T={left:0,top:0},_={posX:"",x:0,posY:"",y:0};if(r.forEach(S=>{let $=m[S]??0;["top","bottom"].includes(S)&&(!v&&d.height+f/1.893<$&&(v=S),$>_.y&&Object.assign(_,{posY:S,y:$})),["left","right"].includes(S)&&(!v&&d.width+f/1.893<$&&(v=S),$>_.x&&Object.assign(_,{posX:S,x:$}))}),v||(c?v=_.posY:v=_.posX),t.autoResize){if(["top","bottom"].includes(v)){let S=m[v]??0;d.height>S?(g=S,s.tmp.resizedY=!0):s.tmp.resizedY=!1}if(["left","right"].includes(v)){let S=m[v]??0;d.width>S?(b=S,s.tmp.resizedX=!0):s.tmp.resizedX=!1}}I(v),c&&R(),x=(x??0)+parseFloat(String(t.offsetY*(v=="top"?-1:1))),y=(y??0)+parseFloat(String(t.offsetX*(v=="left"?-1:1))),F();let C=v=="top"?-t.margin:v=="bottom"?t.margin:0,D=v=="left"?-t.margin:v=="right"?t.margin:0;x=Math.floor(((x??0)+parseFloat(C))*100)/100,y=Math.floor(((y??0)+parseFloat(D))*100)/100;let O={left:y??0,top:x??0,arrow:w,adjust:T,pos:v};return b!=null&&(O.width=b),g!=null&&(O.height=g),O;function I(S){switch(w.class=u.arrow?u.arrow:`tsg-arrow-${S}`,S){case"top":{y=u.left+(u.width-(b??d.width))/2,x=u.top-(g??d.height)-f/1.5+1;break}case"bottom":{y=u.left+(u.width-(b??d.width))/2,x=u.top+u.height+f/1.25+1;break}case"left":{y=u.left-(b??d.width)-f/1.2-1,x=u.top+(u.height-(g??d.height))/2;break}case"right":{y=u.left+u.width+f/1.2+1,x=u.top+(u.height-(g??d.height))/2;break}}}function R(){if(t.align=="left"&&(T.left=u.left-(y??0),y=u.left),t.align=="right"&&(T.left=u.left+u.width-(b??d.width)-(y??0),y=u.left+u.width-(b??d.width)),["top","bottom"].includes(v)&&t.align.startsWith("both")){let S=t.align.split(":")[1]??50;u.width>=S&&(y=u.left,b=u.width)}if(t.align=="top"&&(T.top=u.top-(x??0),x=u.top),t.align=="bottom"&&(T.top=u.top+u.height-(g??d.height)-(x??0),x=u.top+u.height-(g??d.height)),["left","right"].includes(v)&&t.align.startsWith("both")){let S=t.align.split(":")[1]??50;u.height>=S&&(x=u.top,g=u.height)}}function F(){let S;(["left","right"].includes(t.align)&&u.width<(b??d.width)||["top","bottom"].includes(t.align)&&u.height<(g??d.height))&&(S=!0);let $=v=="right"?f:t.screenMargin,H=v=="bottom"?f:t.screenMargin,Q=a.width-(b??d.width)-(v=="left"?f:t.screenMargin),Y=a.height-(g??d.height)-(v=="top"?f:t.screenMargin)+3;if((["top","bottom"].includes(v)||t.autoResize)&&((y??0)<$&&(S=!0,T.left-=y??0,y=$),(y??0)>Q&&(S=!0,T.left-=(y??0)-Q,y=(y??0)+Q-(y??0))),(["left","right"].includes(v)||t.autoResize)&&((x??0)<H&&(S=!0,T.top-=x??0,x=H),(x??0)>Y&&(S=!0,T.top-=(x??0)-Y,x=(x??0)+Y-(x??0))),S){let ee=c?"left":"top",Te=c?"width":"height";w.offset=-T[ee];let be=d[Te]/2-f;Math.abs(w.offset)>be+f&&(w.class=""),Math.abs(w.offset)>be&&(w.offset=w.offset<0?-be:be),w.style=p.stripSpaces(`#${s.id} .tsg-overlay-body:after,
71
+ #${s.id} .tsg-overlay-body:before {
72
+ --tip-size: ${f}px;
73
+ margin-${ee}: ${w.offset}px;
74
+ }`)}}}bringOverlayToFront(e){!e||!e.box||!e.box.parentNode||!e.box.nextElementSibling||e.box.parentNode.appendChild(e.box)}startDrag(e){e.preventDefault&&e.preventDefault();let s=M(e.target).closest(".tsg-overlay"),t=s[0]?.overlay;t&&this.bringOverlayToFront(t);let i={el:s,x:parseFloat(s.css("left")),y:parseFloat(s.css("top")),pageX:e.pageX,pageY:e.pageY,moved:!1,_removed:!1};M(document).off(".tsg-drag").on("selectstart.tsg-drag, dragstart.tsg-drag",a=>a.preventDefault()).find("body").addClass("tsg-overlay-dragging"),M("html").off(".TsColor").on("mousemove.TsColor",l).on("mouseup.TsColor",o);function o(a){if(M("html").off(".TsColor"),M(document).off("selectstart.tsg-drag"),M(document).off("dragstart.tsg-drag"),M(document.body).removeClass("tsg-overlay-dragging"),i.moved){let r=i.el[0]&&i.el[0].overlay;r&&(r.tmp||(r.tmp={}),r.tmp.moved=!0,clearTimeout(r.tmp._movedClearTimer),r.tmp._movedClearTimer=setTimeout(()=>{r.tmp&&(delete r.tmp.moved,delete r.tmp._movedClearTimer)},400))}}function l(a){let r=a.pageX-i.pageX,c=a.pageY-i.pageY;(Math.abs(r)>3||Math.abs(c)>3)&&(i.moved=!0),i.el.css({left:i.x+r+"px",top:i.y+c+"px"}),i._removed||(i._removed=!0,i.el.find(":scope > .tsg-overlay-body").removeClass("tsg-arrow-right tsg-arrow-left tsg-arrow-top tsg-arrow-bottom"))}}},it=class n extends oe{static custom_colors=[];palette;index;constructor(){super(),this.palette=[["000000","333333","555555","777777","888888","999999","AAAAAA","CCCCCC","DDDDDD","EEEEEE","F7F7F7","FFFFFF"],["FF011B","FF9838","FFC300","FFFD59","86FF14","14FF7A","2EFFFC","2693FF","006CE7","9B24F4","FF21F5","FF0099"],["FFEAEA","FCEFE1","FCF4DC","FFFECF","EBFFD9","D9FFE9","E0FFFF","E8F4FF","ECF4FC","EAE6F4","FFF5FE","FCF0F7"],["F4CCCC","FCE5CD","FFF1C2","FFFDA1","D5FCB1","B5F7D0","BFFFFF","D6ECFF","CFE2F3","D9D1E9","FFE3FD","FFD9F0"],["EA9899","F9CB9C","FFE48C","F7F56F","B9F77E","84F0B1","83F7F7","B5DAFF","9FC5E8","B4A7D6","FAB9F6","FFADDE"],["E06666","F6B26B","DEB737","E0DE51","8FDB48","52D189","4EDEDB","76ACE3","6FA8DC","8E7CC3","E07EDA","F26DBD"],["CC0814","E69138","AB8816","B5B20E","6BAB30","27A85F","1BA8A6","3C81C7","3D85C6","674EA7","A14F9D","BF4990"],["99050C","B45F17","80650E","737103","395E14","10783D","13615E","094785","0A5394","351C75","780172","782C5A"]],this.defaults=p.extend({},this.defaults,{advanced:!1,transparent:!0,position:"top|bottom",class:"tsg-white",color:"",updateInput:!0,arrowSize:12,autoResize:!1,anchorClass:"tsg-focus",autoShowOn:"focus",hideOn:["doc-click","focus-change"],onSelect:null,onLiveUpdate:null})}attach(e,s){let t;arguments.length==1&&e instanceof Object?(t=e,e=t.anchor):arguments.length===2&&s!=null&&typeof s=="object"&&(t=s,t.anchor=e);let i=t.hideOn;t=p.extend({},this.defaults,t||{}),i&&(t.hideOn=i),t.style+="; padding: 0;",t.transparent&&this.palette[0][1]=="333333"&&(this.palette[0].splice(1,1),this.palette[0].push("TRANSPARENT")),!t.transparent&&this.palette[0][1]!="333333"&&(this.palette[0].splice(1,0,"333333"),this.palette[0].pop()),t.color&&(t.color=String(t.color).toUpperCase()),typeof t.color=="string"&&t.color.substr(0,1)==="#"&&(t.color=t.color.substr(1)),this.index=[-1,-1];let o=super.attach(t),l=o.overlay;return l.options.html=this.getColorHTML(l.name,t),l.on("show.attach",a=>{let r=a.detail.overlay,c=r.anchor,d=r.options;["INPUT","TEXTAREA"].includes(c.tagName)&&!d.color&&c.value&&(r.tmp.initColor=c.value),delete r.newColor}),l.on("show:after.attach",a=>{if(o.overlay?.box){let r=M(o.overlay.box).find(".tsg-eaction");p.bindEvents(r,this),this.initControls(o.overlay)}}),l.on("update:after.attach",a=>{if(o.overlay?.box){let r=M(o.overlay.box).find(".tsg-eaction");p.bindEvents(r,this),this.initControls(o.overlay)}}),l.on("hide.attach",a=>{let r=a.detail.overlay,c=r.anchor,d=r.newColor??r.options.color??"";if(d!==""){["INPUT","TEXTAREA"].includes(c.tagName)&&c.value!=d&&r.options.updateInput&&(c.value=d);let u=this.trigger("select",{color:d,target:r.name,overlay:r});if(u.isCancelled===!0)return;u.finish()}}),o.liveUpdate=a=>(l.on("liveUpdate.attach",r=>{a(r)}),o),o.select=a=>(l.on("select.attach",r=>{a(r)}),o),o}select(e,s){let t;this.index=[-1,-1],typeof s!="string"&&(t=s.target,this.index=(M(t).attr("index")??"").split(":").map(Number),s=M(t).closest(".tsg-overlay").attr("name"));let i=this.get(s),o=this.trigger("liveUpdate",{color:e,target:s,overlay:i,param:s});o.isCancelled!==!0&&(["INPUT","TEXTAREA"].includes(i.anchor.tagName)&&i.options.updateInput&&M(i.anchor).val(e),i.newColor=e,M(i.box).find(".tsg-color.tsg-selected").removeClass("tsg-selected"),t&&M(t).addClass("tsg-selected"),o.finish())}nextColor(e){let s=this.palette;switch(e){case"up":this.index[0]--;break;case"down":this.index[0]++;break;case"right":this.index[1]++;break;case"left":this.index[1]--;break}return this.index[0]<0&&(this.index[0]=0),this.index[0]>s.length-2&&(this.index[0]=s.length-2),this.index[1]<0&&(this.index[1]=0),this.index[1]>(s[0]?.length??0)-1&&(this.index[1]=(s[0]?.length??1)-1),s[this.index[0]]?.[this.index[1]]}tabClick(e,s){typeof s!="string"&&(s=M(s.target).closest(".tsg-overlay").attr("name"));let t=this.get(s),i=M(t.box).find(`.tsg-color-tab:nth-child(${e})`);M(t.box).find(".tsg-color-tab").removeClass("tsg-selected"),M(i).addClass("tsg-selected"),M(t.box).find(".tsg-tab-content").hide().closest(".tsg-colors").find(".tab-"+e).show()}getColorHTML(e,s){let t=`
75
+ <div class="tsg-colors-header tsg-eaction" data-mousedown="startDrag|event">
76
+ Colors
77
+ </div>
78
+ <div class="tsg-colors">
79
+ <div class="tsg-tab-content tab-1">`;for(let i=0;i<this.palette.length;i++){t+='<div class="tsg-color-row">';for(let o=0;o<(this.palette[i]?.length??0);o++){let l=this.palette[i][o],a="";l==="FFFFFF"&&(a="; border: 1px solid #efefef"),t+=`
80
+ <div class="tsg-color tsg-eaction ${l==="TRANSPARENT"?"tsg-no-color":""} ${s.color==l?"tsg-selected":""}"
81
+ style="background-color: #${l+a};" name="${l}" index="${i}:${o}"
82
+ data-mousedown="select|'${l}'|event" data-mouseup="hide|${e}">&nbsp;
83
+ </div>`}t+="</div>",i<2&&(t+='<div style="height: 8px"></div>')}return t+=`
84
+ <div style="height: 8px"></div>
85
+ <div class="tsg-colors-custom">
86
+ ${this.getCustomColorsHTML(e)}
87
+ </div>`,t+="</div>",t+=`
88
+ <div class="tsg-tab-content tab-2" style="display: none">
89
+ <div class="color-info">
90
+ <div class="color-preview-bg"><div class="color-preview"></div><div class="color-original"></div></div>
91
+ <div class="color-part">
92
+ <span>H</span> <input class="tsg-input" name="h" maxlength="3" max="360" tabindex="101">
93
+ <span>R</span> <input class="tsg-input" name="r" maxlength="3" max="255" tabindex="104">
94
+ </div>
95
+ <div class="color-part">
96
+ <span>S</span> <input class="tsg-input" name="s" maxlength="3" max="100" tabindex="102">
97
+ <span>G</span> <input class="tsg-input" name="g" maxlength="3" max="255" tabindex="105">
98
+ </div>
99
+ <div class="color-part">
100
+ <span>V</span> <input class="tsg-input" name="v" maxlength="3" max="100" tabindex="103">
101
+ <span>B</span> <input class="tsg-input" name="b" maxlength="3" max="255" tabindex="106">
102
+ </div>
103
+ <div class="color-part opacity">
104
+ <span>${p.lang("Opacity")}</span>
105
+ <input class="tsg-input" name="a" maxlength="5" max="1" tabindex="107">
106
+ </div>
107
+ </div>
108
+ <div class="palette" name="palette">
109
+ <div class="palette-bg"></div>
110
+ <div class="value1 move-x move-y"></div>
111
+ </div>
112
+ <div class="rainbow" name="rainbow">
113
+ <div class="value2 move-x"></div>
114
+ </div>
115
+ <div class="alpha" name="alpha">
116
+ <div class="alpha-bg"></div>
117
+ <div class="value2 move-x"></div>
118
+ </div>
119
+ <div class="final" name="final">
120
+ <span style="text-align: right"> Hex </span>
121
+ <input class="tsg-input final" name="hex" tabindex="107" style="width: 70px" readonly>
122
+ <div class="tsg-color tsg-color-picker tsg-eaction" data-click="pickAndUse|${e}">
123
+ <span class="tsg-icon tsg-icon-eye-dropper"></span>
124
+ </div>
125
+ </div>
126
+ </div>`,t+=`
127
+ <div class="tsg-color-tabs">
128
+ <div class="tsg-color-tab tsg-selected tsg-eaction" data-click="tabClick|1|event|this"><span class="tsg-icon tsg-icon-colors"></span></div>
129
+ <div class="tsg-color-tab tsg-eaction" data-click="tabClick|2|event|this"><span class="tsg-icon tsg-icon-settings"></span></div>
130
+ <div style="padding: 5px; width: 100%; text-align: right;">
131
+ ${typeof s.html=="string"?s.html:""}
132
+ </div>
133
+ </div>`,t}getCustomColorsHTML(e){let s=this.get(e)?.options,t='<div class="tsg-color-row" style="min-height: 21px">';return n.custom_colors.forEach((i,o)=>{let l="";i==="FFFFFF"&&(l="; border: 1px solid #efefef"),t+=`
134
+ <div class="tsg-color tsg-eaction ${i==="TRANSPARENT"?"tsg-no-color":""} ${s.color==i?"tsg-selected":""}"
135
+ style="background-color: #${i+l};" name="${i}" index="c:${o}"
136
+ data-mousedown="select|'${i}'|event" data-mouseup="hide|${e}">&nbsp;
137
+ </div>`}),t+=`
138
+ <div class="tsg-color tsg-color-picker tsg-eaction" data-click="pickAndSelect|${e}|event">
139
+ <span class="tsg-icon tsg-icon-eye-dropper"></span>
140
+ </div>
141
+ </div>`,t}initControls(e){let s,t=this,i=e.options,o=i.color||e.tmp.initColor,l=p.parseColor(o);l==null&&(l={r:140,g:150,b:160,a:1});let a=p.rgb2hsv(l);i.advanced===!0&&this.tabClick(2,e.name),u(a,!0,o??""),M(e.box).off(".TsColor").on("contextmenu.TsColor",b=>{b.preventDefault()}).find("input").off(".TsColor").on("change.TsColor",b=>{let g=M(b.target),v=parseFloat(g.val()),w=parseFloat(g.attr("max"));isNaN(v)&&(v=0,g.val(0)),w>1&&(v=parseInt(String(v))),w>0&&v>w&&(g.val(w),v=w),v<0&&(g.val(0),v=0);let T=g.attr("name"),_={};["r","g","b","a"].indexOf(T)!==-1?(l[T]=v,a=p.rgb2hsv(l)):["h","s","v"].indexOf(T)!==-1&&(_[T]=v),u(_,!0)}),M(e.box).find(".color-original").off(".TsColor").on("click.TsColor",b=>{let g=p.parseColor(M(b.target).css("background-color"));g!=null&&(l=g,a=p.rgb2hsv(l),u(a,!0))});let r=`${p.isMobile?"touchstart":"mousedown"}.TsColor`,c=`${p.isMobile?"touchend":"mouseup"}.TsColor`,d=`${p.isMobile?"touchmove":"mousemove"}.TsColor`;M(e.box).find(".palette, .rainbow, .alpha").off(".TsColor").on(`${r}.TsColor`,m),this.setColor=u;return;function u(b,g,v){b.h!=null&&(a.h=b.h),b.s!=null&&(a.s=b.s),b.v!=null&&(a.v=b.v),b.a!=null&&(l.a=b.a,a.a=b.a),l=p.hsv2rgb(a);let w="rgba("+l.r+","+l.g+","+l.b+","+l.a+")",T=[Number(l.r).toString(16).toUpperCase(),Number(l.g).toString(16).toUpperCase(),Number(l.b).toString(16).toUpperCase(),Math.round(Number(l.a)*255).toString(16).toUpperCase()];T.forEach((C,D)=>{C.length===1&&(T[D]="0"+C)});let _=T[0]+T[1]+T[2]+T[3];if(l.a===1&&(_=T[0]+T[1]+T[2]),M(e.box).find(".color-preview").css("background-color","#"+_),M(e.box).find("input").each(C=>{C.name&&(l[C.name]!=null&&(C.value=String(l[C.name])),a[C.name]!=null&&(C.value=String(a[C.name])),C.name==="a"&&(C.value=String(l.a)),C.name=="hex"&&(C.value=_),C.name=="rgb"&&(C.value=w))}),v!=null){let C=e.tmp.initColor||_;M(e.box).find(".color-original").css("background-color","#"+C),M(e.box).find(".tsg-color.tsg-selected").removeClass("tsg-selected"),M(e.box).find(`.tsg-colors [name="${C}"], .tsg-colors [name="${v}"]`).addClass("tsg-selected"),_.length==8&&t.tabClick(2,e.name)}else t.select(_,e.name);g&&(h(),f())}function h(){let b=M(e.box).find(".palette .value1"),g=M(e.box).find(".rainbow .value2"),v=M(e.box).find(".alpha .value2");if(!b[0]||!g[0]||!v[0])return;let w=b[0].clientWidth/2,T=g[0].clientWidth/2;b.css({left:a.s*150/100-w+"px",top:(100-a.v)*125/100-w+"px"}),g.css("left",a.h/(360/150)-T+"px"),v.css("left",l.a*150-T+"px")}function f(){let b=p.hsv2rgb(a.h,100,100),g=`${b.r},${b.g},${b.b}`;M(e.box).find(".palette").css("background-image",`linear-gradient(90deg, rgba(${g},0) 0%, rgba(${g},1) 100%)`)}function m(b){let g=M(this).find(".value1, .value2"),v=g.prop("clientWidth")/2;g.hasClass("move-x")&&g.css({left:b.offsetX-v+"px"}),g.hasClass("move-y")&&g.css({top:b.offsetY-v+"px"}),s={el:g,x:b.pageX,y:b.pageY,width:g.prop("parentNode").clientWidth,height:g.prop("parentNode").clientHeight,left:parseInt(g.css("left")),top:parseInt(g.css("top"))},x(b),M("html").off(".TsColor").on(d,x).on(c,y)}function y(b){M("html").off(".TsColor")}function x(b){let g=s.el,v=b.pageX-s.x,w=b.pageY-s.y,T=s.left+v,_=s.top+w,C=g.prop("clientWidth")/2;T<-C&&(T=-C),_<-C&&(_=-C),T>s.width-C&&(T=s.width-C),_>s.height-C&&(_=s.height-C),g.hasClass("move-x")&&g.css({left:T+"px"}),g.hasClass("move-y")&&g.css({top:_+"px"});let D=M(g.get(0).parentNode).attr("name"),O=parseInt(g.css("left"))+C,I=parseInt(g.css("top"))+C;if(D==="palette"&&u({s:Math.round(O/s.width*100),v:Math.round(100-I/s.height*100)}),D==="rainbow"){let R=Math.round(2.4*O);u({h:R}),f()}D==="alpha"&&u({a:parseFloat(Number(O/150).toFixed(2))})}}addCustomColor(e,s){if(typeof e=="string"&&e.substr(0,1)=="#"&&[7,9].includes(e.length)){e=e.substr(1).toUpperCase();let t=n.custom_colors;t.includes(e)&&t.splice(t.indexOf(e),1),t.length>=5&&t.pop(),t.unshift(e)}return e}async pickAndSelect(e,s){let t=await this.pickColor();if(typeof t=="string"&&t.substr(0,1)=="#"&&[7,9].includes(t.length)){this.addCustomColor(t,e);let i=M(s.target).closest(".tsg-colors-custom");i.html(this.getCustomColorsHTML(e)),p.bindEvents(i.find(".tsg-eaction"),this),this.select(t.substr(1),e)}}async pickAndUse(e){let s=await this.pickColor();if(typeof s=="string"&&s.substr(0,1)=="#"&&[7,9].includes(s.length)){let t=p.rgb2hsv(p.parseColor(s));this.setColor(t,!0)}}async pickColor(){let e=window;if(!e.EyeDropper){console.error("EyeDropper API is not supported in this browser.");return}let s=new e.EyeDropper;try{return(await s.open()).sRGBHex}catch(t){console.error("Error picking color:",t)}return""}},ot=class extends oe{constructor(){super(),this.defaults=p.extend({},this.defaults,{type:"normal",items:[],selected:null,render:null,spinner:!1,msgNoItems:p.lang("No items found"),topHTML:"",menuStyle:"",search:!1,filter:!1,match:"contains",markSearch:!1,prefilter:!1,altRows:!1,arrowSize:10,align:"left",position:"bottom|top",class:"tsg-white",anchorClass:"tsg-focus",autoShowOn:"focus",hideOn:["doc-click","focus-change","select"],onSelect:null,onSubMenu:null,onRemove:null,onTooltip:null,onMouseEnter:null,onMouseLeave:null})}attach(e,s){let t;arguments.length==1&&e instanceof Object?(t=e,e=t.anchor):arguments.length===2&&s!=null&&typeof s=="object"&&(t=s,t.anchor=e);let i=t.hideOn;t=p.extend({},this.defaults,t||{}),i&&(t.hideOn=i),t.style+="; padding: 0;",t.items==null&&(t.items=[]),t.cacheMax<=0&&console.log(`The option "cacheMax" is ${t.cacheMax} but should be more than 0`),t.items=p.normMenu(t.items,t),t.html=this.getMenuHTML(t);let o=super.attach(t),l=o.overlay;return l.on("show:after.attach, update:after.attach",a=>{if(o.overlay?.box){let r="";l.selected=l.options.selected;let c=l.anchor.dataset?.selectedIndex;(l.options.selected!==!1&&l.options.selected!==-1||c!=null)&&["INPUT","TEXTAREA"].includes(l.anchor.tagName)&&(r=l.anchor.value,l.selected=null,c!=null&&(l.selected=c));let d=M(o.overlay.box).find(".tsg-eaction");["INPUT","TEXTAREA"].includes(l.anchor.tagName)&&(l.tmp._new_search=!1,M(l.anchor).on("input.search-trigger",()=>{l.tmp._new_search=!0,M(l.anchor).off("input.search-trigger")})),p.bindEvents(d,this),this.applyFilter(l.name,null,r,void 0).then(u=>{oe.active[l.name]?.displayed&&(this.getActiveChain(l.name,t.items),l.tmp.searchCount=u.count,l.tmp.search=u.search,(t.prefilter||r!=="")&&((u.count===0||!this.getActiveChain(l.name,t.items).includes(l.selected))&&(l.selected=null),this.refreshSearch(l.name)),this.initControls(o.overlay),this.refreshIndex(l.name,!0))})}}),l.next=()=>{let a=this.getActiveChain(l.name);if(l.selected==null||String(l.selected).length==0)l.selected=a[0];else{let r=a.indexOf(String(l.selected));r==-1&&(l.selected=a[0]),r<a.length-1&&(l.selected=a[r+1])}this.refreshIndex(l.name),this.showTooltip(l.name)},l.prev=()=>{let a=this.getActiveChain(l.name);if(l.selected==null||String(l.selected).length==0)l.selected=a[a.length-1];else{let r=a.indexOf(String(l.selected));r==-1&&(l.selected=a[a.length-1]),r>0&&(l.selected=a[r-1])}this.refreshIndex(l.name),this.showTooltip(l.name)},l.click=()=>{M(l.box).find(".tsg-selected").each(a=>{a.click()})},l.on("hide:after.attach",a=>{V.hide(l.name+"-tooltip")}),o.select=a=>(l.on("select.attach",r=>{a(r)}),o),o.remove=a=>(l.on("remove.attach",r=>{a(r)}),o),o.subMenu=a=>(l.on("subMenu.attach",r=>{a(r)}),o),o}update(e,s){let t=oe.active[e];if(t){let i=t.options;i.items!=s&&(i.items=s);let o=this.getMenuHTML(i);i.html!=o&&(i.html=o,t.needsUpdate=!0,this.show(e))}else console.log(`Tooltip "${e}" is not displayed. Cannot update it.`)}initControls(e){let s="mousedown",t="click";p.isMobile&&(s="touchstart",t="touchend"),M(e.box).find(".tsg-menu:not(.tsg-sub-menu)").off(".TsMenu").on("contextmenu.TsMenu",i=>{i.preventDefault()}).on(`${s}.TsMenu`,{delegate:".tsg-menu-item"},i=>{let o=i.delegate.dataset,l=M(i.delegate).closest(".tsg-menu").data("parents");this.menuDown(e,i,o.index,l),p.isMobile&&i.preventDefault()}).on(`${t}.TsMenu`,{delegate:".tsg-menu-item"},i=>{let o=i.delegate.dataset,l=M(i.delegate).closest(".tsg-menu").data("parents");this.menuClick(e,i,parseInt(o.index??"0"),l)}).find(".tsg-menu-item").off(".TsMenu").on("mouseEnter.TsMenu",i=>{let o=i.target.dataset,l=e.options.items[o.index??""],a=this.trigger("mouseEnter",{overlay:e,item:l,originalEvent:i});if(a.isCancelled)return;let r=l?.tooltip;r&&o.hassubmenu!="yes"&&this.showTooltip(e.name,{tooltip:r,anchor:i.target});let c=M(i.target).closest(".tsg-menu").get(0);if(c._evt&&c._evt.target!=i.target&&this.closeSubMenu(c._evt),o.hassubmenu=="yes"){let d={index:parseInt(o.index??"0"),parents:c.dataset.parents!==""?c.dataset.parents.split("-").map(u=>parseInt(u)):[],target:i.target,originalEvent:i,overlay:e};c._evt=d,this.openSubMenu(d)}a.finish()}).on("mouseLeave.TsMenu",i=>{let o=i.target.dataset,l=e.options.items[o.index??""],a=this.trigger("mouseLeave",{overlay:e,item:l,originalEvent:i});a.isCancelled||(V.hide(e.name+"-tooltip"),a.finish())}).find(".menu-help").off(".TsMenu").on("mouseEnter.TsMenu",i=>{let l=i.target.parentNode?.parentNode,a=e.options.items[l.dataset?.index]?.help;a&&V.show({name:e.name+"-help-tp",anchor:i.target,html:a,position:"right|left",hideOn:["doc-click"]})}).on("mouseLeave.TsMenu",i=>{V.hide(e.name+"-help-tp")}),["INPUT","TEXTAREA"].includes(e.anchor.tagName)&&M(e.anchor).off(".TsMenu").on("input.TsMenu",i=>{}).on("keyup.TsMenu",i=>{i._searchType="filter",this.keyUp(e,i)}),e.options.search&&M(e.box).find("#menu-search").off(".TsMenu").on("keyup.TsMenu",i=>{i._searchType="search",this.keyUp(e,i)})}getCurrent(e,s){let t=oe.active[e.replace(/[\s\.#]/g,"_")],i=t.options,o=String(s||t.selected||"").split("-");o?.[0]===""&&o.shift();let l=o.length-1,a=o[l],r=o.slice(0,o.length-1).join("-");a=p.isInt(a)?parseInt(a):0;let c=i.items;return o.forEach((d,u)=>{u<o.length-1&&(c=c[d].items)}),{last:l,index:a,items:c,item:c?.[a],parents:r}}getMenuHTML(e){if(e.spinner)return`
142
+ <div class="tsg-menu">
143
+ <div class="tsg-no-items">
144
+ <div class="tsg-spinner"></div>
145
+ ${p.lang("Loading...")}
146
+ </div>
147
+ </div>`;let s=e.parents??[],t=e.items;Array.isArray(t)||(t=[]);let i=0,o=null,l="";e.search&&(l+=`
148
+ <div class="tsg-menu-search">
149
+ <span class="tsg-icon tsg-icon-search"></span>
150
+ <input id="menu-search" class="tsg-input" type="text"/>
151
+ </div>`,t.forEach(r=>r.hidden=!1)),e.topHTML&&(l+=`<div class="tsg-menu-top">${e.topHTML}</div>`);let a=`
152
+ ${l}
153
+ <div class="tsg-menu" style="${e.menuStyle}" data-parents="${s.join("-")}">
154
+ `;if(t.forEach((r,c)=>{o=r.icon;let d=(s.length>0?s.join("-")+"-":"")+c;if(o==null&&(o=null),["radio","check"].includes(e.type)&&!Array.isArray(r.items)&&r.group!==!1&&(r.checked===!0?o="tsg-icon-check":o="tsg-icon-empty"),r.hidden!==!0){let u=r.text,h="";if(typeof e.render=="function"&&(u=e.render(r,e)),typeof u=="function"&&(u=u(r,e)),o){let f=String(o).trim().slice(0,1);f=="#"?o=`<span class="tsg-icon tsg-icon-empty" style="background-color: ${o}"></span>`:f!=="<"&&(o=`<span class="tsg-icon ${o}"></span>`),h=`<div class="menu-icon">${o}</div>`}if(r.removable==null&&r.remove!=null&&(r.removable=r.remove),r.type!=="break"&&u!=null&&u!==""&&String(u).substr(0,2)!="--"){let f=["tsg-menu-item"];e.altRows==!0&&f.push(i%2===0?"tsg-even":"tsg-odd");let m=1;h===""&&m++,r.count==null&&r.hotkey==null&&r.removable!==!0&&r.items==null&&m++,r.tooltip==null&&r.hint!=null&&(r.tooltip=r.hint);let y="";r.removable===!0?y='<span class="menu-remove">x</span>':r.items!=null?(f.push("has-sub-menu"),y='<span style="background-color: transparent; border: transparent; box-shadow: none;"></span>'):(r.count!=null&&(y+="<span>"+r.count+"</span>"),r.hotkey!=null&&(y+='<span class="menu-hotkey">'+r.hotkey+"</span>"),r.help!=null&&(y+='<span class="menu-help">?</span>')),r.disabled===!0&&f.push("tsg-disabled"),r._noSearchInside===!0&&f.push("tsg-no-search-inside"),a+=`
155
+ <div index="${d}" class="${f.join(" ")}" style="${r.style?r.style:""}"
156
+ data-index="${c}" data-hasSubmenu="${r.items!=null?"yes":""}">
157
+ <div style="width: ${parseInt(r.indent??0)}px"></div>
158
+ ${h}
159
+ <div class="menu-text" colspan="${m}">${p.lang(u)}</div>
160
+ <div class="menu-extra">${r.extra??""}${y}</div>
161
+ </div>`,i++}else{let f=(u??"").replace(/^-+/g,"");a+=`
162
+ <div index="${d}" class="tsg-menu-divider ${f!=""?"has-text":""}">
163
+ <div class="line"></div>
164
+ ${f?`<div class="text">${f}</div>`:""}
165
+ </div>`}}t[c]=r}),i===0&&e.msgNoItems){let c=oe.active[e.name.replace(/[\s\.#]/g,"_")]?.tmp.remote,d=e.msgNoItems;e.url&&(i==0&&c?.hasMore===!1?d=e.msgNoItems:d=e.msgSearch),a+=`
166
+ <div class="tsg-no-items">
167
+ ${p.lang(d)}
168
+ </div>`}return a+="</div>",a}openSubMenu(e){let s=M(e.originalEvent.target).get(0),{overlay:t}=e,{items:i}=t.options,o=i[e.index],l=[];typeof o.items=="function"?l=o.items(o):Array.isArray(o.items)&&(l=o.items);let a=ie.get(t.name+"-submenu");a&&a.hide(),M(e.target).addClass("expanded"),ie.show({name:t.name+"-submenu",anchor:s,items:l,class:t.options.class+" "+o.overlay?.class,offsetX:-7,arrowSize:0,parentOverlay:t,parents:[...e.parents,e.index],position:"right|left",hideOn:["doc-click","select"]}).hide(r=>{M(e.target).removeClass("expanded")}),setTimeout(()=>{M("#w2overlay-"+t.name+"-submenu").on("mouseenter",r=>{r.target._keepSubOpen=!0}).on("mouseleave",r=>{r.target._keepSubOpen=!1})},10)}closeSubMenu(e){let{overlay:s}=e;if(e.target._keepSubOpen!==!0){let t=ie.get(s.name+"-submenu");t&&t.hide()}}refreshIndex(e,s){let t=oe.active[e.replace(/[\s\.#]/g,"_")];if(!t)return;t.displayed||this.show(t.name);let i=M(t.box).find(".tsg-overlay-body").get(0),o=M(t.box).find(".tsg-menu-search, .tsg-menu-top").get(0);M(t.box).find(".tsg-menu-item.tsg-selected").removeClass("tsg-selected");let l=M(t.box).find(`.tsg-menu-item[index="${t.selected}"]`).addClass("tsg-selected").get(0);l&&(l.offsetTop+l.clientHeight>i.clientHeight+i.scrollTop&&l.scrollIntoView({behavior:s?"instant":"smooth",block:s?"center":"start",inline:s?"center":"start"}),l.offsetTop<i.scrollTop+(o?o.clientHeight:0)&&l.scrollIntoView({behavior:s?"instant":"smooth",block:s?"center":"end",inline:s?"center":"end"})),V.hide(t.name+"-tooltip")}showTooltip(e,s){let t=oe.active[e.replace(/[\s\.#]/g,"_")];if(!t||!t.displayed)return;let i=s?.anchor??M(t.box).find(`.tsg-menu-item[index="${t.selected}"]`).get(0),o=s?.tooltip??(t.selected!=null?t.options.items?.[t.selected]?.tooltip:void 0);if(o){let l=o.html??o;V.show(Object.assign({name:t.name+"-tooltip",anchor:i,html:l,position:"right|left",hideOn:["doc-click"],onShow(a){t.self.trigger("tooltip",{overlay:t,action:"show",originalEvent:a})},onHide(a){t.self.trigger("tooltip",{overlay:t,action:"hide",originalEvent:a})}},typeof o=="object"&&o!=null?o:{}))}}refreshSearch(e){let s=oe.active[e.replace(/[\s\.#]/g,"_")];s&&(s.displayed||this.show(s.name),V.hide(s.name+"-tooltip"),M(s.box).find(".tsg-no-items").hide(),M(s.box).find(".tsg-menu-item, .tsg-menu-divider").each(t=>{if(this.getCurrent(e,t.getAttribute("index")).item?.hidden)M(t).hide();else{let o=s.tmp?.search;s.options.markSearch&&p.marker(t,o,{onlyFirst:s.options.match=="begins"}),M(t).show()}}),M(s.box).find(".tsg-sub-menu").each(t=>{let i=M(t).find(".tsg-menu-item").get().some(l=>l.style.display!="none");this.getCurrent(e,t.dataset?.parent).item.expanded&&(i?M(t).parent().show():M(t).parent().hide())}),(s.tmp.searchCount==0||(s.options?.items?.length??0)==0)&&(M(s.box).find(".tsg-no-items").length==0&&M(s.box).find(".tsg-menu:not(.tsg-sub-menu)").append(`
169
+ <div class="tsg-no-items">
170
+ ${p.lang(s.options.msgNoItems)}
171
+ </div>`),M(s.box).find(".tsg-no-items").show()))}applyFilter(e,s,t,i){let o=0,l=oe.active[e.replace(/[\s\.#]/g,"_")],a=l.options,r,c,d=new Promise((m,y)=>{r=m,c=y});if(l.tmp._skip_filter===!0)return d;t==null&&(["INPUT","TEXTAREA"].includes(l.anchor.tagName)?t=l.anchor.value:t=""),l.tmp._new_search===!1&&(t="");let u=[];a.selected&&(Array.isArray(a.selected)?u=a.selected.map(m=>m?.id??m):a.selected?.id&&(u=[a.selected.id])),l.tmp.activeChain=null;let h=l.tmp.remote??{hasMore:!0,emptySet:!1,search:null,cached:-1};if(h.hasMore==!1){let m=h.hasMore_search.length;t.substr(0,m)!=h.hasMore_search&&(h.hasMore=!0)}if(s==null&&a.url&&h.hasMore&&h.search!==t){let m=!0,y=p.lang("Loading...");return t.length<(a.minLength??0)&&h.emptySet!==!0&&(y=p.lang("${count} letters or more...",{count:String(a.minLength)}),m=!1,t===""&&(y=p.lang(a.msgSearch)),(a.items?.length??0)>0&&(this.update(e,[]),this.applyFilter(e,null,t))),M(l.box).find(".tsg-no-items").html(y),h.search=t,a.items=[],l.tmp.remote=h,m&&this.request(l,t,i).then(x=>{l.tmp._skip_filter=!0,this.update(e,x),delete l.tmp._skip_filter,l.tmp._new_search=!0,this.applyFilter(e,x,t).then(b=>{this.getActiveChain(l.name,a.items),l.tmp.searchCount=b.count,l.tmp.search=b.search,(a.prefilter||t!=="")&&((b.count===0||!this.getActiveChain(l.name,a.items).includes(l.selected))&&(l.selected=null),this.refreshSearch(l.name)),this.initControls(l),this.refreshIndex(l.name,!0),r(b)})}).catch(x=>{console.log("Server Request error",x)}),d}let f;return s==null&&(f=this.trigger("search",{search:t,overlay:l,prom:d,resolve:r,reject:c}),f.isCancelled===!0)?d:(s==null&&(s=l.options.items),a.filter===!1?(r({count:-1,search:t}),d):(s.forEach(m=>{if(a.match=="regex")try{new RegExp(t,"i").test(m.text)||m.text==="..."?m.hidden=!1:m.hidden=!0}catch{}else{let y="",x="";["is","begins","begins with"].indexOf(a.match??"")!==-1&&(y="^"),["is","ends","ends with"].indexOf(a.match??"")!==-1&&(x="$");try{new RegExp(y+t+x,"i").test(m.text)||m.text==="..."?m.hidden=!1:m.hidden=!0}catch{}}a.hideSelected&&u.includes(m.id)&&(m.hidden=!0),Array.isArray(m.items)&&m.items.length>0&&(delete m._noSearchInside,this.applyFilter(e,m.items,t).then(y=>{let x=y.count;x>0&&(o+=x,m.hidden&&(m._noSearchInside=!0),t&&(m.expanded=!0),m.hidden=!1)})),m.hidden!==!0&&o++}),r({count:o,search:t}),f?.finish(),d))}request(e,s,t){let i=e.options,o=e.tmp.remote,l,a;return(i.items.length===0&&o.cached!==0||o.cached==i.cacheMax&&s.length>o.search.length||s.length>=o.search.length&&s.substr(0,o.search.length)!==o.search||s.length<o.search.length)&&(o.controller&&o.controller.abort(),o.loading=!0,clearTimeout(o.timeout),o.timeout=setTimeout(()=>{let r=i.url,c={search:s,max:i.cacheMax};Object.assign(c,i.postData);let d=this.trigger("request",{search:s,overlay:e,url:r,postData:c,httpMethod:i.method??"GET",httpHeaders:{}});if(d.isCancelled===!0)return;let u=d.detail;r=new URL(u.url,location.href);let h=p.prepareParams(r,{method:u.httpMethod,headers:u.httpHeaders,body:u.postData},{caller:this,overlay:e,search:s});o.controller=new AbortController,h.signal=o.controller.signal,fetch(r,h).then(f=>f.json()).then(f=>{o.controller=null;let m=e.trigger("load",{search:c.search,overlay:e,data:f});if(m.isCancelled!==!0){if(f=m.detail.data,typeof f=="string"&&(f=JSON.parse(f)),Array.isArray(f)&&(f={records:f}),f.records==null&&f.items!=null&&(f.records=f.items,delete f.items),!f.error&&f.records==null&&(f.records=[]),!Array.isArray(f.records)){console.error("ERROR: server did not return proper JSON data structure",`
172
+ `," - it should return",{records:[{id:1,text:"item"}]},`
173
+ `," - or just an array ",[{id:1,text:"item"}],`
174
+ `," - or if errorr ",{error:!0,message:"error message"});return}f.records.length>=i.cacheMax?(f.records.splice(i.cacheMax,f.records.length),o.hasMore=!0):(o.hasMore=!1,o.hasMore_search=s),i.recId==null&&i.recid!=null&&(i.recId=i.recid),(i.recId||i.recText)&&f.records.forEach(y=>{typeof i.recId=="string"&&(y.id=y[i.recId]),typeof i.recId=="function"&&(y.id=i.recId(y)),typeof i.recText=="string"&&(y.text=y[i.recText]),typeof i.recText=="function"&&(y.text=i.recText(y))}),o.loading=!1,o.search=s,o.cached=f.records.length==0?-1:f.records.length,o.lastError="",o.emptySet=s===""&&f.records.length===0,m.finish(),l(p.normMenu(f.records,f))}}).catch(f=>{let m=this.trigger("error",{overlay:e,search:s,error:f});m.isCancelled!==!0&&(f?.name!=="AbortError"&&console.error("ERROR: Server communication failed.",`
175
+ `," - it should return",{records:[{id:1,text:"item"}]},`
176
+ `," - or just an array ",[{id:1,text:"item"}],`
177
+ `," - or if errorr ",{error:!0,message:"error message"}),o.loading=!1,o.search="",o.cached=-1,o.emptySet=!0,o.lastError=m.detail.error||"Server communication failed",i.items=[],m.finish(),a())}),d.finish()},t?i.debounce??350:0)),new Promise((r,c)=>{l=r,a=c})}getActiveChain(e,s,t=[],i=[],o){let l=oe.active[e.replace(/[\s\.#]/g,"_")];return l.tmp.activeChain!=null?l.tmp.activeChain:(s==null&&(s=l.options.items),s.forEach((a,r)=>{!a.hidden&&!a.disabled&&!a?.text?.startsWith?.("--")&&(i.push(t.concat([r]).join("-")),Array.isArray(a.items)&&a.items.length>0&&a.expanded&&(t.push(r),this.getActiveChain(e,a.items,t,i,!0),t.pop()))}),o==null&&(l.tmp.activeChain=i),i)}menuDown(e,s,t,i){let o=e.options,l=o.items,a=M(s.delegate).find(".tsg-icon"),r=M(s.target).closest(".tsg-menu:not(.tsg-sub-menu)");typeof l=="function"&&(l=l({overlay:e,index:t,parents:i,event:s}));let c=l[t];if(c==null||c.disabled)return;let d=(u,h)=>{u.forEach((f,m)=>{f.id!=c.id&&(f.group===c.group&&f.checked&&(r.find(`.tsg-menu-item[index="${(h?h+"-":"")+m}"] .tsg-icon`).removeClass("tsg-icon-check").addClass("tsg-icon-empty"),u[m].checked=!1),Array.isArray(f.items)&&d(f.items,m))})};(o.type==="check"||o.type==="radio")&&c.group!==!1&&!M(s.target).hasClass("menu-remove")&&!M(s.target).hasClass("menu-help")&&!M(s.target).closest(".tsg-menu-item").hasClass("has-sub-menu")&&(c.checked=o.type=="radio"?!0:!c.checked,c.checked?(o.type==="radio"&&M(s.target).closest(".tsg-menu").find(".tsg-icon").removeClass("tsg-icon-check").addClass("tsg-icon-empty"),o.type==="check"&&c.group!=null&&d(o.items),a.removeClass("tsg-icon-empty").addClass("tsg-icon-check")):o.type==="check"&&a.removeClass("tsg-icon-check").addClass("tsg-icon-empty")),!M(s.target).hasClass("menu-remove")&&!M(s.target).hasClass("menu-help")&&(r.find(".tsg-menu-item").removeClass("tsg-selected"),M(s.delegate).hasClass("has-sub-menu")||M(s.delegate).addClass("tsg-selected"))}menuClick(e,s,t,i){let o=e.options,l=o.items,a=M(s.delegate).closest(".tsg-menu-item"),r=!o.hideOn.includes("select");(s.shiftKey||s.metaKey||s.ctrlKey)&&(r=!0),typeof l=="function"&&(l=l({overlay:e,index:t,parents:i,event:s}));let c=l[t];if(!c||c.disabled&&!M(s.target).hasClass("menu-remove"))return;let d,u=[e],h=e,f;for(;h.options.parentOverlay;)h=h.options.parentOverlay,f??=h,u.push(h);if(M(s.target).hasClass("menu-remove")){if(d=h.trigger("remove",{originalEvent:s,target:e.name,overlay:e,topOverlay:h,parentOverlay:f,item:c,index:t,el:a[0],parents:i}),d.isCancelled===!0)return;let m=o.items,y=m.findIndex(b=>b.id==c.id);if(y!=-1){let b=m.splice(y,1);if(e.options.parents){let g=e.options.parents[e.options.parents.length-1],v=f.options.items[g].items;v[y].id==b[0].id&&v.splice(y,1)}}r=!o.hideOn.includes("item-remove");let x=a.closest(".tsg-overlay").attr("name");e.self.update(x,m)}else if(a.hasClass("has-sub-menu")){if(d=h.trigger("subMenu",{originalEvent:s,target:e.name,overlay:e,topOverlay:h,parentOverlay:f,item:c,index:t,el:a[0],parents:i}),d.isCancelled===!0)return;r=!0}else{let m=this.findChecked(o.items),y=a.attr("index");if(e.selected=isNaN(Number(y))?y:parseInt(y),d=h.trigger("select",{originalEvent:s,target:e.name,overlay:e,topOverlay:h,parentOverlay:f,item:c,index:t,selected:m,keepOpen:r,el:a[0],parents:i}),d.isCancelled===!0)return;c.keepOpen!=null&&(r=c.keepOpen),["INPUT","TEXTAREA"].includes(e.anchor.tagName)&&(e.anchor.dataset.selected=c.id,e.anchor.dataset.selectedIndex=e.selected)}r||u.forEach(m=>this.hide(m.name)),d.finish()}findChecked(e){let s=[];return e.forEach(t=>{t.checked&&s.push(t),Array.isArray(t.items)&&(s=s.concat(this.findChecked(t.items)))}),s}keyUp(e,s){let t=e.options,i=s.target.value,o=!0,l=!1;switch(s.keyCode){case 46:case 8:{i===""&&!e.displayed&&(o=!1);break}case 13:{if(!e.displayed||!e.selected)return;let{index:a,parents:r}=this.getCurrent(e.name);s.delegate=M(e.box).find(".tsg-selected").get(0),this.menuClick(e,s,parseInt(String(a)),r),o=!1;break}case 27:{if(o=!1,e.displayed)this.hide(e.name);else{let a=e.anchor;["INPUT","TEXTAREA"].includes(a.tagName)&&(a.value="",delete a.dataset.selected,delete a.dataset.selectedIndex)}break}case 37:{if(!e.displayed)return;let{item:a,index:r,parents:c}=this.getCurrent(e.name);c&&(a=t.items[parseInt(c)],r=parseInt(c),c="",l=!0),Array.isArray(a?.items)&&a.items.length>0&&a.expanded&&(s.delegate=M(e.box).find(`.tsg-menu-item[index="${r}"]`).get(0),e.selected=r,this.menuClick(e,s,parseInt(String(r)),c)),o=!1;break}case 39:{if(!e.displayed)return;let{item:a,index:r,parents:c}=this.getCurrent(e.name);Array.isArray(a?.items)&&a.items.length>0&&!a.expanded&&(s.delegate=M(e.box).find(".tsg-selected").get(0),this.menuClick(e,s,parseInt(String(r)),c)),o=!1;break}case 38:{if(!e.displayed)break;e.prev(),o=!1,s.preventDefault();break}case 40:{if(!e.displayed)break;e.next(),o=!1,s.preventDefault();break}}o&&e.displayed&&(t.filter&&s._searchType=="filter"||t.search&&s._searchType=="search")&&this.applyFilter(e.name,null,i,!0).then(a=>{e.tmp.searchCount=a.count,e.tmp.search=a.search,(a.count===0||!this.getActiveChain(e.name).includes(e.selected))&&(e.selected=null),this.refreshSearch(e.name)}),l&&this.refreshIndex(e.name)}},lt=class extends oe{daysCount;today;constructor(){super();let e=new Date;this.daysCount=[31,28,31,30,31,30,31,31,30,31,30,31],this.today=e.getFullYear()+"/"+(Number(e.getMonth())+1)+"/"+e.getDate(),this.defaults=p.extend({},this.defaults,{position:"top|bottom",class:"tsg-calendar",type:"date",value:"",format:"",start:null,end:null,btnNow:!1,blockDates:[],blockWeekdays:[],colored:{},arrowSize:12,autoResize:!1,anchorClass:"tsg-focus",autoShowOn:"focus",hideOn:["doc-click","focus-change"],onSelect:null})}attach(e,s){let t;arguments.length==1&&e instanceof Object?(t=e,e=t.anchor):arguments.length===2&&s!=null&&typeof s=="object"&&(t=s,t.anchor=e);let i=t.hideOn;if(t=p.extend({},this.defaults,t||{}),i&&(t.hideOn=i),!t.format){let r=p.settings.dateFormat,c=p.settings.timeFormat;t.type=="date"?t.format=r:t.type=="time"?t.format=c:t.format=r+"|"+c}let o=t.type=="time"?this.getHourHTML(t):this.getMonthHTML(t,void 0,void 0);t.style+="; padding: 0;",t.html=o.html;let l=super.attach(t),a=l.overlay;return Object.assign(a.tmp,o),a.on("show.attach",r=>{let c=r.detail.overlay,d=c.anchor,u=c.options;["INPUT","TEXTAREA"].includes(d.tagName)&&!u.value&&d.value&&(c.tmp.initValue=d.value),delete c.newValue,delete c.newDate}),a.on("show:after.attach",r=>{l.overlay?.box&&this.initControls(l.overlay)}),a.on("update:after.attach",r=>{l.overlay?.box&&this.initControls(l.overlay)}),a.on("hide.attach",r=>{let c=r.detail.overlay,d=c.anchor;if(c.newValue!=null){c.newDate&&(c.newValue=c.newDate+" "+c.newValue),["INPUT","TEXTAREA"].includes(d.tagName)&&d.value!=c.newValue&&(d.value=c.newValue);let u=this.trigger("select",{date:c.newValue,target:c.name,overlay:c});if(u.isCancelled===!0)return;u.finish()}}),l.select=r=>(a.on("select.attach",c=>{r(c)}),l),l}initControls(e){let s=e.options,t=o=>{let{month:l,year:a}=e.tmp;l+=o,l>12&&(l=1,a++),l<1&&(l=12,a--);let r=this.getMonthHTML(s,l,a);Object.assign(e.tmp,r),M(e.box).find(".tsg-overlay-body").html(r.html),this.initControls(e)},i=(o,l)=>{M(o.target).parent().find(".tsg-jump-month, .tsg-jump-year").removeClass("tsg-selected"),M(o.target).addClass("tsg-selected");let a=new Date,{jumpMonth:r,jumpYear:c}=e.tmp;if(l&&(c==null&&(c=a.getFullYear()),r==null&&(r=a.getMonth()+1)),r&&c){let d=this.getMonthHTML(s,r,c);Object.assign(e.tmp,d),M(e.box).find(".tsg-overlay-body").html(d.html),e.tmp.jump=!1,this.initControls(e)}};M(e.box).find(".tsg-cal-title").off(".calendar").on("click.calendar",o=>{if(s.draggable&&e.tmp?.moved){o.stopPropagation();return}if(Object.assign(e.tmp,{jumpYear:null,jumpMonth:null}),e.tmp.jump){let{month:l,year:a}=e.tmp,r=this.getMonthHTML(s,l,a);M(e.box).find(".tsg-overlay-body").html(r.html),e.tmp.jump=!1}else{M(e.box).find(".tsg-overlay-body .tsg-cal-days").replace(this.getYearHTML());let l=M(e.box).find(`[name="${e.tmp.year}"]`).get(0);l&&l.scrollIntoView(!0),e.tmp.jump=!0}this.initControls(e),o.stopPropagation()}).find(".tsg-cal-previous").off(".calendar").on("click.calendar",o=>{t(-1),o.stopPropagation()}).parent().find(".tsg-cal-next").off(".calendar").on("click.calendar",o=>{t(1),o.stopPropagation()}),M(e.box).find(".tsg-cal-now").off(".calendar").on("click.calendar",o=>{s.type=="datetime"?e.newDate?e.newValue=p.formatTime(new Date,s.format.split("|")[1]):e.newValue=p.formatDateTime(new Date,s.format):s.type=="date"?e.newValue=p.formatDate(new Date,s.format):s.type=="time"&&(e.newValue=p.formatTime(new Date,s.format)),this.hide(e.name)}),M(e.box).off(".calendar").on("contextmenu.calendar",o=>{o.preventDefault()}).on("click.calendar",{delegate:".tsg-day.tsg-date"},o=>{s.type=="datetime"?(e.newDate=M(o.target).attr("date"),M(e.box).find(".tsg-overlay-body").html(this.getHourHTML(e.options).html),this.initControls(e)):(e.newValue=M(o.target).attr("date"),this.hide(e.name))}).on("click.calendar",{delegate:".tsg-jump-month"},o=>{e.tmp.jumpMonth=parseInt(M(o.target).attr("name")??"0"),i(o)}).on("dblclick.calendar",{delegate:".tsg-jump-month"},o=>{e.tmp.jumpMonth=parseInt(M(o.target).attr("name")??"0"),i(o,!0)}).on("click.calendar",{delegate:".tsg-jump-year"},o=>{e.tmp.jumpYear=parseInt(M(o.target).attr("name")??"0"),i(o)}).on("dblclick.calendar",{delegate:".tsg-jump-year"},o=>{e.tmp.jumpYear=parseInt(M(o.target).attr("name")??"0"),i(o,!0)}).on("click.calendar",{delegate:".tsg-time.hour"},o=>{let l=Number(M(o.target).attr("hour")),a=(this.str2min(s.value)??0)%60;if(e.tmp.initValue&&!s.value&&(a=(this.str2min(e.tmp.initValue)??0)%60),s.noMinutes)e.newValue=this.min2str(l*60,s.format),this.hide(e.name);else{e.newValue=l+":"+a;let r=this.getMinHTML(l,s).html;M(e.box).find(".tsg-overlay-body").html(r),this.initControls(e)}}).on("click.calendar",{delegate:".tsg-time.min"},o=>{let a=Math.floor((this.str2min(e.newValue)??0)/60)*60+parseInt(M(o.target).attr("min"));e.newValue=this.min2str(a,s.format),this.hide(e.name)}),p.bindEvents(M(e.box).find(".tsg-eaction"),this)}getMonthHTML(e,s,t){let i=p.settings.fulldays.slice(),o=p.settings.shortdays.slice();p.settings.weekStarts!=="M"&&(i.unshift(i.pop()),o.unshift(o.pop()));let l=new Date,a=1e3*60*60*24,r=e.type==="datetime"?p.isDateTime(e.value,e.format,!0):p.isDate(e.value,e.format,!0),c=p.formatDate(r);if(s==null||t==null){let g=r instanceof Date?r:l;t=g.getFullYear(),s=g.getMonth()+1}s>12&&(s-=12,t++),(s<1||s===0)&&(s+=12,t--),t/4==Math.floor(t/4)?this.daysCount[1]=29:this.daysCount[1]=28,e.current=s+"/"+t;let d="",u=p.settings.weekStarts;for(let g=0;g<o.length;g++){let v=u=="M"&&g==5||u!="M"&&g==6,w=u=="M"&&g==6||u!="M"&&g==0;d+=`<div class="tsg-day tsg-weekday ${v?"tsg-sunday":""} ${w?"tsg-saturday":""}">${o[g]}</div>`}let h="tsg-cal-title"+(e.draggable?" tsg-eaction tsg-draggable":""),f=e.draggable?' data-mousedown="startDrag|event"':"",m=`
178
+ <div class="${h}"${f}>
179
+ <div class="tsg-cal-previous tsg-eaction" data-mousedown="stop">
180
+ <div></div>
181
+ </div>
182
+ <div class="tsg-cal-next tsg-eaction" data-mousedown="stop">
183
+ <div></div>
184
+ </div>
185
+ ${p.settings.fullmonths[s-1]}, ${t}
186
+ <span class="arrow-down"></span>
187
+ </div>
188
+ <div class="tsg-cal-days">
189
+ ${d}
190
+ `;l=new Date(t,s-1,1),l=new Date(l.getTime()+a*.5);let y=l.getDay();p.settings.weekStarts=="M"&&(y=y>0?y-1:6),l=new Date(l.getTime()-y*a);let x=6,b=0;for(let g=0;g<42;g++){let v=[],w=`${l.getFullYear()}/${l.getMonth()+1}/${l.getDate()}`;l.getDay()===x&&v.push("tsg-saturday"),l.getDay()===b&&v.push("tsg-sunday"),l.getMonth()+1!==s&&v.push("outside"),w==this.today&&v.push("tsg-today");let T=l.getDate(),_="",C="",D,O;if(e.type==="datetime"?(D=p.formatDateTime(w,e.format),O=p.formatDate(w,p.settings.dateFormat)):(D=p.formatDate(w,e.format),O=D),e.colored&&e.colored[O]!==void 0){let I=e.colored[O].split("|");C="background-color: "+I[0]+";",_="color: "+I[1]+";"}m+=`<div class="tsg-day ${this.inRange(D,e,!0)?"tsg-date "+(O==c?"tsg-selected":""):"tsg-blocked"} ${v.join(" ")}"
191
+ style="${_+C}" date="${O}" data-date="${l.getTime()}">
192
+ ${T}
193
+ </div>`,l=new Date(l.getTime()+a)}if(m+="</div>",e.btnNow){let g=p.lang("Today"+(e.type=="datetime"?" & Now":""));m+=`<div class="tsg-cal-now">${g}</div>`}return{html:m,month:s,year:t}}getYearHTML(){let e="",s="";for(let t=0;t<p.settings.fullmonths.length;t++)e+=`<div class="tsg-jump-month" name="${t+1}">${p.settings.shortmonths[t]}</div>`;for(let t=p.settings.dateStartYear;t<=p.settings.dateEndYear;t++)s+=`<div class="tsg-jump-year" name="${t}">${t}</div>`;return`<div class="tsg-cal-jump">
194
+ <div id="tsg-jump-month">${e}</div>
195
+ <div id="tsg-jump-year">${s}</div>
196
+ </div>`}getHourHTML(e){e=e??{},e.format||(e.format=p.settings.timeFormat);let s=e.format.indexOf("h24")>-1,t=e.value?e.value:e.anchor?e.anchor.value:"",i=[];for(let r=0;r<24;r++){let c=(r>=12&&!s?r-12:r)+":00"+(s?"":r<12?" am":" pm");r==12&&!s&&(c="12:00 pm"),i[Math.floor(r/8)]||(i[Math.floor(r/8)]="");let d=this.min2str(this.str2min(c)??0),u=this.min2str((this.str2min(c)??0)+59);if(e.type==="datetime"){let f=p.isDateTime(t,e.format,!0),m=e.format.split("|")[0].trim();d=p.formatDate(f,m)+" "+d,u=p.formatDate(f,m)+" "+u}let h=this.inRange(d,e)||this.inRange(u,e);i[Math.floor(r/8)]+=`<span hour="${r}"
197
+ class="hour ${h?"tsg-time ":"tsg-blocked"}">${c}</span>`}let o="tsg-time-title"+(e.draggable?" tsg-eaction tsg-draggable":""),l=e.draggable?' data-mousedown="startDrag|event"':"";return{html:`<div class="tsg-calendar">
198
+ <div class="${o}"${l}>${p.lang("Select Hour")}</div>
199
+ <div class="tsg-cal-time">
200
+ <div class="tsg-cal-column">${i[0]}</div>
201
+ <div class="tsg-cal-column">${i[1]}</div>
202
+ <div class="tsg-cal-column">${i[2]}</div>
203
+ </div>
204
+ ${e.btnNow?`<div class="tsg-cal-now">${p.lang("Now")}</div>`:""}
205
+ </div>`}}getMinHTML(e,s){e==null&&(e=0),s=s??{},s.format||(s.format=p.settings.timeFormat);let t=s.format.indexOf("h24")>-1,i=s.value?s.value:s.anchor?s.anchor.value:"",o=[];for(let c=0;c<60;c+=5){let d=(e>12&&!t?e-12:e)+":"+(c<10?0:"")+c+" "+(t?"":e<12?"am":"pm"),u=d,h=c<20?0:c<40?1:2;if(o[h]||(o[h]=""),s.type==="datetime"){let f=p.isDateTime(i,s.format,!0),m=s.format.split("|")[0].trim();u=p.formatDate(f,m)+" "+u}o[h]+=`<span min="${c}" class="min ${this.inRange(u,s)?"tsg-time ":"tsg-blocked"}">${d}</span>`}let l="tsg-time-title"+(s.draggable?" tsg-eaction tsg-draggable":""),a=s.draggable?' data-mousedown="startDrag|event"':"";return{html:`<div class="tsg-calendar">
206
+ <div class="${l}"${a}>${p.lang("Select Minute")}</div>
207
+ <div class="tsg-cal-time">
208
+ <div class="tsg-cal-column">${o[0]}</div>
209
+ <div class="tsg-cal-column">${o[1]}</div>
210
+ <div class="tsg-cal-column">${o[2]}</div>
211
+ </div>
212
+ ${s.btnNow?`<div class="tsg-cal-now">${p.lang("Now")}</div>`:""}
213
+ </div>`}}inRange(e,s,t){let i=!1;if(s.type==="date"){let o=p.isDate(e,s.format,!0);if(o){if(s.start||s.end){let l=typeof s.start=="string"?s.start:M(s.start).val(),a=typeof s.end=="string"?s.end:M(s.end).val(),r=p.isDate(l,s.format,!0),c=p.isDate(a,s.format,!0),d=o instanceof Date?o:new Date,u=new Date(d);r||(r=u),c||(c=u),u>=r&&u<=c&&(i=!0)}else i=!0;Array.isArray(s.blockDates)&&s.blockDates.includes(e)&&(i=!1),Array.isArray(s.blockWeekdays)&&s.blockWeekdays.includes((o instanceof Date?o:new Date).getDay())&&(i=!1)}}else if(s.type==="time")if(s.start||s.end){let o=this.str2min(e)??0,l=this.str2min(s.start)??o,a=this.str2min(s.end)??o;l||(l=o),a||(a=o),o>=l&&o<=a&&(i=!0)}else i=!0;else if(s.type==="datetime"){let o=p.isDateTime(e,s.format,!0);if(o){let l=s.format.split("|").map(a=>a.trim());if(t){let a=p.formatDate(o,l[0]),r=p.extend({},s,{type:"date",format:l[0]});this.inRange(a,r)&&(i=!0)}else{let a=p.formatTime(o,l[1]),r={type:"time",format:l[1],start:s.startTime,end:s.endTime};this.inRange(a,r)&&(i=!0)}}}return i}str2min(e){if(typeof e!="string")return null;let s=e.split(":");if(s.length===2)s[0]=parseInt(s[0]),s[1]=parseInt(s[1]),e.indexOf("pm")!==-1&&s[0]!==12&&(s[0]+=12),e.includes("am")&&s[0]==12&&(s[0]=0);else return null;return s[0]*60+s[1]}min2str(e,s){let t="";e>=1440&&(e=e%1440),e<0&&(e=1440+e);let i=Math.floor(e/60),o=(e%60<10?"0":"")+e%60;return s||(s=p.settings.timeFormat),s.indexOf("h24")!==-1?t=i+":"+o:t=(i<=12?i:i-12)+":"+o+" "+(i>=12?"pm":"am"),t}},V=new oe,ie=new ot,Re=new it,Ue=new lt;var Z=j,he=class extends ne{routeData;items;right;tooltip;item_template;last;_refresh;_refreshDebounced;constructor(e){super(e.name),this.box=null,this.name="",this.routeData={},this.items=[],this.right="",this.tooltip="top|left",this.onClick=null,this.onChange=null,this.onMouseDown=null,this.onMouseUp=null,this.onMouseEnter=null,this.onMouseLeave=null,this.onRender=null,this.onRefresh=null,this.onResize=null,this.onDestroy=null,this.onLiveUpdate=null,this.item_template={id:null,type:"button",text:null,html:"",tooltip:null,count:null,hidden:!1,disabled:!1,checked:!1,icon:null,route:null,arrow:null,style:null,group:null,items:null,selected:null,color:null,backColor:null,overlay:{anchorClass:""},onClick:null,onRefresh:null},this.last={badge:{},pendingRefresh:{}},this._refresh=({effected:t,resize:i,refreshTooltip:o})=>{let l=this.last.pendingRefresh;l.ids??=[],l.ids.push(...t),Object.assign(l,{resize:i,refreshTooltip:o}),this._refreshDebounced()},this._refreshDebounced=p.debounce(()=>{let t=this.last.pendingRefresh;new Set(t.ids).forEach(i=>{this.refresh(i),t.hideTooltip&&this.tooltipHide(i)}),t.resize&&this.resize(),this.last.pendingRefresh={}},15);let s=e.items;delete e.items,Object.assign(this,e),Array.isArray(s)&&this.add(s,!0),e.items=s,typeof this.box=="string"&&(this.box=Z(this.box).get(0)),this.box&&this.render(this.box)}add(e,s){this.insert(null,e,s)}insert(e,s,t){Array.isArray(s)||(s=[s]),s.forEach((i,o,l)=>{typeof i=="string"&&(i=l[o]={id:i,text:i});let a=["button","check","radio","drop","menu","menu-radio","menu-check","color","text-color","html","label","input","group","break","spacer","new-line"];if(!a.includes(String(i.type))){console.log('ERROR: The parameter "type" should be one of the following:',a,`, but ${i.type} is supplied.`,i);return}if(i.id==null&&!["break","spacer","new-line"].includes(i.type)){console.log('ERROR: The parameter "id" is required but not supplied.',i);return}if(i.type==null){console.log('ERROR: The parameter "type" is required but not supplied.',i);return}if(!p.checkUniqueId(i.id,this.items,"toolbar",this.name))return;let r=p.extend({},this.item_template,i);if(r.type=="group"&&Array.isArray(r.items)&&r.items.forEach((c,d)=>{r.items[d]=p.extend({},this.item_template,r.items[d])}),r.type=="menu-check"?(Array.isArray(r.selected)||(r.selected=[]),Array.isArray(r.items)&&r.items.forEach(c=>{typeof c=="string"&&(c=l[o]={id:c,text:c}),c.checked&&!r.selected.includes(c.id)&&r.selected.push(c.id),!c.checked&&r.selected.includes(c.id)&&(c.checked=!0),c.checked==null&&(c.checked=!1)})):r.type=="menu-radio"&&Array.isArray(r.items)&&r.items.forEach((c,d,u)=>{typeof c=="string"&&(c=u[d]={id:c,text:c}),c.checked&&r.selected==null?r.selected=c.id:c.checked=!1,!c.checked&&r.selected==c.id&&(c.checked=!0),c.checked==null&&(c.checked=!1)}),e==null)this.items.push(r);else{let c=this.get(e,!0);this.items=this.items.slice(0,c).concat([r],this.items.slice(c))}r.line=r.line??1,t!==!0&&this.refresh(r.id)}),t!==!0&&this.resize()}remove(...e){let s=0;return e.forEach(t=>{let i=this.get(t);if(!i||String(t).indexOf(":")!=-1)return;s++,Z(this.box).find("#tb_"+this.name+"_item_"+p.escapeId(i.id)).remove();let o=this.get(i.id,!0);o!=null&&this.items.splice(o,1)}),this.resize(),s}set(e,s){let t=this.get(e);return t==null?!1:(Object.assign(t,s),this.refresh(String(e).split(":")[0]),!0)}get(e,s,t){if(arguments.length===0){let o=[];for(let l=0;l<this.items.length;l++){let a=this.items[l];if(a.id!=null&&o.push(a.id),a.type=="group")for(let r=0;r<a.items.length;r++)a.items[r].id!=null&&o.push(a.items[r].id)}return o}let i=String(e).split(":");t==null&&(t=this.items);for(let o=0;o<t.length;o++){let l=t[o];if(["menu","menu-radio","menu-check"].includes(l.type)&&i.length==2&&l.id==i[0]){let a=l.items;typeof a=="function"&&(a=a(this));for(let r=0;r<a.length;r++){let c=a[r];if(c.id==i[1]||c.id==null&&c.text==i[1])return s==!0?r:c;if(Array.isArray(c.items)){for(let d=0;d<c.items.length;d++)if(c.items[d].id==i[1]||c.items[d].id==null&&c.items[d].text==i[1])return s==!0?r:c.items[d]}}}else{if(l.id==i[0])return s==!0?o:l;if(l.type=="group"){let a=this.get(e,s,l.items);if(a!=null)return a}}}return null}setCount(e,s,t,i){let o=Z(this.box).find(`#tb_${this.name}_item_${p.escapeId(e)} .tsg-tb-count > span`);if(o.length>0){o.removeClass(null).addClass(t??"").text(s),o.get(0).style.cssText=i??"",this.last.badge[e]={className:t??"",style:i??""};let l=this.get(e);l.count=s}else this.set(e,{count:s}),this.setCount(e,s,t,i)}show(...e){let s=[];return e.forEach(t=>{let i=this.get(t);i&&(i.hidden=!1,s.push(String(t).split(":")[0]),i.type=="group"&&i.items.forEach(o=>this.show(o.id)))}),this._refresh({effected:s,resize:!0}),s}hide(...e){let s=[];return e.forEach(t=>{let i=this.get(t);i&&(i.hidden=!0,s.push(String(t).split(":")[0]),i.type=="group"&&i.items.forEach(o=>this.hide(o.id)))}),this._refresh({effected:s,hideTooltip:!0,resize:!0}),s}enable(...e){let s=[];return e.forEach(t=>{let i=this.get(t);i&&(i.type=="group"?i.items.forEach(o=>this.enable(o.id)):(i.disabled=!1,s.push(String(t).split(":")[0])))}),this._refresh({effected:s}),s}disable(...e){let s=[];return e.forEach(t=>{let i=this.get(t);i&&(i.type=="group"?i.items.forEach(o=>this.disable(o.id)):(i.disabled=!0,s.push(String(t).split(":")[0])))}),this._refresh({effected:s,hideTooltip:!0}),s}check(...e){let s=[];return e.forEach(t=>{let i=this.get(t);!i||String(t).indexOf(":")!=-1||(i.type=="group"?i.items.forEach(o=>this.check(o.id)):(i.checked=!0,s.push(String(t).split(":")[0])))}),this._refresh({effected:s}),s}uncheck(...e){let s=[];return e.forEach(t=>{let i=this.get(t);!i||String(t).indexOf(":")!=-1||(["menu","menu-radio","menu-check","drop","color","text-color"].includes(i.type)&&i.checked&&V.hide(this.name+"-drop"),i.type=="group"?i.items.forEach(o=>this.uncheck(o.id)):(i.checked=!1,s.push(String(t).split(":")[0])))}),this._refresh({effected:s}),s}click(e,s){let t=String(e).split(":"),i=this.get(t[0]),o=i&&i.items?p.normMenu.call(this,i.items,i):[];if(t.length>1){let l=this.get(e);l&&!l.disabled&&this.menuClick({name:this.name,item:i,subItem:l,originalEvent:s});return}if(i&&!i.disabled){let l=this.trigger("click",{target:e??this.name,item:i,object:i,originalEvent:s});if(l.isCancelled===!0)return;o=i&&i.items?p.normMenu.call(this,i.items,i):[];let a="#tb_"+this.name+"_item_"+p.escapeId(i.id);if(Z(this.box).find(a).removeClass("down"),i.type=="radio"){for(let r=0;r<this.items.length;r++){let c=this.items[r];if(c.type=="group")for(let d=0;d<c.items.length;d++){let u=c.items[d];u==null||u.id==i.id||u.type!=="radio"||u.group==i.group&&u.checked&&(u.checked=!1,this.refresh(u.id))}c==null||c.id==i.id||c.type!=="radio"||c.group==i.group&&c.checked&&(c.checked=!1,this.refresh(c.id))}i.checked=!0,Z(this.box).find(a).addClass("checked")}if(["menu","menu-radio","menu-check","drop","color","text-color"].includes(i.type))if(this.tooltipHide(e),i.checked){V.hide(this.name+"-drop");return}else{let r=V.get(this.name+"-drop");r?.displayed&&r.hide(),r?.listeners?.splice(0),setTimeout(()=>{let c=(u,h)=>()=>{this.set(u,{checked:!1})},d=Z(this.box).find("#tb_"+this.name+"_item_"+p.escapeId(i.id));if(p.isPlainObject(i.overlay)||(i.overlay={}),i.type=="drop"&&V.show(p.extend({html:i.html,class:"tsg-white",hideOn:["doc-click"]},i.overlay,{anchor:d[0],name:this.name+"-drop",data:{item:i,btn:a}})).hide(c(i.id,a)),["menu","menu-radio","menu-check"].includes(i.type)){let u="normal";i.type=="menu-radio"&&(u="radio",o?.forEach(h=>{i.selected==h.id?h.checked=!0:h.checked=!1})),i.type=="menu-check"&&(u="check",o?.forEach(h=>{Array.isArray(i.selected)&&i.selected.includes(h.id)?h.checked=!0:h.checked=!1})),ie.show(p.extend({items:o,selected:-1,align:i.text?"left":"none"},i.overlay,{type:u,name:this.name+"-drop",anchor:d[0],data:{item:i,btn:a}})).hide(c(i.id,a)).remove(h=>{this.menuClick({name:this.name,remove:!0,item:i,subItem:h.detail.item,originalEvent:h})}).select(h=>{this.menuClick({name:this.name,item:i,subItem:h.detail.item,originalEvent:h})})}["color","text-color"].includes(i.type)&&Re.show(p.extend({color:i.color},i.overlay,{anchor:d[0],name:this.name+"-drop",data:{item:i,btn:a}})).hide(c(i.id,a)).liveUpdate(u=>{this.trigger("liveUpdate",{name:this.name,item:i,color:u.detail.color}).finish()}).select(u=>{u.detail.color!=null&&this.colorClick({name:this.name,item:i,color:u.detail.color})})},0)}if(["check","menu","menu-radio","menu-check","drop","color","text-color"].includes(i.type)&&(i.checked=!i.checked,i.checked?Z(this.box).find(a).addClass("checked"):Z(this.box).find(a).removeClass("checked")),i.route){let r=("/"+i.route).replace(/\/{2,}/g,"/"),c=p.parseRoute(r);if(c.keys.length>0)for(let d=0;d<c.keys.length;d++){let u=c.keys[d];u!=null&&(r=r.replace(new RegExp(":"+u.name,"g"),this.routeData[u.name]))}setTimeout(()=>{window.location.hash=r},1)}this.tooltipShow(e),l.finish()}}scroll(e,s,t){return new Promise((i,o)=>{let l=Z(this.box).find(`.tsg-tb-line:nth-child(${s}) .tsg-scroll-wrapper`),a=l.get(0),r=a.scrollLeft,c=l.find(".tsg-tb-right").get(0),d=l.parent().get(0).getBoundingClientRect().width,u=r+c.offsetLeft+c.clientWidth;switch(e){case"left":{let h=r-d+50;h<=0&&(h=0),a.scrollTo({top:0,left:h,behavior:t?"auto":"smooth"});break}case"right":{let h=r+d-50;h>=u-d&&(h=u-d),a.scrollTo({top:0,left:h,behavior:t?"auto":"smooth"});break}}setTimeout(()=>{this.resize(),i()},t?0:600)})}render(e){let s=Date.now();typeof e=="string"&&(e=Z(e).get(0));let t=this.trigger("render",{target:this.name,box:e??this.box});if(t.isCancelled===!0||(e!=null&&(this.unmount(),this.box=e),!this.box))return;Array.isArray(this.right)||(this.right=[this.right]);let i="",o=0;for(let l=0;l<this.items.length;l++){let a=this.items[l];a!=null&&(a.id==null&&(a.id="item_"+l),a.caption!=null&&console.log("NOTICE: toolbar item.caption property is deprecated, please use item.text. Item -> ",a),a.hint!=null&&console.log("NOTICE: toolbar item.hint property is deprecated, please use item.tooltip. Item -> ",a),(l===0||a.type=="new-line")&&(o++,i+=`
214
+ <div class="tsg-tb-line">
215
+ <div class="tsg-scroll-wrapper tsg-eaction" data-mousedown="resize">
216
+ <div class="tsg-tb-right">${this.right[o-1]??""}</div>
217
+ </div>
218
+ <div class="tsg-scroll-left tsg-eaction" data-click='["scroll", "left", "${o}"]'></div>
219
+ <div class="tsg-scroll-right tsg-eaction" data-click='["scroll", "right", "${o}"]'></div>
220
+ </div>
221
+ `),a.line=o)}return Z(this.box).attr("name",this.name).addClass("tsg-reset tsg-toolbar").html(i),Z(this.box).length>0&&(Z(this.box)[0].style.cssText+=this.style),p.bindEvents(Z(this.box).find(".tsg-tb-line .tsg-eaction"),this),this.last.observeResize=new ResizeObserver(()=>{this.resize()}),this.last.observeResize.observe(this.box),this.refresh(),this.resize(),t.finish(),Date.now()-s}refresh(e){let s=Date.now(),t=this.trigger("refresh",{target:e??this.name,item:this.get(e)});if(t.isCancelled===!0)return;let i;if(e==null){for(let c=0;c<this.items.length;c++){let d=this.items[c];d.id==null&&(d.id="item_"+c),this.refresh(d.id)}return}let o=this.get(e);if(o==null)return!1;if(typeof o.onRefresh=="function"&&(i=this.trigger("refresh",{target:e,item:o,object:o}),i.isCancelled===!0))return;let l=`#tb_${this.name}_item_${p.escapeId(o.id)}`,a=Z(this.box).find(l),r=this.getItemHTML(o);if(this.tooltipHide(e),o.type=="spacer"&&Z(this.box).find(`.tsg-tb-line:nth-child(${o.line??1})`).find(".tsg-tb-right").css("width","auto"),a.length===0){let c=parseInt(this.get(e,!0))+1,d=Z(this.box).find(`#tb_${this.name}_item_${p.escapeId(this.items[c]?this.items[c].id:"--")}`);d.length==0?d=Z(this.box).find(`.tsg-tb-line:nth-child(${o.line}`).find(".tsg-tb-right").before(r):d.after(r),p.bindEvents(Z(this.box).find(`${l}, ${l} .tsg-eaction`),this)}else{Z(this.box).find(l).replace(j.html(r));let c=Z(this.box).find(l);p.bindEvents(c,this),p.bindEvents(c.find(".tsg-eaction"),this);let d=V.get(!0);d!=null&&Object.keys(d).forEach(u=>{d[u]?.anchor==a.get(0)&&(d[u].anchor=c.get(0))})}if(["menu","menu-radio","menu-check"].includes(o.type)&&o.checked){let c=Array.isArray(o.selected)?o.selected:[o.selected],d=typeof o.items=="function"?o.items(o):[...o.items];d.forEach(u=>{c.includes(u.id)?u.checked=!0:u.checked=!1}),ie.update(this.name+"-drop",d)}return typeof o.onRefresh=="function"&&i.finish(),t.finish(),Date.now()-s}resize(){let e=Date.now(),s=this.trigger("resize",{target:this.name});if(s.isCancelled!==!0)return Z(this.box).find(".tsg-tb-line").each(t=>{let i=Z(t);i.find(".tsg-scroll-left, .tsg-scroll-right").hide();let o=i.find(".tsg-scroll-wrapper").get(0),l=i.find(".tsg-tb-right"),a=i.get(0).getBoundingClientRect().width,r=l.length>0?l[0].offsetLeft+l[0].clientWidth:0;a<r&&(o.scrollLeft>0&&i.find(".tsg-scroll-left").show(),a<r-o.scrollLeft&&i.find(".tsg-scroll-right").show())}),s.finish(),Date.now()-e}destroy(){let e=this.trigger("destroy",{target:this.name});e.isCancelled!==!0&&(Z(this.box).find(".tsg-scroll-wrapper").length>0&&this.unmount(),delete se[this.name],e.finish())}unmount(){super.unmount(),this.last.observeResize?.disconnect()}getItemHTML(e){let s="";e.caption!=null&&e.text==null&&(e.text=e.caption),e.text==null&&(e.text=""),e.tooltip==null&&e.hint!=null&&(e.tooltip=e.hint),e.tooltip==null&&(e.tooltip=""),typeof e.get!="function"&&(Array.isArray(e.items)||typeof e.items=="function")&&(e.get=function(a){let r=e.items;return typeof r=="function"&&(r=e.items(e)),r.find(c=>c.id==a)});let t="",i=typeof e.text=="function"?e.text.call(this,e):e.text;e.icon&&(t=e.icon,typeof e.icon=="function"&&(t=e.icon.call(this,e)),String(t).slice(0,1)!=="<"&&(t=`<span class="${t}" ${e.icon_style?`style="${e.icon_style}"`:""}></span>`),t=`<div class="tsg-tb-icon">${t}</div>`);let o=["tsg-tb-button","tsg-eaction"];switch(e.checked&&o.push("checked"),e.disabled&&o.push("disabled"),e.hidden&&o.push("hidden"),t||o.push("no-icon"),e.type){case"color":case"text-color":if(typeof e.color=="string"&&(e.color.slice(0,1)=="#"&&(e.color=e.color.slice(1)),[3,6,8].includes(e.color.length)&&(e.color="#"+e.color)),e.type=="color"&&(i=`<span class="tsg-tb-color-box" style="background-color: ${e.color!=null?e.color:"#fff"}"></span>
222
+ ${e.text?`<div style="margin-left: 17px;">${p.lang(e.text)}</div>`:""}`),e.type=="text-color"){let l=e.color!=null?e.color:"#444",a=e.backColor;e.backColor===!0&&(a="#fff",p.colorContrastValue("#fff",l)<2&&(a="#555")),i=`<span style="color: ${l}">${e.text?p.lang(e.text):e.backColor?`<b style="background-color: ${a??"transparent"}; padding: 2px 5px; border-radius: 3px;">Ab</b>`:"<b>Ab</b>"}</span>`}case"menu":case"menu-check":case"menu-radio":case"button":case"check":case"radio":case"label":case"drop":{let l=e.arrow===!0||e.arrow!==!1&&["menu","menu-radio","menu-check","drop","color","text-color"].includes(e.type);s=`
223
+ <div id="tb_${this.name}_item_${e.id}" class="${o.join(" ")} ${e.class?e.class:""}"
224
+ style="${e.hidden?"display: none;":""} ${e.type=="label"?(e.style??"")+";":""}"
225
+ ${e.disabled?"":`data-click='["click","${e.id}", "event"]'
226
+ data-mouseenter='["mouseAction", "event", "this", "Enter", "${e.id}"]'
227
+ data-mouseleave='["mouseAction", "event", "this", "Leave", "${e.id}"]'
228
+ data-mousedown='["mouseAction", "event", "this", "Down", "${e.id}"]'
229
+ data-mouseup='["mouseAction", "event", "this", "Up", "${e.id}"]'`}
230
+ >
231
+ ${t}
232
+ ${i!=""&&i!=null||e.count!=null||l?`<div class="tsg-tb-text" style="${e.type!="label"?e.style??"":""}; ${i?"":"padding-left: 0; margin-left: 23px;"}">
233
+ ${p.lang(i)}
234
+ ${e.count!=null?p.stripSpaces(`
235
+ <span class="tsg-tb-count">
236
+ <span class="${this.last.badge[e.id]?this.last.badge[e.id].className??"":""}"
237
+ style="${this.last.badge[e.id]?this.last.badge[e.id].style??"":""}">${e.count}</span>
238
+ </span>`):""}
239
+ ${l?`<span class="tsg-tb-down" ${!i&&!e.count?'style="margin-left: -3px"':""}><span></span></span>`:""}
240
+ </div>`:""}
241
+ </div>
242
+ `;break}case"break":{s=`<div id="tb_${this.name}_item_${e.id}" class="tsg-tb-break"
243
+ style="${e.hidden?"display: none":""}; ${e.style?e.style:""}">
244
+ &#160;
245
+ </div>`;break}case"spacer":{s=`<div id="tb_${this.name}_item_${e.id}" class="tsg-tb-spacer"
246
+ style="${e.hidden?"display: none":""}; ${e.style?e.style:""}">
247
+ </div>`;break}case"html":{s=`<div id="tb_${this.name}_item_${e.id}" class="tsg-tb-html ${o.join(" ")}"
248
+ style="${e.hidden?"display: none":""}; ${e.style?e.style:""}">
249
+ ${typeof e.html=="function"?e.html.call(this,e):e.html}
250
+ </div>`;break}case"input":{let l=e.placeholder,a=e.value;if(e.spinner&&typeof e.spinner=="object"&&(e.input??={},Object.assign(e.input,e.spinner,{spinner:!0})),a!=null&&String(a).trim()!==""&&e.input?.spinner){let r=e.input?.step??1,c=e.input?.precision??String(r).split(".")[1]?.length??0;a=isNaN(a)?a:Number(a).toFixed(c)}s=`<div id="tb_${this.name}_item_${e.id}" class="tsg-tb-input tsg-eaction ${o.join(" ")}"
251
+ style="${e.hidden?"display: none":""}; ${e.style?e.style:""}"
252
+ >
253
+ <span class="tsg-input-label">${e.text??""}</span>
254
+ ${e.input?.spinner?`<span class="tsg-spinner-dec tsg-eaction" data-click='["spinner", "${e.id}", "dec", "event"]'> \u2013 </span>`:""}
255
+ <input class="tsg-toolbar-input tsg-eaction ${e.input?.spinner?"tsg-has-spinner":""}"
256
+ ${l?`placeholder="${l}"`:""} style="${e.input?.style??""}"
257
+ value="${a??""}${e.input?.suffix??""}" ${e.input?.attrs??""}
258
+ data-input='["change", "${e.id}", "this", true]'
259
+ data-change='["change", "${e.id}", "this"]'
260
+ data-keydown='["spinner", "${e.id}", "key", "event"]'
261
+ data-mouseenter='["mouseAction", "event", "this", "Enter", "${e.id}"]'
262
+ data-mouseleave='["mouseAction", "event", "this", "Leave", "${e.id}"]'
263
+ >
264
+ ${e.input?.spinner?`<span class="tsg-spinner-inc tsg-eaction" data-click='["spinner", "${e.id}", "inc", "event"]'> + </span>`:""}
265
+ </div>`;break}case"group":s=`<div id="tb_${this.name}_item_${e.id}" class="tsg-tb-group"
266
+ style="display: flex; ${e.hidden?"display: none":""}; ${e.style?e.style:""}">`,Array.isArray(e.items)?e.items.forEach(l=>{s+=this.getItemHTML(l)}):console.log("ERROR: toolbar group is empty"),s+="</div>"}return s}spinner(e,s,t){let i=this.get(e),o=0,l=this.trigger("keyDown",{id:e,item:i,originalEvent:t});switch(s){case"inc":{o=i.input?.step??1;break}case"dec":{o=-(i.input?.step??1);break}case"key":{if(i.input?.spinner||i.input?.step!=null){let a=1;switch((t.shiftKey||t.metaKey)&&(a=10),t.altKey&&(a=.1),t.key){case"ArrowUp":{o=(i.input?.step??1)*a,t.preventDefault();break}case"ArrowDown":{o=-(i.input?.step??1)*a,t.preventDefault();break}}}break}}o!==0&&this.change(e,parseFloat(i.value??0)+o),l.finish()}change(e,s,t){let i=this.get(e),o=Z(this.box).find("#tb_"+this.name+"_item_"+p.escapeId(e)).find("input.tsg-toolbar-input");if(s instanceof HTMLInputElement&&(s=s.value),s==null&&(s=o.val()),(i.input?.spinner||i.input?.min!=null||i.input?.max!=null||i.input?.step!=null)&&(s=parseFloat(s)),i.input?.suffix!=null&&String(s).substr(-i.input.suffix.length)==i.input.suffix&&(s=String(s).substr(0,s.length-i.input.suffix.length)),i.input?.min!=null&&i.input.min>s&&(s=i.input.min),i.input?.max!=null&&i.input.max<s&&(s=i.input.max),i.input?.step!=null){isNaN(s)&&(s=i.input.min??0);let r=i.input.step??1,c=i.input.precision??String(r).split(".")[1]?.length??0;s=Number(s).toFixed(c)}let l=this.trigger(t?"input":"change",{target:e,id:e,value:s,item:i});if(l.isCancelled)return;i.value=s;let a="";i.input?.suffix!=null&&String(s).substr(-i.input.suffix.length)!=i.input.suffix&&(a=i.input.suffix),t||o.val(s+a),l.finish()}tooltipShow(e){if(this.tooltip==null)return;let s=Z(this.box).find("#tb_"+this.name+"_item_"+p.escapeId(e)).get(0),t=this.get(e),i=typeof this.tooltip=="string"?{position:this.tooltip}:this.tooltip,o=t.tooltip;typeof o=="function"&&(o=o.call(this,t)),!(["menu","menu-radio","menu-check","drop","color","text-color"].includes(t.type)&&t.checked==!0)&&V.show({anchor:s,name:this.name+"-tooltip",html:o,...i})}tooltipHide(e){this.tooltip!=null&&V.hide(this.name+"-tooltip")}menuClick(e){if(e.item&&!e.item.disabled){let s=this.trigger(e.remove!==!0?"click":"remove",{target:e.item.id+":"+e.subItem.id,item:e.item,subItem:e.subItem,originalEvent:e.originalEvent});if(s.isCancelled===!0)return;let t=e.subItem,i=this.get(e.item.id),o=i.items;if(typeof o=="function"&&(o=i.items()),i.type=="menu"&&(i.selected=t.id),i.type=="menu-radio"&&(i.selected=t.id,Array.isArray(o)&&o.forEach(l=>{l.checked===!0&&delete l.checked,Array.isArray(l.items)&&l.items.forEach(a=>{a.checked===!0&&delete a.checked})}),t.checked=!0),i.type=="menu-check"){if(Array.isArray(i.selected)||(i.selected=[]),t.group==null){let l=i.selected.indexOf(t.id);l==-1?(i.selected.push(t.id),t.checked=!0):(i.selected.splice(l,1),t.checked=!1)}else if(t.group!==!1){let l=[],a=i.selected.indexOf(t.id),r=c=>{c.forEach(d=>{if(d.group===t.group){let u=i.selected.indexOf(d.id);u!=-1&&(d.id!=t.id&&l.push(d.id),i.selected.splice(u,1))}Array.isArray(d.items)&&r(d.items)})};r(o),a==-1&&(i.selected.push(t.id),t.checked=!0)}}if(typeof t.route=="string"){let l=t.route!==""?("/"+t.route).replace(/\/{2,}/g,"/"):"",a=p.parseRoute(l);if(a.keys.length>0)for(let r=0;r<a.keys.length;r++){let c=a.keys[r];c==null||this.routeData[c.name]==null||(l=l.replace(new RegExp(":"+c.name,"g"),this.routeData[c.name]))}setTimeout(()=>{window.location.hash=l},1)}this.refresh(e.item.id),s.finish()}}colorClick(e){if(e.item&&!e.item.disabled){let s=this.trigger("click",{target:e.item.id,item:e.item,color:e.color,final:!0});if(s.isCancelled===!0)return;e.item.color=e.color,this.refresh(e.item.id),s.finish()}}mouseAction(e,s,t,i){let o=this.get(i),l=this.trigger("mouse"+t,{target:i,item:o,object:o,originalEvent:e});if(!(l.isCancelled===!0||o.disabled||o.hidden)){switch(t){case"Enter":["label","input"].includes(o.type)||Z(s).addClass("over"),this.tooltipShow(i);break;case"Leave":["label","input"].includes(o.type)||Z(s).removeClass("over down"),this.tooltipHide(i);break;case"Down":["label","input"].includes(o.type)||Z(s).addClass("down");break;case"Up":["label","input"].includes(o.type)||Z(s).removeClass("down");break}l.finish()}}};var N=j,Ge=class extends ne{nodes;selected;img;icon;style;hasFocus;flat;flatButton;keyboard;editable;reorder;tabIndex;routeData;multi;skipRefresh;last;node_template;constructor(e){super(e.name),this.name="",this.box=null,this.sidebar=null,this.parent=null,this.nodes=[],this.menu=[],this.routeData={},this.selected=null,this.icon=null,this.style="",this.topHTML="",this.bottomHTML="",this.multi=!1,this.editable=!1,this.reorder=!1,this.flatButton=!1,this.keyboard=!0,this.flat=!1,this.hasFocus=!1,this.levelPadding=12,this.toggleAlign="right",this.skipRefresh=!1,this.tabIndex=null,this.handle={width:0,style:"",text:"",tooltip:""},this.badge=null,this.onClick=null,this.onSelect=null,this.onUnselect=null,this.onDblClick=null,this.onMouseEnter=null,this.onMouseLeave=null,this.onContextMenu=null,this.onMenuClick=null,this.onExpand=null,this.onCollapse=null,this.onKeydown=null,this.onRender=null,this.onRefresh=null,this.onResize=null,this.onDestroy=null,this.onFocus=null,this.onBlur=null,this.onFlat=null,this.onEdit=null,this.onRename=null,this.onReorder=null,this.onDragStart=null,this.onDragOver=null,this.node_template={id:null,text:"",order:null,count:null,icon:null,nodes:[],style:"",route:null,selected:!1,expanded:!1,hidden:!1,disabled:!1,group:!1,groupShowHide:!0,collapsible:!1,plus:!1,childOffset:0,onClick:null,onDblClick:null,onContextMenu:null,onExpand:null,onCollapse:null,parent:null,sidebar:null},this.last={badge:{},renaming:!1,move:null};let s=e.nodes;delete e.nodes,Object.assign(this,e),Array.isArray(s)&&this.add(s),e.nodes=s,typeof this.box=="string"&&(this.box=N(this.box).get(0)),this.box&&this.render(this.box)}add(e,s){return s===void 0&&(s=e,e=this),typeof e=="string"&&(e=this.get(e)),(e==null||e=="")&&(e=this),this.insert(e,null,s)}insert(e,s,t){let i,o,l,a,r;if(t===void 0&&typeof e=="string")if(t=s,s=e,s!=null){if(o=this.get(s),o==null)return Array.isArray(t)||(t=[t]),t[0].caption!=null&&t[0].text==null&&(console.log("NOTICE: sidebar node.caption property is deprecated, please use node.text. Node -> ",t[0]),t[0].text=t[0].caption),i=t[0].text,console.log('ERROR: Cannot insert node "'+i+'" because cannot find node "'+s+'" to insert before.'),null;e=this.get(s).parent}else e=this;typeof e=="string"&&(e=this.get(e)),(e==null||e=="")&&(e=this),Array.isArray(t)||(t=[t]);for(let c=0;c<t.length;c++){if(a=t[c],a.caption!=null&&a.text==null&&(console.log("NOTICE: sidebar node.caption property is deprecated, please use node.text"),a.text=a.caption),typeof a.id==null){i=a.text,console.log('ERROR: Cannot insert node "'+i+'" because it has no id.');continue}if(this.get(this,a.id)!=null){console.log("ERROR: Cannot insert node with id="+a.id+" (text: "+a.text+") because another node with the same id already exists.");continue}if(l=Object.assign({},this.node_template,a),l.sidebar=this,l.parent=e,r=l.nodes||[],l.nodes=[],s==null)e.nodes.push(l);else{if(o=this.get(e,s,!0),o==null)return console.log('ERROR: Cannot insert node "'+a.text+'" because cannot find node "'+s+'" to insert before.'),null;e.nodes.splice(o,0,l)}r.length>0&&this.insert(l,null,r)}return this.skipRefresh||this.refresh(e.id),l}remove(...e){let s=0,t=null;return e.forEach(i=>{let o=this.get(i);if(o==null)return;this.selected!=null&&(Array.isArray(this.selected)?this.selected.splice(this.selected.indexOf(o.id),1):this.selected===o.id&&(this.selected=null));let l=this.get(o.parent,i,!0);l!=null&&(o.parent.nodes[l].selected&&o.sidebar.unselect(o.id),o.parent.nodes.splice(l,1),o.parent.collapsible=o.parent.nodes.length>0,t=o,s++)}),this.skipRefresh||(s>0&&arguments.length==1&&t!=null?this.refresh(t.parent.id):this.refresh()),s}set(e,s,t){if(t===void 0&&(t=s,s=e,e=this),typeof e=="string"&&(e=this.get(e)),e.nodes==null)return null;for(let i=0;i<e.nodes.length;i++)if(e.nodes[i].id===s){let o=this.update(s,t);if(Object.keys(o).length!=0){let l=t.nodes;p.extend(e.nodes[i],t,l!=null?{nodes:[]}:{}),l!=null&&this.add(e.nodes[i],l),this.skipRefresh||this.refresh(s)}return!0}else if(this.set(e.nodes[i],s,t))return!0;return!1}get(e,s,t){if(arguments.length===0){let i=[],o=this.find({});for(let l=0;l<o.length;l++)o[l].id!=null&&i.push(o[l].id);return i}else{if((arguments.length==1||arguments.length==2&&s===!0)&&(t=s,s=e,e=this),typeof e=="string"&&(e=this.get(e)),e.nodes==null)return null;for(let i=0;i<e.nodes.length;i++){if(e.nodes[i].id==s)return t===!0?i:e.nodes[i];{let o=this.get(e.nodes[i],s,t);if(o||o===0)return o}}return null}}setCount(e,s,t={}){if(this.get(e).group){console.log(`Node "${e}" is a group and groups cannot have counts or badges.`);return}this.last.badge[e]={className:t.className??"",style:t.style??""};let o=N(this.box).find(`#node_${p.escapeId(e)} .tsg-node-badge`);if(o.length>0){let l=o.removeClass(null).addClass(`tsg-node-badge ${t.className??"tsg-node-count"}`).text(s);l.get(0).style.cssText=t.style||"";let a=this.get(e);a.count=s}else t.noRepeat||(this.set(e,{count:s}),t.noRepeat=!0,queueMicrotask(()=>this.setCount(e,s,t)))}find(e,s,t){if(arguments.length==1&&(s=e,e=this),t||(t=[]),typeof e=="string"&&(e=this.get(e)),e.nodes==null)return t;for(let i=0;i<e.nodes.length;i++){let o=!0;for(let l in s)e.nodes[i][l]!=s[l]&&(o=!1);o&&t.push(e.nodes[i]),e.nodes[i].nodes.length>0&&(t=this.find(e.nodes[i],s,t))}return t}sort(e,s){(!e||typeof e!="object")&&(e={}),e.foldersFirst==null&&(e.foldersFirst=!0),e.caseSensitive==null&&(e.caseSensitive=!1),e.reverse==null&&(e.reverse=!1),s==null&&(s=this.nodes),s.sort((t,i)=>{let o=t.nodes&&t.nodes.length>0,l=i.nodes&&i.nodes.length>0;if(e.foldersFirst===!1||!o&&!l||o&&l){let a=t.text,r=i.text;t.order!=null&&(a=t.order),i.order!=null&&(r=i.order),e.caseSensitive||(a=a.toLowerCase(),r=r.toLowerCase());let c=p.naturalCompare(a,r);return(c===1||c===-1)&(e.reverse?1:0)?-c:c}if(o&&!l)return e.reverse?1:-1;if(!o&&l)return e.reverse?-1:1}),s.forEach(t=>{t.nodes&&t.nodes.length>0&&this.sort(e,t.nodes)})}each(e,s){s==null&&(s=this.nodes),s.forEach(t=>{e.call(this,t),t.nodes&&t.nodes.length>0&&this.each(e,t.nodes)})}search(e,s=null){let t=0,i=e.toLowerCase();return this.each(l=>{let a=!1;typeof s=="function"?a=s(e,l):a=l.text.toLowerCase().indexOf(i)!==-1,a?(t++,o(l),l.hidden=!1):l.hidden=!0}),this.refresh(),t;function o(l){l.parent&&(l.parent.hidden=!1,o(l.parent))}}show(...e){let s=[];return e.forEach(t=>{let i=this.get(t);i==null||i.hidden===!1||(i.hidden=!1,s.push(i.id))}),s.length>0&&(e.length==1?this.refresh(e[0]):this.refresh()),s}hide(...e){let s=[];return e.forEach(t=>{let i=this.get(t);i==null||i.hidden===!0||(i.hidden=!0,s.push(i.id))}),s.length>0&&(e.length==1?this.refresh(e[0]):this.refresh()),s}enable(...e){let s=[];return e.forEach(t=>{let i=this.get(t);i==null||i.disabled===!1||(i.disabled=!1,s.push(i.id))}),s.length>0&&(e.length==1?this.refresh(e[0]):this.refresh()),s}disable(...e){let s=[];return e.forEach(t=>{let i=this.get(t);i==null||i.disabled===!0||(i.disabled=!0,i.selected&&this.unselect(i.id),s.push(i.id))}),s.length>0&&(e.length==1?this.refresh(e[0]):this.refresh()),s}select(e){if(Array.isArray(e)){[...e].forEach(o=>this.select(o));return}let s=this.get(e);if(!s)return!1;let t=this.trigger("select",{target:e,id:e,node:s});if(t.isCancelled===!0)return!0;if(!this.multi&&this.selected==e&&s.selected)return!1;this.find({selected:!0}).forEach(o=>o.selected=!1);let i=N(this.box).find("#node_"+p.escapeId(e));return i.addClass("tsg-selected").find(".tsg-icon").addClass("tsg-icon-selected"),i.length>0&&(this.inView(e)||this.scrollIntoView(e)),s.selected=!0,this.multi?(Array.isArray(this.selected)||(this.selected=this.selected?[this.selected]:[]),this.selected.push(e)):this.selected=this.multi?[e]:e,t.finish(),!0}unselect(e){if(arguments.length===0&&(e=this.selected),Array.isArray(e)){[...e].forEach(i=>this.unselect(i));return}let s=this.get(e);if(!s)return!1;let t=this.trigger("unselect",{target:e,id:e,node:s});if(t.isCancelled===!0)return!0;if(s.selected=!1,N(this.box).find("#node_"+p.escapeId(e)).removeClass("tsg-selected").find(".tsg-icon").removeClass("tsg-icon-selected"),typeof this.selected=="string"&&this.selected==e&&(this.selected=null),this.multi&&Array.isArray(this.selected)){let i=this.selected.indexOf(e);i!=-1&&this.selected.splice(i,1)}return t.finish(),!0}toggle(e){let s=this.get(e);if(s==null)return!1;if(s.plus){this.set(e,{plus:!1}),this.expand(e),this.refresh(e);return}return s.nodes.length===0||!s.collapsible?!1:this.get(e).expanded?this.collapse(e):this.expand(e)}collapse(e){let s=this.get(e);if(s==null)return!1;let t=this.trigger("collapse",{target:e,object:s,node:s});if(t.isCancelled!==!0)return N(this.box).find("#node_"+p.escapeId(e)+"_sub").hide(),N(this.box).find("#node_"+p.escapeId(e)+" .tsg-expanded").removeClass("tsg-expanded").addClass("tsg-collapsed"),s.expanded=!1,t.finish(),this.refresh(e),!0}expand(e){let s=this.get(e),t=this.trigger("expand",{target:e,object:s,node:s});if(t.isCancelled!==!0)return N(this.box).find("#node_"+p.escapeId(e)+"_sub").show(),N(this.box).find("#node_"+p.escapeId(e)+" .tsg-collapsed").removeClass("tsg-collapsed").addClass("tsg-expanded"),s.expanded=!0,t.finish(),this.refresh(e),!0}collapseAll(e){if(e==null&&(e=this),typeof e=="string"&&(e=this.get(e)),e.nodes==null)return!1;for(let s=0;s<e.nodes.length;s++)e.nodes[s].expanded===!0&&(e.nodes[s].expanded=!1),e.nodes[s].nodes&&e.nodes[s].nodes.length>0&&this.collapseAll(e.nodes[s]);return this.refresh(e.id),!0}expandAll(e){if(e==null&&(e=this),typeof e=="string"&&(e=this.get(e)),e.nodes==null)return!1;for(let s=0;s<e.nodes.length;s++)e.nodes[s].expanded===!1&&(e.nodes[s].expanded=!0),e.nodes[s].nodes&&e.nodes[s].nodes.length>0&&this.expandAll(e.nodes[s]);this.refresh(e.id)}expandParents(e){let s=this.get(e);return s==null?!1:(s.parent&&(s.parent.expanded||(s.parent.expanded=!0,this.refresh(s.parent.id)),this.expandParents(s.parent.id)),!0)}click(e,s){let t=this.get(e);if(t==null)return;if(t.disabled||t.group){this.trigger("click",{target:e,originalEvent:s,node:t,object:t}).finish();return}let i=N(this.box).find("#node_"+p.escapeId(e));i.addClass("tsg-selected").find(".tsg-icon").addClass("tsg-icon-selected"),setTimeout(()=>{let o=this.trigger("click",{target:e,originalEvent:s,node:t,object:t});if(o.isCancelled===!0){i.removeClass("tsg-selected").find(".tsg-icon").removeClass("tsg-icon-selected");return}if(this.multi){let a=s,r=a?.shiftKey??!1,c=(a?.ctrlKey||a?.metaKey)??!1;if(typeof this.selected=="string"&&(this.selected=[this.selected]),c&&!r)if(this.selected?.includes(e)){this.unselect(e);return}else this.select(e);else if(!c&&r){let d=this.getChain(),u=Math.min(this.selected.map(f=>d.indexOf(f))),h=d.indexOf(e);for(let f=Math.min(u,h);f<d.length&&f<=Math.max(u,h);f++){let m=this.get(d[f]);!this.selected.includes(d[f])&&m.hidden!=!0&&this.select(d[f])}}else{let d=this.selected?.filter(u=>u!=e&&this.selected.includes(u));this.unselect(d),this.selected?.includes(e)||this.select(e)}}else if(this.selected!==e){if(this.selected!=null&&this.unselect(this.selected),this.select(e),typeof t.route=="string"){let a=t.route!==""?("/"+t.route).replace(/\/{2,}/g,"/"):"",r=p.parseRoute(a);if(r.keys.length>0)for(let c=0;c<r.keys.length;c++){let d=r.keys[c];d!=null&&this.routeData[d.name]!=null&&(a=a.replace(new RegExp(":"+d.name,"g"),this.routeData[d.name]))}setTimeout(()=>{window.location.hash=a},1)}if(this.flat){let r=function(c){return c.map(u=>{let h=u.nodes.length>0?r(u.nodes):null;return{id:u.id,text:u.text,icon:u.icon,items:h}})};var l=r;let a=r(t.nodes);a.length>0&&this.flatMenu(i,a)}}o.finish()},1)}flatMenu(e,s){let t=this,i=N(e).find(".tsg-node-data");ie.show({anchor:i.get(0),name:this.name+"_flat-menu",items:s,position:"right|left",onSelect(o){t.unselect(),t.click(o.detail.item.id,o.detail.originalEvent)},onHide(o){t.unselect()}}),V.hide(this.name+"_tooltip")}focus(e){let s=this.trigger("focus",{target:this.name,originalEvent:e});if(s.isCancelled===!0)return!1;this.hasFocus=!0,N(this.box).find(".tsg-sidebar-body").addClass("tsg-focus"),setTimeout(()=>{let t=N(this.box).find("#sidebar_"+this.name+"_focus").get(0);document.activeElement!=t&&t.focus()},10),s.finish()}blur(e){let s=this.trigger("blur",{target:this.name,originalEvent:e});if(s.isCancelled===!0)return!1;this.hasFocus=!1,N(this.box).find(".tsg-sidebar-body").removeClass("tsg-focus"),s.finish()}next(e,s){if(e==null)return null;let t=e.parent,i=this.get(e.id,!0),o=null;if(e.expanded&&e.nodes.length>0&&s!==!0){let l=e.nodes[0]??null;l==null?o=null:l.hidden||l.disabled||l.group?o=this.next(l):o=l}else t&&i+1<t.nodes.length?o=t.nodes[i+1]??null:o=this.next(t,!0);return o!=null&&(o.hidden||o.disabled||o.group)&&(o=this.next(o)),o}prev(e){if(e==null)return null;let s=e.parent,t=this.get(e.id,!0),i=a=>{if(a.expanded&&a.nodes.length>0){let r=a.nodes[a.nodes.length-1]??null;return r==null?a:r.hidden||r.disabled||r.group?this.prev(r):i(r)}return a},o=t>0?s.nodes[t-1]:null,l=t>0&&o!=null?i(o):s;return l!=null&&(l.hidden||l.disabled||l.group)&&(l=this.prev(l)),l}getChain(e,s={}){s.returnDisabled??=!1,s.returnGroups??=!1;let t=[];return e==null&&(e=this.nodes),e.forEach(i=>{(!i.disabled&&!i.group||i.disabled&&s.returnDisabled||i.group&&s.returnGroups)&&t.push(i.id),Array.isArray(i.nodes)&&i.expanded&&t.push(...this.getChain(i.nodes,s))}),t}keydown(e){let s=this,t=Array.isArray(this.selected)?this.selected[0]:this.selected,i=this.get(t);if(this.keyboard!==!0)return;if(i||(i=this.nodes[0]??null),e.keyCode==27){let r=this.last.move;if(r?.reorder&&r?.moved){r.restore();return}}let o=this.trigger("keydown",{target:this.name,originalEvent:e});if(o.isCancelled===!0)return;(e.keyCode==13||e.keyCode==32)&&(e.keyCode==13&&this.editable&&!e.ctrlKey&&!e.metaKey?this.edit(t):i.nodes.length>0&&this.toggle(t)),e.keyCode==37&&(i.nodes.length>0&&i.expanded?this.collapse(t):(l(i.parent),i.parent.group||this.collapse(i.parent.id))),e.keyCode==39&&(i.nodes.length>0||i.plus)&&!i.expanded&&this.expand(t),e.keyCode==38&&(this.get(t)==null?l(this.nodes[0]||null):l(a(i,this.prev))),e.keyCode==40&&(this.get(t)==null?l(this.nodes[0]||null):l(a(i,this.next))),[13,32,37,38,39,40].includes(e.keyCode)&&(e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()),o.finish();function l(r,c){r!=null&&!r.hidden&&!r.disabled&&!r.group&&(s.click(r.id,c),s.inView(r.id)||s.scrollIntoView(r.id))}function a(r,c){for(r=c.call(s,r);r!=null&&(r.hidden||r.disabled)&&!r.group;)r=c(r);return r}}inView(e){let s=N(this.box).find("#node_"+p.escapeId(e)).get(0);if(!s)return!1;let t=N(this.box).find(".tsg-sidebar-body").get(0);return!(!t||s.offsetTop<t.scrollTop||s.offsetTop+s.clientHeight>t.clientHeight+t.scrollTop)}scrollIntoView(e,s){return new Promise(t=>{if(e==null&&(e=Array.isArray(this.selected)?this.selected[0]:this.selected),this.get(e)==null)return;let o=N(this.box).find("#node_"+p.escapeId(e)).get(0);o&&o.scrollIntoView({block:"center",inline:"center",behavior:s?"auto":"smooth"}),setTimeout(()=>{this.resize(),t()},s?0:500)})}dblClick(e,s){let t=this.get(e),i=this.trigger("dblClick",{target:e,originalEvent:s,object:t});i.isCancelled!==!0&&(this.editable?this.edit(e):this.flat||this.toggle(e),i.finish())}mouseDown(e,s){let t=this;if(this.reorder){this.last.move={x:s.screenX,y:s.screenY,divX:0,divY:0,reorder:!0,moved:!1};let l=this.last.move,a=N(this.box).find(".tsg-sidebar-body");if(!l.ghost){let r=N(this.box).find(`#node_${p.escapeId(e)}`);l.offsetY=s.offsetY,l.target=e;let c=r.get(0);l.pos={top:c.offsetTop-1,left:c.offsetLeft};let d=N(r.find(".tsg-node-data").get(0).cloneNode(!0));l.node=r,l.nodeSub=r.next(),a.append('<div id="sidebar_'+this.name+'_ghost" class="tsg-node tsg-ghost"></div>'),N(this.box).find("#sidebar_"+this.name+"_ghost").append(d),l.ghost=N(this.box).find("#sidebar_"+this.name+"_ghost"),l.ghost.css({display:"none"}),l.restore=()=>{l.resetReorder(),this.refresh()},l.resetReorder=()=>{this.last.move=null,N(this.box).find(`#sidebar_${this.name}_ghost`).remove(),N(document).off(`.tsg-${this.name}-reorder`)}}N(document).on(`mousemove.tsg-${this.name}-reorder`,i).on(`mouseup.tsg-${this.name}-reorder`,o)}function i(l){if(!l.target.tagName)return;let a=t.last.move;if(a.divX=l.screenX-a.x,a.divY=l.screenY-a.y,Math.abs(a.divX)<=1&&Math.abs(a.divY)<=1)return;if(t.reorder==!0&&a.reorder&&!a.moved){let d=t.trigger("dragStart",{target:a.target,moved:!0,node:t.get(a.target),mv:a,originalEvent:l});if(d.isCancelled===!0){a.restore();return}let u=a.node.get(0).getBoundingClientRect();if(a.moved=!0,a.node.html("").removeAttr("id","data-id").addClass("tsg-reorder-empty").css({height:u.height+"px"}),a.node.next().css("display")!=="none"){let h=a.node.next().get(0).getBoundingClientRect();a.node.next().html('<div class="tsg-reorder-empty-sub"></div>').css({height:h.height+"px"})}a.ghost.css({display:"block"}),d.finish()}a.ghost.css({top:a.pos.top+a.divY+"px",left:0});let c=N(l.target).closest(".tsg-node, .tsg-node-group").attr("data-id");if(N(l.target).hasClass("tsg-sidebar-body")&&l.layerY>5&&!a.append){let d=t.trigger("dragOver",{target:a.target,append:!0,mv:a,originalEvent:l});if(d.isCancelled===!0)return;a.ghost.before(a.node),a.ghost.before(a.nodeSub),a.append=!0,a.moveBefore=null,d.finish()}else if(c!=null&&c!=a.moveBefore){a.append=!1,a.moveBefore=c;let d=t.trigger("dragOver",{target:a.target,moveBefore:c,mv:a,originalEvent:l});if(d.isCancelled===!0)return;let u=N(t.box).find(`#node_${p.escapeId(c)}`);u.before(a.node),u.before(a.nodeSub),d.finish()}}function o(l){let a=t.last.move;if(a.resetReorder(),a.moved)if(a.moveBefore!=null&&a.target!=a.moveBefore||a.append){let r=t.trigger("reorder",{target:a.target,moveBefore:a.moveBefore,append:a.append,originalEvent:l});if(r.isCancelled===!0){t.refresh();return}let c=t.get(a.target),d=c.parent.nodes.indexOf(c),u=c.parent.nodes.splice(d,1);if(a.append)t.nodes.push(...u),u.forEach(h=>h.parent=t);else{let h=t.get(a.moveBefore),f=h.parent.nodes.indexOf(h);u.forEach(m=>m.parent=h.parent),h.parent.nodes.splice(f,0,...u)}t.refresh(),r.finish()}else t.refresh()}}edit(e){let s=this,t=N(this.box).find("#node_"+p.escapeId(e)),i=t.find(".tsg-node-text"),o=this.trigger("edit",{target:e,el:t,textEl:i});if(o.isCancelled===!0)return;this.last.renaming=!0,t.addClass("tsg-editing"),i.addClass("tsg-focus").css("pointer-events","all").attr("contenteditable",p.isFirefox?"true":"plaintext-only").on("blur.node-editing",r=>{setTimeout(a,0)}).on("keydown.node-editing",r=>{let c=r;c.keyCode==13&&a(c),c.keyCode==27&&a(c,!0)}),i.get(0).focus();let l=i.text();return p.setCursorPosition(i[0],0,i.text().length),o.finish(),i.get(0);function a(r,c){let d=i.text();if(t.removeClass("tsg-editing"),i.removeClass("tsg-focus").css("pointer-events","none").removeAttr("contenteditable").off(".node-editing"),!c&&s.last.renaming&&l!==d){let u=s.trigger("rename",{target:e,text_previous:l,text_new:d,originalEvent:r});if(u.isCancelled===!0){i.text(l),s.last.renaming=!1,s.focus();return}s.set(e,{text:d}),u.finish()}c&&s.set(e,{text:l}),s.last.renaming=!1,s.focus()}}contextMenu(e,s){let t=this.get(e);Array.isArray(this.selected)?this.selected.includes(e)||this.click(e):e!=this.selected&&this.click(e);let i=this.trigger("contextMenu",{target:e,originalEvent:s,object:t,allowOnDisabled:!1});i.isCancelled!==!0&&(t.disabled&&!i.detail.allowOnDisabled||(this.menu.length>0&&(ie.hide(this.name+"_menu"),ie.show({name:this.name+"_menu",anchor:document.body,contextMenu:!0,items:this.menu,originalEvent:s})?.select?.(l=>{this.menuClick(e,l.detail)})),s.preventDefault&&s.preventDefault(),i.finish()))}menuClick(e,s={}){let t=this.trigger("menuClick",{target:e,...s});t.isCancelled!==!0&&t.finish()}goFlat(){let e=this.trigger("flat",{goFlat:!this.flat});e.isCancelled!==!0&&(this.flat=!this.flat,this.refresh(),this.flat?(this.nodes.forEach(s=>{s.group||(this.collapse(s.id),this.collapseAll(s.id))}),this.unselect()):this.nodes.forEach(s=>{s.group||(this.expand(s.id),this.expandAll(s.id))}),e.finish())}render(e){let s=Date.now(),t=this;typeof e=="string"&&(e=N(e).get(0));let i=this.trigger("render",{target:this.name,box:e??this.box});if(i.isCancelled===!0||(e!=null&&(this.unmount(),this.box=e),!this.box))return;N(this.box).attr("name",this.name).addClass("tsg-reset tsg-sidebar").html(`<div>
267
+ <div class="tsg-sidebar-top"></div>
268
+ <input id="sidebar_${this.name}_focus" ${this.tabIndex?'tabindex="'+this.tabIndex+'"':""}
269
+ style="position: absolute; top: 0; right: 1px; width: 1px; z-index: -1; opacity: 0"
270
+ ${p.isMobile?"readonly":""}/>
271
+ <div class="tsg-sidebar-body"></div>
272
+ <div class="tsg-sidebar-bottom"></div>
273
+ </div>`);let o=N(this.box).get(0),l=o.getBoundingClientRect();N(this.box).find(":scope > div").css({width:l.width+"px",height:l.height+"px"}),o.style.cssText+=this.style;let a;N(this.box).find("#sidebar_"+this.name+"_focus").on("focus",function(c){clearTimeout(a),t.hasFocus||t.focus(c)}).on("blur",function(c){a=setTimeout(()=>{t.hasFocus&&t.blur(c)},100)}).on("keydown",function(c){let d=se[t.name];d?.keydown?.call(d,c)}),N(this.box).off("mousedown").on("mousedown",function(c){setTimeout(()=>{if(["INPUT","TEXTAREA","SELECT"].indexOf(c.target?.tagName?.toUpperCase())==-1){let d=N(t.box).find("#sidebar_"+t.name+"_focus"),u=d.get(0);document.activeElement!=u&&d.length>0&&u?.focus()}},1)});let r=`<div class="tsg-flat tsg-flat-${this.flat?"right":"left"}" ${this.flatButton==!1?'style="display: none"':""}></div>`;return(this.topHTML!==""||r!=="")&&(N(this.box).find(".tsg-sidebar-top").html(this.topHTML+r),N(this.box).find(".tsg-sidebar-body").css("top",N(this.box).find(".tsg-sidebar-top").get(0)?.clientHeight+"px"),N(this.box).find(".tsg-flat").off("click").on("click",c=>{this.goFlat()})),this.bottomHTML!==""&&(N(this.box).find(".tsg-sidebar-bottom").html(this.bottomHTML),N(this.box).find(".tsg-sidebar-body").css("bottom",N(this.box).find(".tsg-sidebar-bottom").get(0)?.clientHeight+"px")),this.last.observeResize=new ResizeObserver(()=>{this.resize()}),this.last.observeResize.observe(this.box),i.finish(),this.refresh(),Date.now()-s}update(e,s={}){let t=this.get(e),i;if(t){let o=N(this.box).find("#node_"+p.escapeId(t.id));if(t.group){if(s.text&&(t.text=s.text,o.find(".tsg-group-text").replace(typeof t.text=="function"?t.text.call(this,t):'<span class="tsg-group-text">'+t.text+"</span>"),delete s.text),s.class&&(t.class=s.class,i=o.data("level"),o.get(0).className="tsg-node-group tsg-level-"+i+(t.class?" "+t.class:""),delete s.class),s.style){t.style=s.style;let l=o.get(0).nextElementSibling;l&&l.setAttribute("style",t.style+";"+(!t.hidden&&t.expanded?"":"display: none;")),delete s.style}}else{if(s.icon){let l=o.find(".tsg-node-image > span");l.length>0&&(t.icon=s.icon,l[0].className=typeof t.icon=="function"?t.icon.call(this,t):t.icon,delete s.icon)}if(s.count!=null){t.count=s.count;let l=t.count??this.badge?.text,a=this.badge?.style,r=this.last.badge[t.id];typeof l=="function"&&(l=l.call(this,t,i)),o.find(".tsg-node-badge").html(l).attr("style",`${a}; ${r?.style??""}`),o.find(".tsg-node-badge").length>0&&delete s.count}if(s.class&&o.length>0&&(t.class=s.class,i=o.data("level"),o[0].className="tsg-node tsg-level-"+i+(t.selected?" tsg-selected":"")+(t.disabled?" tsg-disabled":"")+(t.class?" "+t.class:""),delete s.class),s.text!=null&&(t.text=s.text,o.find(".tsg-node-text").html(typeof t.text=="function"?t.text.call(this,t):t.text),delete s.text),s.style&&o.length>0){let l=o.find(".tsg-node-text");t.style=s.style,l[0].setAttribute("style",t.style),delete s.style}}}return s}refresh(e,s={}){if(this.box==null)return;let t=N(this.box).find(":scope > div > .tsg-sidebar-body").get(0),{scrollTop:i,scrollLeft:o}=t??{},l=Date.now(),a=this.trigger("refresh",{target:e??this.name,nodeId:e??null,fullRefresh:e==null});if(a.isCancelled===!0)return;this.flatButton==!0?N(this.box).find(".tsg-sidebar-top .tsg-flat").show().removeClass("tsg-flat-left tsg-flat-right").addClass(` tsg-flat-${this.flat?"right":"left"}`):N(this.box).find(".tsg-sidebar-top .tsg-flat").hide();let r=N(this.box).get(0);if(N(this.box).find(":scope > div").removeClass("tsg-sidebar-flat").addClass(this.flat?"tsg-sidebar-flat":"").css({width:(r?.clientWidth??0)+"px",height:(r?.clientHeight??0)+"px"}),this.nodes.length>0&&this.nodes[0].parent==null){let g=this.nodes;this.nodes=[],this.add(this,g)}let c=this,d,u;if(e==null)d=this,u=".tsg-sidebar-body";else{if(d=this.get(e),d==null)return;u="#node_"+p.escapeId(d.id)+"_sub"}let h="#node_"+p.escapeId(d.id),f;d!==this&&(f=b(d),N(this.box).find(h).before('<div id="sidebar_'+this.name+'_tmp"></div>'),N(this.box).find(h).remove(),N(this.box).find(u).remove(),N(this.box).find("#sidebar_"+this.name+"_tmp").before(f),N(this.box).find("#sidebar_"+this.name+"_tmp").remove());let m=N(this.box).find(":scope > div").get(0),y={top:m?.scrollTop,left:m?.scrollLeft},x=d==this?N(this.box).find(":scope > div > .tsg-sidebar-body"):N(t).find(u);x.html("");for(let g=0;g<d.nodes.length;g++){let v=d.nodes[g];if(f=b(v),x.append(f),v.nodes.length!==0)this.refresh(v.id,{recursive:!0});else{let w=this.trigger("refresh",{target:v.id});if(w.isCancelled===!0)return;w.finish()}}if(m&&(m.scrollTop=y.top??0,m.scrollLeft=y.left??0),!s.recursive){let g=N(this.box).find(`${h}, ${h} .tsg-eaction, ${u} .tsg-eaction`);p.bindEvents(g,this),N(t).prop({scrollLeft:o,scrollTop:i})}return a.finish(),Date.now()-l;function b(g){let v="",w=g.icon;w==null&&(w=c.icon);let T=g.parent,_=0;for(;T&&T.parent!=null;)T=T.parent,_++;if(g.caption!=null&&g.text==null&&(g.text=g.caption),g.caption!=null&&(console.log("NOTICE: sidebar node.caption property is deprecated, please use node.text. Node -> ",g),g.text=g.caption),Array.isArray(g.nodes)&&g.nodes.length>0&&(g.collapsible=!0),g.group){let C=p.lang(typeof g.text=="function"?g.text.call(c,g,_):g.text);String(C).substr(0,5)!="<span"&&(C=`<span class="tsg-group-text">${C}</span>`),v=`
274
+ <div id="node_${g.id}" data-id="${g.id}" data-level="${_}" style="${g.hidden?"display: none":""}"
275
+ class="tsg-node-group tsg-level-${_} ${g.class?g.class:""} tsg-eaction"
276
+ data-click="toggle|${g.id}"
277
+ data-contextmenu="contextMenu|${g.id}|event"
278
+ data-mouseenter="showPlus|this|inherit"
279
+ data-mouseleave="showPlus|this|transparent">
280
+ ${g.groupShowHide&&g.collapsible?`<span>${!g.hidden&&g.expanded?p.lang("Hide"):p.lang("Show")}</span>`:"<span></span>"} ${C}
281
+ </div>
282
+ <div class="tsg-node-sub" id="node_${g.id}_sub" style="${g.style}; ${!g.hidden&&g.expanded?"":"display: none;"}">
283
+ </div>`,c.flat&&(v=`
284
+ <div class="tsg-node-group" id="node_${g.id}" data-id="${g.id}"><span>&#160;</span></div>
285
+ <div id="node_${g.id}_sub" style="${g.style}; ${!g.hidden&&g.expanded?"":"display: none;"}"></div>`)}else{g.selected&&!g.disabled&&(c.multi?(c.selected??=[],c.selected.includes(g.id)||c.selected.push(g.id)):c.selected=g.id);let C="";if(w)if(w instanceof Object){let S=typeof w.text=="function"?w.text.call(c,g,_)??"":w.text;C=`
286
+ <div class="tsg-node-image tsg-eaction" style="${c.icon.style??""}; pointer-events: all"
287
+ data-mouseEnter="mouseAction|Enter|this|${g.id}|event|icon"
288
+ data-mouseLeave="mouseAction|Leave|this|${g.id}|event|icon"
289
+ data-click="mouseAction|click|this|${g.id}|event|icon">
290
+ ${S}
291
+ </div>
292
+ `}else C=`
293
+ <div class="tsg-node-image">
294
+ <span class="${typeof w=="function"?w.call(c,g,_):w}"></span>
295
+ </div>`;let D="",O="";if(c.badge!=null||g.count!=null){let S=g.count??c.badge?.text,$=c.badge?.style,H=c.last.badge[g.id];typeof S=="function"&&(S=S.call(c,g,_)),(S||S===0)&&(O=`
296
+ <div class="tsg-node-badge tsg-eaction ${g.count!=null?"tsg-node-count":""} ${H?.className??""}"
297
+ style="${$??""};${H?.style??""}"
298
+ data-mouseEnter="mouseAction|Enter|this|${g.id}|event|badge"
299
+ data-mouseLeave="mouseAction|Leave|this|${g.id}|event|badge"
300
+ data-click="mouseAction|click|this|${g.id}|event|badge"
301
+ >
302
+ ${S}
303
+ </div>`)}let I=["tsg-node",`tsg-level-${_}`,"tsg-eaction"];if(g.selected&&I.push("tsg-selected"),g.disabled&&I.push("tsg-disabled"),g.class&&I.push(g.class),g.collapsible===!0){let S=["tsg-sb-toggle","tsg-eaction",g.expanded?"tsg-expanded":"tsg-collapsed"];c.toggleAlign=="left"&&S.push("tsg-left-toggle"),D=`<div class="${S.join(" ")}" data-click="toggle|${g.id}"><span></span></div>`,I.push("tsg-has-children")}let R=p.lang(typeof g.text=="function"?g.text.call(c,g,_):g.text),F=g.parent?.childOffset??0;_===0&&g.collapsible===!0&&c.toggleAlign=="left"&&(F+=12),v=`
304
+ <div id="node_${g.id}" class="${I.join(" ")}" data-id="${g.id}" data-level="${_}"
305
+ style="${g.hidden?"display: none;":""}"
306
+ data-click="click|${g.id}|event"
307
+ data-dblclick="dblClick|${g.id}|event"
308
+ data-mouseDown="mouseDown|${g.id}|event"
309
+ data-contextmenu="contextMenu|${g.id}|event"
310
+ data-mouseEnter="mouseAction|Enter|this|${g.id}|event"
311
+ data-mouseLeave="mouseAction|Leave|this|${g.id}|event"
312
+ >
313
+ ${c.handle.text?`<div class="tsg-node-handle tsg-eaction" style="width: ${c.handle.width}px; ${c.handle.style}"
314
+ data-mouseEnter="mouseAction|Enter|this|${g.id}|event|handle"
315
+ data-mouseLeave="mouseAction|Leave|this|${g.id}|event|handle"
316
+ data-click="mouseAction|click|this|${g.id}|event|handle"
317
+ >
318
+ ${typeof c.handle.text=="function"?c.handle.text.call(c,g,_)??"":c.handle.text}
319
+ </div>`:""}
320
+ <div class="tsg-node-data" style="margin-left: ${_*c.levelPadding+F+c.handle.width}px">
321
+ ${D} ${C} ${O}
322
+ <div class="tsg-node-text ${C?"":"no-icon"}" style="${g.style||""}">${R}</div>
323
+ </div>
324
+ </div>
325
+ <div class="tsg-node-sub" id="node_${g.id}_sub" style="${g.style}; ${!g.hidden&&g.expanded?"":"display: none;"}"></div>`,c.flat&&(v=`
326
+ <div id="node_${g.id}" class="${I.join(" ")} tsg-node-flat" data-id="${g.id}" style="${g.hidden?"display: none;":""}"
327
+ data-click="click|${g.id}|event"
328
+ data-dblclick="dblClick|${g.id}|event"
329
+ data-contextmenu="contextMenu|${g.id}|event"
330
+ data-mouseEnter="mouseAction|Enter|this|${g.id}|event|tooltip"
331
+ data-mouseLeave="mouseAction|Leave|this|${g.id}|event|tooltip"
332
+ >
333
+ <div class="tsg-node-data">${C}</div>
334
+ </div>
335
+ <div class="tsg-node-sub" id="node_${g.id}_sub" style="${g.style}; ${!g.hidden&&g.expanded?"":"display: none;"}"></div>`)}return v}}mouseAction(e,s,t,i,o){let l,a=this.get(t);if(o==null&&(l=this.trigger("mouse"+e,{target:a.id,node:a,originalEvent:i})),o=="tooltip"){let c=p.lang(typeof a.text=="function"?a.text.call(this,a):a.text)+(a.count!=null?' - <span class="tsg-node-badge tsg-node-count">'+a.count+"</span>":"");(e=="Leave"||this.selected==a.id)&&(c=""),this.tooltip(s,c)}if(o=="handle")if(e=="click"){let r=this.handle.onClick;typeof r=="function"&&r.call(this,a,i)}else{let r=this.handle.tooltip;typeof r=="function"&&(r=r.call(this,a,i)),e=="Leave"&&(r=""),this.otherTooltip(s,r)}if(o=="icon")if(e=="click"){let r=this.icon.onClick;typeof r=="function"&&r.call(this,a,i)}else{let r=this.icon.tooltip;typeof r=="function"&&(r=r.call(this,a,i)),e=="Leave"&&(r=""),this.otherTooltip(s,r)}if(o=="badge")if(e=="click"){let r=this.badge?.onClick;typeof r=="function"&&r.call(this,a,i)}else{let r=this.badge?.tooltip;typeof r=="function"&&(r=r.call(this,a,i)),e=="Leave"&&(r=""),this.otherTooltip(s,r)}l?.finish()}tooltip(e,s){let t=N(e).find(".tsg-node-data");s!==""?V.show({anchor:t.get(0),name:this.name+"_tooltip",html:s,position:"right|left"}):V.hide(this.name+"_tooltip")}otherTooltip(e,s){s!==""?V.show({anchor:e,name:this.name+"_tooltip",html:s,position:"top|bottom"}):V.hide(this.name+"_tooltip")}showPlus(e,s){N(e).find("span:nth-child(1)").css("color",s)}resize(){let e=Date.now(),s=this.trigger("resize",{target:this.name});if(s.isCancelled!==!0){if(this.box!=null){let i=N(this.box).get(0).getBoundingClientRect();N(this.box).css("overflow","hidden"),N(this.box).find(":scope > div").css({width:i.width+"px",height:i.height+"px"})}return s.finish(),Date.now()-e}}destroy(){let e=this.trigger("destroy",{target:this.name});e.isCancelled!==!0&&(N(this.box).find(".tsg-sidebar-body").length>0&&this.unmount(),delete se[this.name],e.finish())}unmount(){super.unmount(),this.last.observeResize?.disconnect()}lock(e,s){p.lock(this.box,e,s)}unlock(e){p.unlock(this.box,e)}};var B=j,ve=class extends ne{active;reorder;flow;tooltip;tabs;routeData;last;right;style;tab_template;constructor(e){super(e.name),this.box=null,this.name="",this.active=null,this.reorder=!1,this.flow="down",this.tooltip="top|left",this.tabs=[],this.routeData={},this.last={},this.right="",this.style="",this.onClick=null,this.onMouseEnter=null,this.onMouseLeave=null,this.onMouseDown=null,this.onMouseUp=null,this.onClose=null,this.onRender=null,this.onRefresh=null,this.onResize=null,this.onDestroy=null,this.tab_template={id:null,text:null,icon:null,route:null,hidden:!1,disabled:!1,closable:!1,tooltip:null,style:"",onClick:null,onRefresh:null,onClose:null};let s=e.tabs;delete e.tabs,Object.assign(this,e),Array.isArray(s)&&this.add(s),e.tabs=s,typeof this.box=="string"&&(this.box=B(this.box).get(0)),this.box&&this.render(this.box)}add(e){return this.insert(null,e)}insert(e,s){Array.isArray(s)||(s=[s]);let t=[];return s.forEach(i=>{if(i.id==null){console.log(`ERROR: The parameter "id" is required but not supplied. (obj: ${this.name})`);return}if(!p.checkUniqueId(i.id,this.tabs,"tabs",this.name))return;let o=Object.assign({},this.tab_template,i);if(e==null)this.tabs.push(o),t.push(this.animateInsert(null,o));else{let l=this.get(e,!0),a=this.tabs[l].id;this.tabs.splice(l,0,o),t.push(this.animateInsert(a,o))}}),Promise.all(t)}remove(...e){let s=0;return e.forEach(t=>{let i=this.get(t);i&&(s++,this.tabs.splice(this.get(i.id,!0),1),B(this.box).find(`#tabs_${this.name}_tab_${p.escapeId(i.id)}`).remove())}),this.resize(),s}select(e){return this.active==e||this.get(e)==null?!1:(this.active=e,this.refresh(),!0)}set(e,s){let t=this.get(e,!0);return t==null?!1:(p.extend(this.tabs[t],s),this.refresh(e),!0)}get(e,s){if(arguments.length===0){let t=[];for(let i=0;i<this.tabs.length;i++)this.tabs[i].id!=null&&t.push(this.tabs[i].id);return t}else for(let t=0;t<this.tabs.length;t++)if(this.tabs[t].id==e)return s===!0?t:this.tabs[t];return null}show(...e){let s=[];return e.forEach(t=>{let i=this.get(t);!i||i.hidden===!1||(i.hidden=!1,s.push(i.id))}),setTimeout(()=>{s.forEach(t=>{this.refresh(t),this.resize()})},15),s}hide(...e){let s=[];return e.forEach(t=>{let i=this.get(t);!i||i.hidden===!0||(i.hidden=!0,s.push(i.id))}),setTimeout(()=>{s.forEach(t=>{this.refresh(t),this.resize()})},15),s}enable(...e){let s=[];return e.forEach(t=>{let i=this.get(t);!i||i.disabled===!1||(i.disabled=!1,s.push(i.id))}),setTimeout(()=>{s.forEach(t=>{this.refresh(t)})},15),s}disable(...e){let s=[];return e.forEach(t=>{let i=this.get(t);!i||i.disabled===!0||(i.disabled=!0,s.push(i.id))}),setTimeout(()=>{s.forEach(t=>{this.refresh(t)})},15),s}dragMove(e){if(!this.last.reordering)return;let s=this,t=this.last.moving,i=this.tabs[t.index],o=r(t.index,1),l=r(t.index,-1),a=B(this.box).find("#tabs_"+this.name+"_tab_"+p.escapeId(i.id));if(t.divX>0&&o){let c=B(this.box).find("#tabs_"+this.name+"_tab_"+p.escapeId(o.id)),d=a.get(0).clientWidth,u=c.get(0).clientWidth;if(d<u?(d=Math.floor(d/3),u=u-d):(d=Math.floor(u/3),u=u-d),t.divX>u){let h=this.tabs.indexOf(o);this.tabs.splice(t.index,0,this.tabs.splice(h,1)[0]),t.$tab.before(c.get(0)),t.$tab.css("opacity",0),Object.assign(this.last.moving,{index:h,divX:-d,x:e.pageX+d,left:t.left+t.divX+d});return}}if(t.divX<0&&l){let c=B(this.box).find("#tabs_"+this.name+"_tab_"+p.escapeId(l.id)),d=a.get(0).clientWidth,u=c.get(0).clientWidth;if(d<u?(d=Math.floor(d/3),u=u-d):(d=Math.floor(u/3),u=u-d),Math.abs(t.divX)>u){let h=this.tabs.indexOf(l);this.tabs.splice(t.index,0,this.tabs.splice(h,1)[0]),c.before(t.$tab),t.$tab.css("opacity",0),Object.assign(t,{index:h,divX:d,x:e.pageX-d,left:t.left+t.divX-d});return}}function r(c,d){c+=d;let u=s.tabs[c];return u&&u.hidden?r(c,d):u}}mouseAction(e,s,t){let i=this.get(s),o=this.trigger("mouse"+e,{target:s,tab:i,object:i,originalEvent:t});if(!(o.isCancelled===!0||i?.disabled||i?.hidden)){switch(e){case"Enter":this.tooltipShow(s);break;case"Leave":this.tooltipHide(s);break;case"Down":this.initReorder(s,t);break;case"Up":break}o.finish()}}tooltipShow(e){let s=this.get(e),t=B(this.box).find("#tabs_"+this.name+"_tab_"+p.escapeId(e)).get(0);if(this.tooltip==null||s?.disabled||this.last.reordering)return;let i=this.tooltip,o=s?.tooltip;typeof o=="function"&&(o=o.call(this,s)),V.show({anchor:t,name:this.name+"_tooltip",html:o,position:i})}tooltipHide(e){this.tooltip!=null&&V.hide(this.name+"_tooltip")}getTabHTML(e){let s=this.get(e,!0),t=this.tabs[s];if(t==null)return!1;t.text==null&&t.caption!=null&&(t.text=t.caption),t.tooltip==null&&t.hint!=null&&(t.tooltip=t.hint),t.caption!=null&&console.log("NOTICE: tabs tab.caption property is deprecated, please use tab.text. Tab -> ",t),t.hint!=null&&console.log("NOTICE: tabs tab.hint property is deprecated, please use tab.tooltip. Tab -> ",t);let i=t.text;typeof i=="function"&&(i=i.call(this,t)),i==null&&(i="");let o="",l="";t.hidden&&(l+="display: none;"),t.disabled&&(l+="opacity: 0.2;"),t.closable&&!t.disabled&&(o=`<div class="tsg-tab-close tsg-eaction ${this.active===t.id?"active":""}"
336
+ data-mousedown="stop" data-mouseup="clickClose|${t.id}|event">
337
+ </div>`);let a="";return t.icon&&(a=`<span class="tsg-tab-icon ${t.icon}"></span>`),`
338
+ <div id="tabs_${this.name}_tab_${t.id}" style="${l} ${t.style}"
339
+ class="tsg-tab tsg-eaction ${this.active===t.id?"active":""} ${t.closable?"closable":""} ${t.class?t.class:""}"
340
+ data-mouseenter="mouseAction|Enter|${t.id}|event]"
341
+ data-mouseleave="mouseAction|Leave|${t.id}|event]"
342
+ data-mousedown="mouseAction|Down|${t.id}|event"
343
+ data-mouseup="mouseAction|Up|${t.id}|event"
344
+ data-click="click|${t.id}|event">
345
+ ${a+p.lang(i)+o}
346
+ </div>`}refresh(e){let s=Date.now();this.flow=="up"?B(this.box).addClass("tsg-tabs-up"):B(this.box).removeClass("tsg-tabs-up");let t=this.trigger("refresh",{target:e??this.name,object:this.get(e)});if(t.isCancelled!==!0){if(e==null)for(let i=0;i<this.tabs.length;i++)this.refresh(this.tabs[i].id);else{let i="#tabs_"+this.name+"_tab_"+p.escapeId(e),o=B(this.box).find(i),l=this.getTabHTML(e);o.length===0?l&&B(this.box).find("#tabs_"+this.name+"_right").before(l):B(this.box).find(".tab-animate-insert").length==0&&l&&o.replace(l),p.bindEvents(B(this.box).find(`${i}, ${i} .tsg-eaction`),this)}return B(this.box).find("#tabs_"+this.name+"_right").html(this.right),t.finish(),Date.now()-s}}render(e){let s=Date.now();typeof e=="string"&&(e=B(e).get(0));let t=this.trigger("render",{target:this.name,box:e??this.box});if(t.isCancelled===!0)return;if(e!=null&&(this.unmount(),this.box=e),!this.box)return!1;let i=`
347
+ <div class="tsg-tabs-line"></div>
348
+ <div class="tsg-scroll-wrapper tsg-eaction" data-mousedown="resize">
349
+ <div id="tabs_${this.name}_right" class="tsg-tabs-right">${this.right}</div>
350
+ </div>
351
+ <div class="tsg-scroll-left tsg-eaction" data-click='["scroll","left"]'></div>
352
+ <div class="tsg-scroll-right tsg-eaction" data-click='["scroll","right"]'></div>`;return B(this.box).attr("name",this.name).addClass("tsg-reset tsg-tabs").html(i),B(this.box).length>0&&(B(this.box)[0].style.cssText+=this.style),p.bindEvents(B(this.box).find(".tsg-eaction"),this),this.last.observeResize=new ResizeObserver(()=>{this.resize()}),this.last.observeResize.observe(this.box),t.finish(),this.refresh(),this.resize(),Date.now()-s}initReorder(e,s){if(!this.reorder)return;let t=this,i=B(this.box).find("#tabs_"+this.name+"_tab_"+p.escapeId(e)),o=this.get(e,!0),l=B(i.get(0).cloneNode(!0)),a;l.attr("id","#tabs_"+this.name+"_tab_ghost"),this.last.moving={index:o,indexFrom:o,$tab:i,$ghost:l,divX:0,left:i.get(0).getBoundingClientRect().left,parentX:B(this.box).get(0).getBoundingClientRect().left,x:s.pageX,opacity:i.css("opacity")},B(document).off(".w2uiTabReorder").on("mousemove.w2uiTabReorder",function(r){let c=r;if(!t.last.reordering){if(a=t.trigger("reorder",{target:t.tabs[o].id,indexFrom:o,tab:t.tabs[o]}),a.isCancelled===!0)return;V.hide(t.name+"_tooltip"),t.last.reordering=!0,l.addClass("moving"),l.css({"pointer-events":"none",position:"absolute",left:i.get(0).getBoundingClientRect().left}),i.css("opacity",0),B(t.box).find(".tsg-scroll-wrapper").append(l.get(0)),B(t.box).find(".tsg-tab-close").hide()}t.last.moving.divX=c.pageX-t.last.moving.x,l.css("left",t.last.moving.left-t.last.moving.parentX+t.last.moving.divX+"px"),t.dragMove(c)}).on("mouseup.w2uiTabReorder",function(){B(document).off(".w2uiTabReorder"),l.css({transition:"0.1s",left:t.last.moving.$tab.get(0).getBoundingClientRect().left-t.last.moving.parentX}),B(t.box).find(".tsg-tab-close").show(),l.remove(),i.css({opacity:t.last.moving.opacity}),t.last.reordering&&a.finish({indexTo:t.last.moving.index}),t.last.reordering=!1})}scroll(e,s){return new Promise((t,i)=>{let o=B(this.box).find(".tsg-scroll-wrapper"),l=o.get(0),a=l.scrollLeft,r=o.find(".tsg-tabs-right").get(0),c=o.parent().get(0).getBoundingClientRect().width,d=a+r.offsetLeft+r.clientWidth;switch(e){case"left":{let u=a-c+50;u<=0&&(u=0),l.scrollTo({top:0,left:u,behavior:s?"auto":"smooth"});break}case"right":{let u=a+c-50;u>=d-c&&(u=d-c),l.scrollTo({top:0,left:u,behavior:s?"auto":"smooth"});break}}setTimeout(()=>{this.resize(),t()},s?0:350)})}scrollIntoView(e,s){return new Promise((t,i)=>{if(e==null&&(e=this.active),this.get(e)==null)return;B(this.box).find("#tabs_"+this.name+"_tab_"+p.escapeId(e)).get(0).scrollIntoView({block:"start",inline:"center",behavior:s?"auto":"smooth"}),setTimeout(()=>{this.resize(),t()},s?0:500)})}resize(){let e=Date.now();if(this.box==null)return;let s=this.trigger("resize",{target:this.name});if(s.isCancelled!==!0){if(this.box!=null){let t=B(this.box);t.find(".tsg-scroll-left, .tsg-scroll-right").hide();let i=t.find(".tsg-scroll-wrapper").get(0),o=t.find(".tsg-tabs-right"),l=t.get(0).getBoundingClientRect().width,a=o.length>0?o[0].offsetLeft+o[0].clientWidth:0;l<a&&(i.scrollLeft>0&&t.find(".tsg-scroll-left").show(),l<a-i.scrollLeft&&t.find(".tsg-scroll-right").show())}return s.finish(),Date.now()-e}}destroy(){let e=this.trigger("destroy",{target:this.name});e.isCancelled!==!0&&(B(this.box).find("#tabs_"+this.name+"_right").length>0&&this.unmount(),delete se[this.name],e.finish())}unmount(){super.unmount(),this.last.observeResize?.disconnect()}click(e,s){if(s&&B(s.target).hasClass("tsg-tab-close"))return;let t=this.get(e);if(t==null||t.disabled||this.last.reordering)return!1;let i=this.trigger("click",{target:e,tab:t,object:t,originalEvent:s});if(i.isCancelled!==!0){if(B(this.box).find("#tabs_"+this.name+"_tab_"+p.escapeId(this.active)).removeClass("active"),this.active=t.id,B(this.box).find("#tabs_"+this.name+"_tab_"+p.escapeId(this.active)).addClass("active"),typeof t.route=="string"){let o=t.route!==""?("/"+t.route).replace(/\/{2,}/g,"/"):"",l=p.parseRoute(o);if(l.keys.length>0)for(let a=0;a<l.keys.length;a++){let r=l.keys[a];r==null||this.routeData[r.name]==null||(o=o.replace(new RegExp(":"+r.name,"g"),this.routeData[r.name]))}setTimeout(()=>{window.location.hash=o},1)}i.finish()}}clickClose(e,s){let t=this.get(e);if(t==null||t.disabled)return!1;let i=this.trigger("close",{target:e,object:t,tab:t,originalEvent:s});i.isCancelled!==!0&&(this.animateClose(e).then(()=>{this.remove(e),i.finish(),this.refresh()}),s?.stopPropagation())}animateClose(e){return new Promise((s,t)=>{let i=B(this.box).find("#tabs_"+this.name+"_tab_"+p.escapeId(e)),l=`<div class="tab-animate-close" style="display: inline-block; flex-shrink: 0; width: ${i.get(0).clientWidth||0}px; transition: width 0.25s"></div>`,a=i.replace(l);setTimeout(()=>{a.css({width:"0px"})},1),setTimeout(()=>{a.remove(),this.resize(),s()},500)})}animateInsert(e,s){return new Promise((t,i)=>{let o=B(this.box).find("#tabs_"+this.name+"_tab_"+p.escapeId(e)),l=this.getTabHTML(s.id),a=j.html(l);if(o.length==0)o=B(this.box).find("#tabs_tabs_right"),o.before(a),this.resize();else{a.css({opacity:0}),B(this.box).find("#tabs_tabs_right").before(a.get(0));let c=B(this.box).find("#"+a.attr("id")).get(0)?.clientWidth??0,d=j.html('<div class="tab-animate-insert" style="flex-shrink: 0; width: 0; transition: width 0.25s"></div>');o.before(d),a.hide(),d.before(a[0]),setTimeout(()=>{d.css({width:c+"px"})},1),setTimeout(()=>{d.remove(),a.css({opacity:1}).show(),this.refresh(s.id),this.resize(),t()},500)}})}};var z=j,le=()=>se,ce=["top","left","main","preview","right","bottom"],Be=class extends ne{panels;last;padding;resizer;style;onShow;onHide;onResizing;onResizerClick;onRender;onRefresh;onChange;onResize;onDestroy;panel_template;constructor(e){super(e.name),this.box=null,this.name="",this.panels=[],this.last={},this.padding=1,this.resizer=4,this.style="",this.onShow=null,this.onHide=null,this.onResizing=null,this.onResizerClick=null,this.onRender=null,this.onRefresh=null,this.onChange=null,this.onResize=null,this.onDestroy=null,this.panel_template={type:null,title:"",size:100,minSize:20,maxSize:!1,hidden:!1,resizable:!1,overflow:"auto",style:"",html:"",tabs:null,toolbar:null,width:null,height:null,show:{toolbar:!1,tabs:!1},removed:null,onRefresh:null,onShow:null,onHide:null},Object.assign(this,e),Array.isArray(this.panels)||(this.panels=[]),this.panels.forEach((i,o)=>{this.panels[o]=p.extend({},this.panel_template,i),(p.isPlainObject(i.tabs)||Array.isArray(i.tabs))&&s(this,i.type),(p.isPlainObject(i.toolbar)||Array.isArray(i.toolbar))&&t(this,i.type)}),ce.forEach(i=>{this.get(i)==null&&this.panels.push(p.extend({},this.panel_template,{type:i,hidden:i!=="main",size:50}))}),typeof this.box=="string"&&(this.box=z(this.box).get(0)),this.box&&this.render(this.box);function s(i,o,l){let a=o!=null?i.get(o):null;if(a!=null&&l==null&&(l=a.tabs),a==null||l==null)return!1;Array.isArray(l)&&(l={tabs:l});let r=i.name+"_"+(o??"")+"_tabs";return le()[r]&&le()[r].destroy(),a.tabs=new ve(p.extend({},l,{owner:i,name:i.name+"_"+(o??"")+"_tabs"})),a.show.tabs=!0,!0}function t(i,o,l){let a=o!=null?i.get(o):null;if(a!=null&&l==null&&(l=a.toolbar),a==null||l==null)return!1;Array.isArray(l)&&(l={items:l});let r=i.name+"_"+(o??"")+"_toolbar";return le()[r]&&le()[r].destroy(),a.toolbar=new he(p.extend({},l,{owner:i,name:i.name+"_"+(o??"")+"_toolbar"})),a.show.toolbar=!0,!0}}html(e,s,t){let i=this.get(e),o={panel:e,html:i.html,error:!1,cancelled:!1,removed(d){typeof d=="function"&&(i.removed=d)}};if(typeof i.removed=="function"&&(i.removed({panel:e,html:i.html,html_new:s,transition:t||"none"}),i.removed=null),e=="css")return z(this.box).find("#layout_"+this.name+"_panel_css").html("<style>"+s+"</style>"),o.status=!0,o;if(i==null)return console.log("ERROR: incorrect panel name. Panel name can be main, left, right, top, bottom, preview or css"),o.error=!0,o;if(s==null)return o;let l=this.trigger("change",{target:e,panel:i,html_new:s,transition:t});if(l.isCancelled===!0)return o.cancelled=!0,o;let a="#layout_"+this.name+"_panel_"+i.type,r=z(this.box).find(a+'> [data-role="panel-content"]'),c=0;if(r.length>0&&(z(this.box).find(a).get(0).scrollTop=0,c=z(r).css("top")),typeof i.html.unmount=="function"&&i.html.unmount(),r.addClass("tsg-panel-content"),r.removeAttr("style"),this.resizeBoxes(e),i.html==="")i.html=s,this.refresh(e);else if(i.html=s,i.hidden)l.finish();else if(t!=null&&t!==""){z(this.box).addClass("animating");let d=z(this.box).find(a+'> [data-role="panel-content"]');d.after('<div class="tsg-panel-content new-panel" data-role="panel-content" style="'+d[0].style.cssText+'"></div>');let u=z(this.box).find(a+'> [data-role="panel-content"].new-panel');d.css("top",c),u.css("top",c),typeof s=="object"?(s.box=u[0],s.render()):u.hide().html(s);let h,f;switch(t){case"slide-left":h="left: -"+p.getSize(z(this.box),"width")+"px",f="left: 0px";break;case"slide-right":h="left: "+p.getSize(z(this.box),"width")+"px",f="left: 0px";break;case"slide-down":h="top: -"+p.getSize(z(this.box),"height")+"px",f="top: "+c+"px";break;case"slide-up":h="top: "+p.getSize(z(this.box),"height")+"px",f="top: "+c+"px";break;case"flip-left":h="transform: rotate(90deg)",f="transform: rotate(0deg)";break;case"flip-right":h="transform: rotate(-90deg)",f="transform: rotate(0deg)";break;case"flip-down":h="transform: rotate(-180deg)",f="transform: rotate(0deg)";break;case"flip-up":h="transform: rotate(180deg)",f="transform: rotate(0deg)";break;case"pop-in":h="transform: scale(.5); opacity: 0;",f="transform: scale(1); opacity: 1;";break;case"pop-out":h="transform: scale(1); opacity: 1;",f="transform: scale(.5); opacity: 0;";break;default:h="",f=""}d.addClass("previous").css({cssText:"transition: .5s; "+h}),u.addClass("current").css({cssText:"transition: .5s; "+f}),setTimeout(()=>{z(this.box).removeClass("animating"),d.remove(),u.removeClass("new-panel current"),z(this.box).find(a+'> [data-role="panel-content"]').css({cssText:""}),l.finish()},500)}else this.refresh(e),l.finish();return o}message(e,s){let t=this.get(e),i=z(this.box).find("#layout_"+this.name+"_panel_"+t.type),o=i.css("overflow");i.css("overflow","hidden");let l=p.message({owner:this,box:i.get(0),after:".tsg-panel-title",param:e},s);return l&&l.self.on("close:after",()=>{i.css("overflow",o)}),l}confirm(e,s){let t=this.get(e),i=z(this.box).find("#layout_"+this.name+"_panel_"+t.type),o=i.css("overflow");i.css("overflow","hidden");let l=p.confirm({owner:this,box:i.get(0),after:".tsg-panel-title",param:e},s);return l&&l.self.on("close:after",()=>{i.css("overflow",o)}),l}load(e,s,t){return new Promise((i,o)=>{(e=="css"||this.get(e)!=null)&&s!=null?fetch(s).then(l=>l.text()).then(l=>{this.resize(),i(this.html(e,l,t))}):o()})}sizeTo(e,s,t){return this.get(e)==null?!1:(z(this.box).find(":scope > div > .tsg-panel").css("transition",t!==!0?".2s":"0s"),setTimeout(()=>{this.set(e,{size:s})},1),setTimeout(()=>{z(this.box).find(":scope > div > .tsg-panel").css("transition","0s"),this.resize()},300),!0)}show(e,s){let t=this.trigger("show",{target:e,thisect:this.get(e),immediate:s});if(t.isCancelled===!0)return;let i=this.get(e);return i==null?!1:(i.hidden=!1,s===!0?(z(this.box).find("#layout_"+this.name+"_panel_"+e).css({opacity:"1"}),t.finish(),this.resize()):(z(this.box).addClass("animating"),z(this.box).find("#layout_"+this.name+"_panel_"+e).css({opacity:"0"}),z(this.box).find(":scope > div > .tsg-panel").css("transition",".2s"),setTimeout(()=>{this.resize()},1),setTimeout(()=>{z(this.box).find("#layout_"+this.name+"_panel_"+e).css({opacity:"1"})},250),setTimeout(()=>{z(this.box).find(":scope > div > .tsg-panel").css("transition","0s"),z(this.box).removeClass("animating"),t.finish(),this.resize()},300)),!0)}hide(e,s){let t=this.trigger("hide",{target:e,object:this.get(e),immediate:s});if(t.isCancelled===!0)return;let i=this.get(e);return i==null?!1:(i.hidden=!0,s===!0?(z(this.box).find("#layout_"+this.name+"_panel_"+e).css({opacity:"0"}),t.finish(),this.resize()):(z(this.box).addClass("animating"),z(this.box).find(":scope > div > .tsg-panel").css("transition",".2s"),z(this.box).find("#layout_"+this.name+"_panel_"+e).css({opacity:"0"}),setTimeout(()=>{this.resize()},1),setTimeout(()=>{z(this.box).find(":scope > div > .tsg-panel").css("transition","0s"),z(this.box).removeClass("animating"),t.finish(),this.resize()},300)),!0)}toggle(e,s){let t=this.get(e);return t==null?!1:t.hidden?this.show(e,s):this.hide(e,s)}set(e,s){let t=this.get(e,!0);return t==null?!1:(p.extend(this.panels[t],s),(s.html!=null||s.resizable!=null)&&this.refresh(e),this.resize(),!0)}get(e,s){for(let t=0;t<this.panels.length;t++){let i=this.panels[t];if(i!=null&&i.type==e)return s===!0?t:i}return null}el(e){let s=z(this.box).find("#layout_"+this.name+"_panel_"+e+'> [data-role="panel-content"]');return s.length!=1?null:s[0]}hideToolbar(e){let s=this.get(e);s&&(s.show.toolbar=!1,z(this.box).find(`#layout_${this.name}_panel_${e} > [data-role="panel-toolbar"]`).hide(),this.resize())}showToolbar(e){let s=this.get(e);s&&(s.show.toolbar=!0,z(this.box).find(`#layout_${this.name}_panel_${e} > [data-role="panel-toolbar"]`).show(),this.resize())}toggleToolbar(e){let s=this.get(e);s&&(s.show.toolbar?this.hideToolbar(e):this.showToolbar(e))}assignToolbar(e,s){typeof s=="string"&&le()[s]!=null&&(s=le()[s]);let t=this.get(e);t.toolbar=s;let i=z(this.box).find(e+'> [data-role="panel-toolbar"]');t.toolbar!=null?(i.attr("name")!=t.toolbar.name?t.toolbar.render(i.get(0)):t.toolbar!=null&&t.toolbar.refresh(),typeof s!="string"&&s&&(s.owner=this),this.showToolbar(e),this.refresh(e)):(i.html(""),this.hideToolbar(e))}hideTabs(e){let s=this.get(e);s&&(s.show.tabs=!1,z(this.box).find("#layout_"+this.name+"_panel_"+e+'> [data-role="panel-tabs"]').hide(),this.resize())}showTabs(e){let s=this.get(e);s&&(s.show.tabs=!0,z(this.box).find("#layout_"+this.name+"_panel_"+e+'> [data-role="panel-tabs"]').show(),this.resize())}toggleTabs(e){let s=this.get(e);s&&(s.show.tabs?this.hideTabs(e):this.showTabs(e))}assignTabs(e,s){typeof s=="string"&&le()[s]!=null&&(s=le()[s]);let t=this.get(e);t.tabs=s;let i=z(this.box).find(e+'> [data-role="panel-tabs"]');t.tabs!=null?(i.attr("name")!=t.tabs.name?t.tabs.render(i.get(0)):t.tabs!=null&&t.tabs.refresh(),typeof s!="string"&&s&&(s.owner=this),this.showTabs(e),this.refresh(e)):(i.html(""),this.hideTabs(e))}render(e){let s=Date.now(),t=this;typeof e=="string"&&(e=z(e).get(0));let i=this.trigger("render",{target:this.name,box:e??this.box});if(i.isCancelled===!0)return;if(e!=null&&(this.unmount(),this.box=e),!this.box)return!1;z(this.box).attr("name",this.name).addClass("tsg-layout").html("<div></div>"),z(this.box).length>0&&(z(this.box)[0].style.cssText+=this.style);for(let r=0;r<ce.length;r++){let c='<div id="layout_'+this.name+"_panel_"+ce[r]+'" class="tsg-panel"> <div class="tsg-panel-title"></div> <div class="tsg-panel-tabs" data-role="panel-tabs"></div> <div class="tsg-panel-toolbar" data-role="panel-toolbar"></div> <div class="tsg-panel-content" data-role="panel-content"></div></div><div id="layout_'+this.name+"_resizer_"+ce[r]+'" class="tsg-resizer"></div>';z(this.box).find(":scope > div").append(c)}return z(this.box).find(":scope > div").append('<div id="layout_'+this.name+'_panel_css" style="position: absolute; top: 10000px;"></div>'),this.refresh(),this.last.observeResize=new ResizeObserver(()=>{this.resize()}),this.last.observeResize.observe(this.box),i.finish(),setTimeout(()=>{t.last.events={resizeStart:o,mouseMove:a,mouseUp:l},this.resize()},0),Date.now()-s;function o(r,c){if(!t.box)return;c||(c=window.event),z(document).off("mousemove",t.last.events.mouseMove).on("mousemove",t.last.events.mouseMove),z(document).off("mouseup",t.last.events.mouseUp).on("mouseup",t.last.events.mouseUp),t.last.resize={type:r,x:c.screenX,y:c.screenY,diff_x:0,diff_y:0,value:0},ce.forEach(u=>{let h=z(t.el(u)).find(".tsg-lock");h.length>0?h.data("locked","yes"):t.lock(u,{opacity:0})});let d=z(t.box).find("#layout_"+t.name+"_resizer_"+r).get(0);(r=="left"||r=="right")&&(t.last.resize.value=parseInt(d.style.left)),(r=="top"||r=="preview"||r=="bottom")&&(t.last.resize.value=parseInt(d.style.top))}function l(r){if(t.box&&(r||(r=window.event),z(document).off("mousemove",t.last.events.mouseMove),z(document).off("mouseup",t.last.events.mouseUp),t.last.resize!=null)){if(ce.forEach(c=>{let d=z(t.el(c)).find(".tsg-lock");d.data("locked")=="yes"?d.removeData("locked"):t.unlock(c)}),t.last.diff_x!==0||t.last.resize.diff_y!==0){let c=t.get("top"),d=t.get("bottom"),u=t.get(t.last.resize.type),h=p.getSize(z(t.box),"width"),f=p.getSize(z(t.box),"height"),m=String(u.size),y,x;switch(t.last.resize.type){case"top":y=parseInt(u.sizeCalculated)+t.last.resize.diff_y,x=0;break;case"bottom":y=parseInt(u.sizeCalculated)-t.last.resize.diff_y,x=0;break;case"preview":y=parseInt(u.sizeCalculated)-t.last.resize.diff_y,x=(c&&!c.hidden?c.sizeCalculated:0)+(d&&!d.hidden?d.sizeCalculated:0);break;case"left":y=parseInt(u.sizeCalculated)+t.last.resize.diff_x,x=0;break;case"right":y=parseInt(u.sizeCalculated)-t.last.resize.diff_x,x=0;break;default:y=0,x=0}m.substr(m.length-1)=="%"?u.size=Math.floor(y*100/(u.type=="left"||u.type=="right"?h:f-x)*100)/100+"%":String(u.size).substr(0,1)=="-"?u.size=parseInt(u.size)-u.sizeCalculated+y:u.size=y,t.resize()}z(t.box).find("#layout_"+t.name+"_resizer_"+t.last.resize.type).removeClass(null).addClass("active"),z(t.box).find("#layout_"+t.name+"_resizer_"+t.last.resize.type).removeClass("active"),delete t.last.resize}}function a(r){if(!t.box||(r||(r=window.event),t.last.resize==null))return;let c=t.get(t.last.resize.type),d=t.last.resize,u=t.trigger("resizing",{target:t.name,object:c,originalEvent:r,panel:d?d.type:"all",diff_x:d?d.diff_x:0,diff_y:d?d.diff_y:0});if(u.isCancelled===!0)return;let h=z(t.box).find("#layout_"+t.name+"_resizer_"+d.type),f=r.screenX-d.x,m=r.screenY-d.y,y=t.get("main");h.hasClass("active")||h.addClass("active");let x=f,b=m;switch(d.type){case"left":c.minSize-x>c.width&&(x=c.minSize-c.width),c.maxSize&&c.width+x>c.maxSize&&(x=c.maxSize-c.width),y.minSize+x>y.width&&(x=y.width-y.minSize);break;case"right":c.minSize+x>c.width&&(x=c.width-c.minSize),c.maxSize&&c.width-x>c.maxSize&&(x=c.width-c.maxSize),y.minSize-x>y.width&&(x=y.minSize-y.width);break;case"top":c.minSize-b>c.height&&(b=c.minSize-c.height),c.maxSize&&c.height+b>c.maxSize&&(b=c.maxSize-c.height),y.minSize+b>y.height&&(b=y.height-y.minSize);break;case"preview":case"bottom":c.minSize+b>c.height&&(b=c.height-c.minSize),c.maxSize&&c.height-b>c.maxSize&&(b=c.height-c.maxSize),y.minSize-b>y.height&&(b=y.minSize-y.height);break}switch(d.diff_x=x,d.diff_y=b,d.type){case"top":case"preview":case"bottom":d.diff_x=0,h.length>0&&(h[0].style.top=d.value+d.diff_y+"px");break;case"left":case"right":d.diff_y=0,h.length>0&&(h[0].style.left=d.value+d.diff_x+"px");break}u.finish()}}unmount(){super.unmount(),this.panels.forEach(e=>{e.tabs?.unmount?.(),e.toolbar?.unmount?.()}),this.last.observeResize?.disconnect()}destroy(){let e=this.trigger("destroy",{target:this.name});if(e.isCancelled!==!0)return le()[this.name]==null?!1:(this.panels.forEach(s=>{s.tabs?.destroy?.(),s.toolbar?.destroy?.()}),z(this.box).find("#layout_"+this.name+"_panel_main").length>0&&this.unmount(),delete le()[this.name],e.finish(),this.last.events&&this.last.events.resize&&z(window).off("resize",this.last.events.resize),!0)}refresh(e){let s=this,t=Date.now(),i=s.trigger("refresh",{target:e??s.name,object:e!=null?s.get(e):null});if(i.isCancelled!==!0){if(typeof e=="string"){let o=s.get(e);if(o==null)return;let l="#layout_"+s.name+"_panel_"+o.type,a="#layout_"+s.name+"_resizer_"+o.type;if(z(s.box).find(l).css({display:o.hidden?"none":"block"}),o.resizable?z(s.box).find(a).show():z(s.box).find(a).hide(),typeof o.html=="object"&&typeof o.html.render=="function")o.html.box=z(s.box).find(l+'> [data-role="panel-content"]')[0],setTimeout(()=>{if(z(s.box).find(l+'> [data-role="panel-content"]').length>0){let c=z(s.box).find(l+'> [data-role="panel-content"]').removeClass(null).removeAttr("name").addClass("tsg-panel-content");c.css("overflow",o.overflow)[0].style.cssText+=";"+o.style}o.html&&typeof o.html.render=="function"&&o.html.render()},1);else if(z(s.box).find(l+'> [data-role="panel-content"]').length>0){let c=z(s.box).find(l+'> [data-role="panel-content"]').removeClass(null).removeAttr("name").addClass("tsg-panel-content");c.html(o.html).css("overflow",o.overflow)[0].style.cssText+=";"+o.style}let r=z(s.box).find(l+'> [data-role="panel-tabs"]');o.show.tabs?(r.attr("name")!=o.tabs?.name&&o.tabs!=null?o.tabs.render(r.get(0)):o.tabs.refresh(),r.addClass("tsg-panel-tabs")):(r.html("").removeAttr("name").removeClass(null),r.css("display","none").hide()),r=z(s.box).find(l+'> [data-role="panel-toolbar"]'),o.show.toolbar?(r.attr("name")!=o.toolbar?.name&&o.toolbar!=null?o.toolbar.render(r.get(0)):o.toolbar.refresh(),r.addClass("tsg-panel-toolbar")):(r.html("").removeAttr("name").removeClass(null),r.css("display","none").hide()),r=z(s.box).find(l+"> .tsg-panel-title"),o.title?r.html(o.title).show():r.html("").hide()}else{if(z(s.box).find("#layout_"+s.name+"_panel_main").length===0){s.render();return}s.resize();for(let o=0;o<this.panels.length;o++){let l=this.panels[o];l!=null&&s.refresh(l.type??void 0)}}return i.finish(),Date.now()-t}}resize(){if(!this.box)return!1;let e=Date.now(),s=this.last.resize,t=this.trigger("resize",{target:this.name,panel:s?s.type:"all",diff_x:s?s.diff_x:0,diff_y:s?s.diff_y:0});if(t.isCancelled===!0)return;this.padding<0&&(this.padding=0);let i=p.getSize(z(this.box),"width"),o=p.getSize(z(this.box),"height"),l=this,a=this.get("main"),r=this.get("preview"),c=this.get("left"),d=this.get("right"),u=this.get("top"),h=this.get("bottom"),f=r!=null&&r.hidden!==!0,m=c!=null&&c.hidden!==!0,y=d!=null&&d.hidden!==!0,x=u!=null&&u.hidden!==!0,b=h!=null&&h.hidden!==!0,g,v,w,T;for(let _=0;_<ce.length;_++){let C=ce[_];if(C==null||C==="main")continue;let D=this.get(C);if(!D)continue;let O=String(D.size||0);if(O.substr(O.length-1)=="%"){let I=o;D.type=="preview"&&(I=I-(u&&!u.hidden?u.sizeCalculated:0)-(h&&!h.hidden?h.sizeCalculated:0)),D.sizeCalculated=parseInt(String((D.type=="left"||D.type=="right"?i:I)*parseFloat(D.size)/100))}else D.sizeCalculated=parseInt(D.size);D.sizeCalculated=Math.max(D.sizeCalculated,parseInt(D.minSize))}return parseInt(d.size)<0&&(m&&parseInt(c.size)<0?console.log("ERROR: you cannot have both left panel.size and right panel.size be negative."):d.sizeCalculated=i-(m?c.sizeCalculated:0)+parseInt(d.size)),parseInt(c.size)<0&&(y&&parseInt(d.size)<0?console.log("ERROR: you cannot have both left panel.size and right panel.size be negative."):c.sizeCalculated=i-(y?d.sizeCalculated:0)+parseInt(c.size)),parseInt(r.size)<0&&(r.sizeCalculated=o+parseInt(r.size),r.sizeCalculated>o&&(r.sizeCalculated=o)),u!=null&&u.hidden!==!0?(g=0,v=0,w=i,T=u.sizeCalculated,z(this.box).find("#layout_"+this.name+"_panel_top").css({display:"block",left:g+"px",top:v+"px",width:w+"px",height:T+"px"}),u.width=w,u.height=T,u.resizable&&(v=u.sizeCalculated-(this.padding===0?this.resizer:0),T=this.resizer>this.padding?this.resizer:this.padding,z(this.box).find("#layout_"+this.name+"_resizer_top").css({display:"block",left:g+"px",top:v+"px",width:w+"px",height:T+"px",cursor:"ns-resize"}).off("mousedown").on("mousedown",function(_){_.preventDefault();let C=l.trigger("resizerClick",{target:"top",originalEvent:_});if(C.isCancelled!==!0)return le()[l.name].last.events.resizeStart("top",_),C.finish(),!1}))):(z(this.box).find("#layout_"+this.name+"_panel_top").hide(),z(this.box).find("#layout_"+this.name+"_resizer_top").hide()),c!=null&&c.hidden!==!0?(g=0,v=0+(x?u.sizeCalculated+this.padding:0),w=c.sizeCalculated,T=o-(x?u.sizeCalculated+this.padding:0)-(b?h.sizeCalculated+this.padding:0),z(this.box).find("#layout_"+this.name+"_panel_left").css({display:"block",left:g+"px",top:v+"px",width:w+"px",height:T+"px"}),c.width=w,c.height=T,c.resizable&&(g=c.sizeCalculated-(this.padding===0?this.resizer:0),w=this.resizer>this.padding?this.resizer:this.padding,z(this.box).find("#layout_"+this.name+"_resizer_left").css({display:"block",left:g+"px",top:v+"px",width:w+"px",height:T+"px",cursor:"ew-resize"}).off("mousedown").on("mousedown",function(_){_.preventDefault();let C=l.trigger("resizerClick",{target:"left",originalEvent:_});if(C.isCancelled!==!0)return le()[l.name].last.events.resizeStart("left",_),C.finish(),!1}))):(z(this.box).find("#layout_"+this.name+"_panel_left").hide(),z(this.box).find("#layout_"+this.name+"_resizer_left").hide()),d!=null&&d.hidden!==!0?(g=i-d.sizeCalculated,v=0+(x?u.sizeCalculated+this.padding:0),w=d.sizeCalculated,T=o-(x?u.sizeCalculated+this.padding:0)-(b?h.sizeCalculated+this.padding:0),z(this.box).find("#layout_"+this.name+"_panel_right").css({display:"block",left:g+"px",top:v+"px",width:w+"px",height:T+"px"}),d.width=w,d.height=T,d.resizable&&(g=g-this.padding,w=this.resizer>this.padding?this.resizer:this.padding,z(this.box).find("#layout_"+this.name+"_resizer_right").css({display:"block",left:g+"px",top:v+"px",width:w+"px",height:T+"px",cursor:"ew-resize"}).off("mousedown").on("mousedown",function(_){_.preventDefault();let C=l.trigger("resizerClick",{target:"right",originalEvent:_});if(C.isCancelled!==!0)return le()[l.name].last.events.resizeStart("right",_),C.finish(),!1}))):(z(this.box).find("#layout_"+this.name+"_panel_right").hide(),z(this.box).find("#layout_"+this.name+"_resizer_right").hide()),h!=null&&h.hidden!==!0?(g=0,v=o-h.sizeCalculated,w=i,T=h.sizeCalculated,z(this.box).find("#layout_"+this.name+"_panel_bottom").css({display:"block",left:g+"px",top:v+"px",width:w+"px",height:T+"px"}),h.width=w,h.height=T,h.resizable&&(v=v-(this.padding===0?0:this.padding),T=this.resizer>this.padding?this.resizer:this.padding,z(this.box).find("#layout_"+this.name+"_resizer_bottom").css({display:"block",left:g+"px",top:v+"px",width:w+"px",height:T+"px",cursor:"ns-resize"}).off("mousedown").on("mousedown",function(_){_.preventDefault();let C=l.trigger("resizerClick",{target:"bottom",originalEvent:_});if(C.isCancelled!==!0)return le()[l.name].last.events.resizeStart("bottom",_),C.finish(),!1}))):(z(this.box).find("#layout_"+this.name+"_panel_bottom").hide(),z(this.box).find("#layout_"+this.name+"_resizer_bottom").hide()),g=0+(m?c.sizeCalculated+this.padding:0),v=0+(x?u.sizeCalculated+this.padding:0),w=i-(m?c.sizeCalculated+this.padding:0)-(y?d.sizeCalculated+this.padding:0),T=o-(x?u.sizeCalculated+this.padding:0)-(b?h.sizeCalculated+this.padding:0)-(f?r.sizeCalculated+this.padding:0),z(this.box).find("#layout_"+this.name+"_panel_main").css({display:"block",left:g+"px",top:v+"px",width:w+"px",height:T+"px"}),a.width=w,a.height=T,r!=null&&r.hidden!==!0?(g=0+(m?c.sizeCalculated+this.padding:0),v=o-(b?h.sizeCalculated+this.padding:0)-r.sizeCalculated,w=i-(m?c.sizeCalculated+this.padding:0)-(y?d.sizeCalculated+this.padding:0),T=r.sizeCalculated,z(this.box).find("#layout_"+this.name+"_panel_preview").css({display:"block",left:g+"px",top:v+"px",width:w+"px",height:T+"px"}),r.width=w,r.height=T,r.resizable&&(v=v-(this.padding===0?0:this.padding),T=this.resizer>this.padding?this.resizer:this.padding,z(this.box).find("#layout_"+this.name+"_resizer_preview").css({display:"block",left:g+"px",top:v+"px",width:w+"px",height:T+"px",cursor:"ns-resize"}).off("mousedown").on("mousedown",function(_){_.preventDefault();let C=l.trigger("resizerClick",{target:"preview",originalEvent:_});if(C.isCancelled!==!0)return le()[l.name].last.events.resizeStart("preview",_),C.finish(),!1}))):(z(this.box).find("#layout_"+this.name+"_panel_preview").hide(),z(this.box).find("#layout_"+this.name+"_resizer_preview").hide()),this.resizeBoxes(),t.finish(),Date.now()-e}resizeBoxes(e){let s=ce;!e&&typeof e=="string"&&s.slice(),s.forEach((t,i)=>{let o=ce[i]!=null?this.get(ce[i]):null,l=`#layout_${this.name}_panel_${t} > `,a=0;if(o){if(o.title){let r=z(this.box).find(l+".tsg-panel-title").css({top:a+"px",display:"block"});a+=p.getSize(r,"height")}if(o.show.tabs){let r=z(this.box).find(l+'[data-role="panel-tabs"]').css({top:a+"px",display:"block"});a+=p.getSize(r,"height")}if(o.show.toolbar){let r=z(this.box).find(l+'[data-role="panel-toolbar"]').css({top:a+"px",display:"block"});a+=p.getSize(r,"height")}}z(this.box).find(l+'[data-role="panel-content"]').css({display:"block",top:a+"px"})})}lock(e,s,t){if(ce.indexOf(e)==-1){console.log("ERROR: First parameter needs to be the a valid panel name.");return}p.lock("#layout_"+this.name+"_panel_"+e,s,t)}unlock(e,s){if(ce.indexOf(e)==-1){console.log("ERROR: First parameter needs to be the a valid panel name.");return}let t="#layout_"+this.name+"_panel_"+e;p.unlock(t,s)}};function jt(n,e,s){let t=0;s===void 0?(s=e,e=n.columns.length):(typeof e=="string"&&(e=n.getColumn(e,!0)),e==null&&(e=n.columns.length)),Array.isArray(s)||(s=[s]);for(let i=0;i<s.length;i++){let o=p.extend({},n.colTemplate,s[i]);if(n.columns.splice(e,0,o),s[i].searchable){let l=s[i].searchable,a="";s[i].searchable===!0&&(l="text",a='size="20"'),n.addSearch({field:s[i].field,label:s[i].text,type:l,attr:a})}e++,t++}return n.refresh(),t}function Ut(n,...e){let s=0;for(let t=0;t<e.length;t++){let i=e[t];for(let o=n.columns.length-1;o>=0;o--)n.columns[o].field==i&&(n.columns[o].searchable&&n.removeSearch(i),n.columns.splice(o,1),s++)}return n.refresh(),s}function Gt(n,e,s){if(e===void 0){let t=[];for(let i=0;i<n.columns.length;i++)t.push(n.columns[i].field);return t}for(let t=0;t<n.columns.length;t++)if(n.columns[t].field==e)return s===!0?t:n.columns[t];return null}function Bt(n,e,s){let t=0;return e=Array.isArray(e)?e:[e],e.forEach(i=>{n.columns.forEach(o=>{if(o.field==i){let l=p.clone(s);Object.keys(l).forEach(a=>{typeof l[a]=="function"&&(l[a]=l[a](o)),o[a]!=l[a]&&t++}),p.extend(o,l)}})}),t>0&&n.refresh(),t}function Qt(n,...e){return n.updateColumn(e,{hidden(s){return!s.hidden}})}function Vt(n,...e){return n.updateColumn(e,{hidden:!1})}function qt(n,...e){return n.updateColumn(e,{hidden:!0})}var Qe=j;function Wt(n,e){if(e!=null)Qe(n.box).find(`#grid_${n.name}_footer`).find(".tsg-footer-left").html(e);else{let s="",t=n.getSelection();if(t.length>0&&(n.show.statusSelection&&t.length>1&&(s=String(t.length).replace(/(\d)(?=(\d\d\d)+(?!\d))/g,"$1"+p.settings.groupSymbol)+" "+p.lang("selected")),n.show.statusRecordID&&t.length==1)){let i=t[0];typeof i=="object"&&(i=i.recid+", "+p.lang("Column")+": "+i.column),s=p.lang("Record ID")+": "+i+" "}Qe(n.box).find("#grid_"+n.name+"_footer .tsg-footer-left").html(s)}}function Yt(n,e,s){let t=[n.box,e,s];setTimeout(()=>{Qe(n.box).find("#grid_"+n.name+"_empty_msg").remove(),p.lock(...t)},10)}function Xt(n,e){setTimeout(()=>{Qe(n.box).find(".tsg-message").hasClass("tsg-closing")||p.unlock(n.box,e)},25)}function Kt(n,e){let s={columns:[],show:p.clone(n.show),last:{search:n.last.search,multi:n.last.multi,logic:n.last.logic,label:n.last.label,field:n.last.field,scrollTop:n.last.vscroll.scrollTop,scrollLeft:n.last.vscroll.scrollLeft},sortData:[],searchData:[]},t;for(let o=0;o<n.columns.length;o++){let l=n.columns[o],a={};Object.keys(n.stateColProps).forEach((r,c)=>{n.stateColProps[r]&&(l[r]!==void 0?t=l[r]:t=n.colTemplate[r]||null,a[r]=t)}),s.columns.push(a)}for(let o=0;o<n.sortData.length;o++)s.sortData.push(p.clone(n.sortData[o]));for(let o=0;o<n.searchData.length;o++)s.searchData.push(p.clone(n.searchData[o]));let i=n.trigger("stateSave",{target:n.name,state:s});if(i.isCancelled!==!0)return e!==!0&&n.cacheSave("state",s),i.finish(),s}function Jt(n,e){let s=n.url?.get??n.url;e||(e=n.cache("state"));let t=n.trigger("stateRestore",{target:n.name,state:e});if(t.isCancelled!==!0){if(p.isPlainObject(e)){p.extend(n.show,e.show??{}),p.extend(n.last,e.last??{});let i=n.last.vscroll.scrollTop,o=n.last.vscroll.scrollLeft;for(let l=0;l<e.columns?.length;l++){let a=e.columns[l],r=n.getColumn(a.field,!0);r!==null&&(p.extend(n.columns[r],a),l!==r&&n.columns.splice(l,0,n.columns.splice(r,1)[0]))}n.sortData.splice(0,n.sortData.length);for(let l=0;l<e.sortData?.length;l++)n.sortData.push(e.sortData[l]);n.searchData.splice(0,n.searchData.length);for(let l=0;l<e.searchData?.length;l++)n.searchData.push(e.searchData[l]);setTimeout(()=>{s||(n.sortData.length>0&&n.localSort(),n.searchData.length>0&&n.localSearch()),n.last.vscroll.scrollTop=i,n.last.vscroll.scrollLeft=o,n.refresh()},1),console.log(`INFO (TsUi): state restored for "${n.name}"`)}return t.finish(),!0}}function Zt(n){n.stateRestore(n.last.state),n.cacheSave("state",null)}function es(n,e,s){let t;return n.nestedFields?t=p.getNested(e,s):t=e?.[s],t??""}function ts(n){let e=n;for(let t=0;t<n.records.length;t++){let i=n.records[t];s(i)}function s(t){for(let i=0;i<e.columns.length;i++){let o=e.columns[i];if(!(t[o.field]==null||typeof o.render!="string")){if(["number","int","float","money","currency","percent"].indexOf(o.render.split(":")[0]??"")!=-1&&typeof t[o.field]!="number"&&(t[o.field]=parseFloat(t[o.field])),["date","age"].indexOf(o.render.split(":")[0]??"")!=-1&&!t[o.field+"_"]){let l=t[o.field];p.isInt(l)&&(l=parseInt(l)),t[o.field+"_"]=new Date(l)}if(["time"].indexOf(o.render)!=-1)if(p.isTime(t[o.field])){let l=p.isTime(t[o.field],!0),a=new Date;a.setHours(l.hours,l.minutes,l.seconds?l.seconds:0,0),t[o.field+"_"]||(t[o.field+"_"]=a)}else{let l=t[o.field];p.isInt(l)&&(l=parseInt(l)),l=l!=null?new Date(l):new Date;let a=new Date;a.setHours(l.getHours(),l.getMinutes(),l.getSeconds(),0),t[o.field+"_"]||(t[o.field+"_"]=a)}}}if(t.TsUi?.children&&t.TsUi?.expanded!==!0)for(let i=0;i<t.TsUi.children.length;i++){let o=t.TsUi.children[i];s(o)}}}function ss(n,e,s,t){let i=s+1;if(i>=n.columns.length){let r=n.nextRow(e);return r==null?null:n.nextCell(r,-1,t)}let o=n.records[e]?.TsUi,l=n.columns[i],a=o&&o.colspan&&l!=null&&!isNaN(o.colspan[l.field])?parseInt(o.colspan[l.field]):1;if(l==null)return null;if(l&&l.hidden||a===0)return n.nextCell(e,i,t);if(t){let r=n.getCellEditable(e,i);if(r==null||["checkbox","check"].indexOf(r.type)!=-1)return n.nextCell(e,i,t)}return{index:e,colIndex:i}}function ns(n,e,s,t){let i=s-1;if(i<0){let r=n.prevRow(e);return r==null?null:n.prevCell(r,n.columns.length,t)}if(i<0)return null;let o=n.records[e]?.TsUi,l=n.columns[i],a=o&&o.colspan&&l!=null&&!isNaN(o.colspan[l.field])?parseInt(o.colspan[l.field]):1;if(l==null)return null;if(l&&l.hidden||a===0)return n.prevCell(e,i,t);if(t){let r=n.getCellEditable(e,i);if(r==null||["checkbox","check"].indexOf(r.type)!=-1)return n.prevCell(e,i,t)}return{index:e,colIndex:i}}function is(n,e,s,t){let i=n.last.searchIds,o=null;if(t==null&&(t=1),t==-1)return n.records.length-1;if(e+t<n.records.length&&i.length===0||i.length>0&&e<(i[i.length-t]??0)){if(e+=t,i.length>0)for(;!(i.includes(e)||e>n.records.length);)e+=t;let l=n.records[e]?.TsUi,a=s!=null?n.columns[s]:void 0;(l&&l.colspan&&a!=null&&!isNaN(l.colspan[a.field])?parseInt(l.colspan[a.field]):1)===0||l?.selectable===!1?o=n.nextRow(e,s,t):o=e}return o}function os(n,e,s,t){let i=n.last.searchIds,o=null;if(t==null&&(t=1),t==-1)return 0;if(e-t>=0&&i.length===0||i.length>0&&e>(i[0]??0)){if(e-=t,i.length>0)for(;!(i.includes(e)||e<0);)e-=t;let l=n.records[e]?.TsUi,a=s!=null?n.columns[s]:void 0;(l&&l.colspan&&a!=null&&!isNaN(l.colspan[a.field])?parseInt(l.colspan[a.field]):1)===0||l?.selectable===!1?(o=n.prevRow(e,s,t),o==null&&(o=e)):o=e}return o}function ls(n){return n.last.saved_sel=n.getSelection(),n.last.saved_sel}function as(n,e){let s=Date.now();n.last.selection={indexes:[],columns:{}};let t=n.last.selection,i=n.last.saved_sel;if(i)for(let o=0;o<i.length;o++)if(p.isPlainObject(i[o])){let l=n.get(i[o].recid,!0);l!=null&&(t.indexes.indexOf(l)==-1&&t.indexes.push(l),t.columns[l]||(t.columns[l]=[]),t.columns[l].push(i[o].column))}else{let l=n.get(i[o],!0);l!=null&&t.indexes.push(l)}return delete n.last.saved_sel,e!==!0&&n.refresh(),Date.now()-s}function rs(n,e){return p.message({owner:n,box:n.box,after:".tsg-grid-header"},e)}function cs(n,e){return p.confirm({owner:n,box:n.box,after:".tsg-grid-header"},e)}var q=j;function us(n,e,s){Array.isArray(e)||(e=[e]);let t=0;for(let o=0;o<e.length;o++){let l=e[o];if(n.recid!=null&&l[n.recid]!=null&&(l.recid=l[n.recid]),l.recid==null){console.log("ERROR: Cannot add record without recid. (obj: "+n.name+")");continue}l.TsUi?.summary===!0?s?n.summary.unshift(l):n.summary.push(l):s?n.records.unshift(l):n.records.push(l),t++}if(n.processGroupBy(),n.url?.get??n.url)n.refresh();else{n.total=n.records.length,n.localSort(!1,!0),n.localSearch();let o=n.records.length-e.length,l=o+e.length;(n.last.vscroll.recIndStart??0)<=l&&(n.last.vscroll.recIndEnd??0)>=o?n.refresh():q(n.box).find("#grid_"+n.name+"_footer .tsg-footer-right .tsg-total").html(p.formatNumber(n.total))}return t}function ds(n,e,s,t){e==null&&(e={});let i=[],o=!1;for(let r in e)String(r).indexOf(".")!=-1&&(o=!0);let l=t?n.last.vscroll.recIndStart??0:0,a=t?(n.last.vscroll.recIndEnd??n.records.length)+1:n.records.length;a>n.records.length&&(a=n.records.length);for(let r=l;r<a;r++){let c=n.records[r],d=!0;for(let u in e){let h=c[u];o&&String(u).indexOf(".")!=-1&&(h=n.parseField(c,u)),e[u]=="not-null"?(h==null||h==="")&&(d=!1):e[u]!=h&&(d=!1)}d&&s!==!0&&i.push(c.recid),d&&s===!0&&i.push(r)}return i}function fs(n,e,s,t){if(typeof e=="object"&&e!==null&&(t=s,s=e,e=null),e==null){for(let i=0;i<n.records.length;i++)p.extend(n.records[i],s);t!==!0&&n.refresh()}else{let i=n.get(e,!0);if(i==null)return!1;n.records[i]?.recid!=e?p.extend(n.summary[i],s):p.extend(n.records[i],s),t!==!0&&n.refreshRow(e,i)}return n.processGroupBy(),!0}function hs(n,e,s,t){let i=n.get(e,!0);return i==null?!1:(n.records[i]?.recid!=e?n.summary[i]=s:n.records[i]=s,t!==!0&&n.refreshRow(e,i),n.processGroupBy(),!0)}function ps(n,e,s){if(Array.isArray(e)){let t=[];for(let i=0;i<e.length;i++){let o=n.get(e[i],s);o!==null&&t.push(o)}return t}else{let t=n.last.idCache;t||(n.last.idCache=t={});let i=t[e];if(typeof i=="number"){if(i>=0&&i<n.records.length&&n.records[i].recid==e)return s===!0?i:n.records[i];if(i=~i,i>=0&&i<n.summary.length&&n.summary[i].recid==e)return s===!0?i:n.summary[i];n.last.idCache=t={}}for(let o=0;o<n.records.length;o++)if(n.records[o].recid==e)return t[e]=o,s===!0?o:n.records[o];for(let o=0;o<n.summary.length;o++)if(n.summary[o].recid==e)return t[e]=~o,s===!0?o:n.summary[o];return null}}function ms(n,...e){let s=0;for(let i=0;i<e.length;i++){for(let o=n.records.length-1;o>=0;o--)n.records[o].recid==e[i]&&(n.records.splice(o,1),s++);for(let o=n.summary.length-1;o>=0;o--)n.summary[o].recid==e[i]&&(n.summary.splice(o,1),s++)}return(n.url?.get??n.url)||(n.localSort(!1,!0),n.localSearch(),n.total=n.records.length),n.refresh(),s}function gs(n){if(n.groupBy==null)return;let e=n.groupBy,s=[];n.records.forEach(t=>{let i=t[e.field];if(i!=null){if(n.last.groupBy_links[i]==null){let o={recid:"group-"+i,group:i,TsUi:{...e,children:[]}};n.last.groupBy_links[i]=o,delete o.TsUi.field,s.push(o)}t[e.field]="",n.last.groupBy_links[i].TsUi.children.push(t)}}),n.records=s,n.total!==-1&&(n.total=n.records.length)}function ys(n,e,s){let t=n;if(n.url?.get??n.url)return console.log("ERROR: grid.localSort can only be used on local data source, grid.url should be empty."),0;if(Object.keys(n.sortData).length===0){let h=n.last.originalSort;return h&&n.records.sort((f,m)=>{let y=h.indexOf(f.recid),x=h.indexOf(m.recid);return y>x?1:-1}),0}let o=Date.now();n.selectionSave(),n.prepareData(),s||n.reset();for(let h=0;h<n.sortData.length;h++){let f=n.sortData[h],m=n.getColumn(f.field);if(!m)return;if(typeof m.render=="string"){let y=m.render.split(":")[0]??"";["date","age"].indexOf(y)!=-1&&(f.field_=m.field+"_"),["time"].indexOf(y)!=-1&&(f.field_=m.field+"_")}}return l(),n.records.sort((h,f)=>r(h,f)),a(),n.selectionRestore(s),o=Date.now()-o,e!==!0&&n.show.statusSort&&setTimeout(()=>{n.status(p.lang("Sorting took ${count} seconds",{count:o/1e3}))},10),o;function l(){for(let h=0;h<t.records.length;h++){let f=t.records[h];f.TsUi?.parent_recid!=null&&(f.TsUi._path=c(f))}}function a(){for(let h=0;h<t.records.length;h++){let f=t.records[h];f.TsUi?.parent_recid!=null&&(f.TsUi._path=null)}}function r(h,f){if((!h.TsUi||h.TsUi.parent_recid==null)&&(!f.TsUi||f.TsUi.parent_recid==null))return d(h,f);let m=c(h),y=c(f);for(let x=0;x<Math.min(m.length,y.length);x++){let b=d(m[x],y[x]);if(b!==0)return b}return m.length>y.length?1:m.length<y.length?-1:(console.log("ERROR: two paths should not be equal."),0)}function c(h){if(!h.TsUi||h.TsUi.parent_recid==null)return[h];if(h.TsUi._path)return h.TsUi._path;let f=t.get(h.TsUi.parent_recid);return f?c(f).concat(h):(console.log("ERROR: no parent record: "+h.TsUi.parent_recid),[h])}function d(h,f){if(h===f)return 0;for(let y=0;y<t.sortData.length;y++){let x=t.sortData[y],b=x.field,g=x.field_?x.field_:b,v=h[g],w=f[g];String(b).indexOf(".")!=-1&&(v=t.parseField(h,g),w=t.parseField(f,g));let T=t.getColumn(b);T&&T.editable&&Object.keys(T.editable).length>0&&(p.isPlainObject(v)&&v.text&&(v=v.text),p.isPlainObject(w)&&w.text&&(w=w.text));let _=u(v,w,y,x.direction,T?.sortMode||"default");if(_!==0)return _}return u(h.recid,f.recid,-1,"asc")}function u(h,f,m,y,x){if(h===f)return 0;let b=y.toLowerCase()==="asc"?1:-1;if(typeof x=="function")return x(h,f)*b;if((h==null||h==="")&&f!=null&&f!=="")return 1;if(h!=null&&h!==""&&(f==null||f===""))return-1;if(typeof h!=typeof f)return typeof h>typeof f?b:-b;if(h.constructor.name!=f.constructor.name)return h.constructor.name>f.constructor.name?b:-b;h&&typeof h=="object"&&(h=h.valueOf()),f&&typeof f=="object"&&(f=f.valueOf());let g={}.toString;switch(h&&typeof h=="object"&&h.toString!=g&&(h=String(h)),f&&typeof f=="object"&&f.toString!=g&&(f=String(f)),typeof h=="string"&&(h=h.toLowerCase().trim()),typeof f=="string"&&(f=f.toLowerCase().trim()),x){case"natural":x=p.naturalCompare;break;case"i18n":x=p.i18nCompare;break}return typeof x=="function"?x(h,f)*b:h>f?b:h<f?-b:0}}function bs(n,e){let s=n,t=n.url?.get??n.url;if(t){console.log("ERROR: grid.localSearch can only be used on local data source, grid.url should be empty.");return}let i=Date.now(),o={}.toString,l={};if(n.total=n.records.length,n.last.searchIds=[],n.prepareData(),n.searchData.length>0&&!t){n.total=0;for(let c=0;c<n.records.length;c++){let d=n.records[c];if(a(d))if(d?.TsUi&&r(d.TsUi.parent_recid??null),n.showExtraOnSearch>0){let h=n.showExtraOnSearch,f=n.showExtraOnSearch;if(c<h&&(h=c),c+f>n.records.length&&(f=n.records.length-c),h>0)for(let m=c-h;m<c;m++)n.last.searchIds.indexOf(m)<0&&n.last.searchIds.push(m);if(n.last.searchIds.indexOf(c)<0&&n.last.searchIds.push(c),f>0)for(let m=c+1;m<=c+f;m++)n.last.searchIds.indexOf(m)<0&&n.last.searchIds.push(m)}else n.last.searchIds.push(c)}n.total=n.last.searchIds.length}return i=Date.now()-i,e!==!0&&n.show.statusSearch&&setTimeout(()=>{n.status(p.lang("Search took ${count} seconds",{count:i/1e3}))},10),i;function a(c){let d=0,u,h,f,m,y=!1;for(let x=0;x<s.searchData.length;x++){let b=s.searchData[x];if(b==null)continue;let g=s.getSearch(b.field);g==null&&(g={field:b.field,type:b.type});let v=c.TsUi?.changes?.[g.field]??s.parseField(c,g.field);switch(u=v!=null&&(typeof v!="object"||v.toString!=o)?String(v).toLowerCase():"",b.value!=null&&(Array.isArray(b.value)?(h=b.value[0],f=b.value[1]):h=String(b.value).toLowerCase()),b.operator){case"=":case"is":v==b.value||String(v)==b.value?d++:g.type=="date"?(m=s.parseField(c,g.field+"_")instanceof Date?s.parseField(c,g.field+"_"):s.parseField(c,g.field),u=p.formatDate(m,"yyyy-mm-dd"),h=p.formatDate(p.isDate(h,p.settings.dateFormat,!0),"yyyy-mm-dd"),u==h&&d++):g.type=="time"?(m=s.parseField(c,g.field+"_")instanceof Date?s.parseField(c,g.field+"_"):s.parseField(c,g.field),u=p.formatTime(m,"hh24:mi"),h=p.formatTime(h,"hh24:mi"),u==h&&d++):g.type=="datetime"&&(m=s.parseField(c,g.field+"_")instanceof Date?s.parseField(c,g.field+"_"):s.parseField(c,g.field),u=p.formatDateTime(m,"yyyy-mm-dd|hh24:mm:ss"),h=p.formatDateTime(p.isDateTime(h,p.settings.datetimeFormat,!0),"yyyy-mm-dd|hh24:mm:ss"),u==h&&d++);break;case"is not":case"!=":v!=b.value&&String(v)!=b.value&&d++;break;case"between":if(["int","float","money","currency","percent"].indexOf(g.type)!=-1)parseFloat(s.parseField(c,g.field))>=parseFloat(h)&&parseFloat(s.parseField(c,g.field))<=parseFloat(f)&&d++;else if(g.type=="date")m=s.parseField(c,g.field+"_")instanceof Date?s.parseField(c,g.field+"_"):s.parseField(c,g.field),u=p.isDate(m,p.settings.dateFormat,!0),h=p.isDate(h,p.settings.dateFormat,!0),f=p.isDate(f,p.settings.dateFormat,!0),f instanceof Date&&(f=new Date(f.getTime()+864e5)),u>=h&&u<f&&d++;else if(g.type=="time"){u=s.parseField(c,g.field+"_")instanceof Date?s.parseField(c,g.field+"_"):s.parseField(c,g.field),h=p.isTime(h,!0),f=p.isTime(f,!0);let T=h,_=f;h=new Date().setHours(T.hours,T.minutes,T.seconds?T.seconds:0,0),f=new Date().setHours(_.hours,_.minutes,_.seconds?_.seconds:0,0),u>=h&&u<f&&d++}else g.type=="datetime"&&(u=s.parseField(c,g.field+"_")instanceof Date?s.parseField(c,g.field+"_"):s.parseField(c,g.field),h=p.isDateTime(h,p.settings.datetimeFormat,!0),f=p.isDateTime(f,p.settings.datetimeFormat,!0),f instanceof Date&&(f=new Date(f.getTime()+864e5)),u>=h&&u<f&&d++);break;case"<=":y=!0;case"<":case"less":["int","float","money","currency","percent"].indexOf(g.type)!=-1?(u=parseFloat(s.parseField(c,g.field)),h=parseFloat(b.value),(u<h||y&&u===h)&&d++):g.type=="date"?(m=s.parseField(c,g.field+"_")instanceof Date?s.parseField(c,g.field+"_"):s.parseField(c,g.field),u=p.isDate(m,p.settings.dateFormat,!0),h=p.isDate(h,p.settings.dateFormat,!0),(u<h||y&&u===h)&&d++):g.type=="time"?(m=s.parseField(c,g.field+"_")instanceof Date?s.parseField(c,g.field+"_"):s.parseField(c,g.field),u=p.formatTime(m,"hh24:mi"),h=p.formatTime(h,"hh24:mi"),(u<h||y&&u===h)&&d++):g.type=="datetime"&&(m=s.parseField(c,g.field+"_")instanceof Date?s.parseField(c,g.field+"_"):s.parseField(c,g.field),u=p.formatDateTime(m,"yyyy-mm-dd|hh24:mm:ss"),h=p.formatDateTime(p.isDateTime(h,p.settings.datetimeFormat,!0),"yyyy-mm-dd|hh24:mm:ss"),u.length==h.length&&(u<h||y&&u===h)&&d++);break;case">=":y=!0;case">":case"more":["int","float","money","currency","percent"].indexOf(g.type)!=-1?(u=parseFloat(s.parseField(c,g.field)),h=parseFloat(b.value),(u>h||y&&u===h)&&d++):g.type=="date"?(m=s.parseField(c,g.field+"_")instanceof Date?s.parseField(c,g.field+"_"):s.parseField(c,g.field),u=p.isDate(m,p.settings.dateFormat,!0),h=p.isDate(h,p.settings.dateFormat,!0),(u>h||y&&u===h)&&d++):g.type=="time"?(m=s.parseField(c,g.field+"_")instanceof Date?s.parseField(c,g.field+"_"):s.parseField(c,g.field),u=p.formatTime(m,"hh24:mi"),h=p.formatTime(h,"hh24:mi"),(u>h||y&&u===h)&&d++):g.type=="datetime"&&(m=s.parseField(c,g.field+"_")instanceof Date?s.parseField(c,g.field+"_"):s.parseField(c,g.field),u=p.formatDateTime(m,"yyyy-mm-dd|hh24:mm:ss"),h=p.formatDateTime(p.isDateTime(h,p.settings.datetimeFormat,!0),"yyyy-mm-dd|hh24:mm:ss"),u.length==h.length&&(u>h||y&&u===h)&&d++);break;case"in":m=b.value,b.svalue&&(m=b.svalue),(m.indexOf(p.isFloat(v)?parseFloat(v):v)!==-1||m.indexOf(u)!==-1&&u!=="")&&d++;break;case"not in":m=b.value,b.svalue&&(m=b.svalue),m.indexOf(p.isFloat(v)?parseFloat(v):v)!==-1||m.indexOf(u)!==-1&&u!==""||d++;break;case"begins":case"begins with":u.indexOf(h)===0&&d++;break;case"contains":u.indexOf(h)>=0&&d++;break;case"null":s.parseField(c,g.field)==null&&d++;break;case"not null":s.parseField(c,g.field)!=null&&d++;break;case"ends":case"ends with":let w=u.lastIndexOf(h);w!==-1&&w==u.length-h.length&&d++;break}}if(s.last.logic=="OR"&&d!==0||s.last.logic=="AND"&&d==s.searchData.length)return!0;if(c.TsUi?.children&&c.TsUi?.expanded!==!0)for(let x=0;x<c.TsUi.children.length;x++){let b=c.TsUi.children[x];if(a(b))return!0}return!1}function r(c){if(c==null)return;let d=s.get(c,!0);if(d==null||l[c]||s.last.searchIds.includes(d))return;l[c]=!0;let u=s.records[d];u?.TsUi&&r(u.TsUi.parent_recid??null),s.last.searchIds.push(d)}}function xs(n,e,s){let t=n.get(e[0].recid,!0)??0,i=n.get(e[1].recid,!0)??0,o=e[0].column,l=e[1].column,a=[];if(o==l)for(let r=Math.min(t,i);r<=Math.max(t,i);r++){let c=n.records[r],d=c[n.columns[o].field]||null;s!==!0?a.push(d):a.push({data:d,column:o,index:r,record:c})}else if(t==i){let r=n.records[t];for(let c=Math.min(o,l);c<=Math.max(o,l);c++){let d=r[n.columns[c].field]||null;s!==!0?a.push(d):a.push({data:d,column:c,index:t,record:r})}}else for(let r=Math.min(t,i);r<=Math.max(t,i);r++){let c=n.records[r],d=[];a.push(d);for(let u=Math.min(o,l);u<=Math.max(o,l);u++){let h=c[n.columns[u].field];s!==!0?d.push(h):d.push({data:h,column:u,index:r,record:c})}}return a}function vs(n,e){let s=0,t,i;if(n.selectType=="row")return s;let o=Array.isArray(e)?e:[e];for(let l=0;l<o.length;l++){if(typeof o[l]!="object"&&(o[l]={name:"selection"}),o[l].name=="selection"){if(n.show.selectionBorder===!1)continue;let a=n.getSelection();if(a.length===0){n.removeRange("selection");continue}else t=a[0],i=a[a.length-1]}else t=o[l].range[0],i=o[l].range[1];if(t){let a={name:o[l].name,range:[{recid:t.recid,column:t.column},{recid:i.recid,column:i.column}],style:o[l].style||"",class:o[l].class},r=!1;for(let c=0;c<n.ranges.length;c++)if(n.ranges[c].name==o[l].name){r=c;break}r!==!1?n.ranges[r]=a:n.ranges.push(a),s++}}return n.refreshRanges(),s}function Ts(n,...e){let s=0;for(let t=0;t<e.length;t++){let i=e[t];q(n.box).find("#grid_"+n.name+"_"+i).remove(),q(n.box).find("#grid_"+n.name+"_f"+i).remove();for(let o=n.ranges.length-1;o>=0;o--)n.ranges[o].name==i&&(n.ranges.splice(o,1),s++)}return s}function ws(n){if(n.ranges.length===0)return;let e=n,s,t=Date.now(),i=q(n.box).find(`#grid_${n.name}_frecords`),o=q(n.box).find(`#grid_${n.name}_records`);for(let h=0;h<n.ranges.length;h++){let f=n.ranges[h],m=f.range[0],y=f.range[1];if(m.index==null){let $=n.get(m.recid,!0);$!=null&&(m.index=$)}if(y.index==null){let $=n.get(y.recid,!0);$!=null&&(y.index=$)}if(m.index!=null&&y.index!=null&&m.index>y.index){let $=m;m=y,y=$}let x=q(n.box).find("#grid_"+n.name+"_rec_"+p.escapeId(m.recid)+' td[col="'+m.column+'"]'),b=q(n.box).find("#grid_"+n.name+"_rec_"+p.escapeId(y.recid)+' td[col="'+y.column+'"]'),g=q(n.box).find("#grid_"+n.name+"_frec_"+p.escapeId(m.recid)+' td[col="'+m.column+'"]'),v=q(n.box).find("#grid_"+n.name+"_frec_"+p.escapeId(y.recid)+' td[col="'+y.column+'"]'),w=y.column;m.column<n.last.vscroll.colIndStart&&y.column>n.last.vscroll.colIndStart&&(x=q(n.box).find("#grid_"+n.name+"_rec_"+p.escapeId(m.recid)+' td[col="start"]')),m.column<n.last.vscroll.colIndEnd&&y.column>n.last.vscroll.colIndEnd&&(b=q(n.box).find("#grid_"+n.name+"_rec_"+p.escapeId(y.recid)+' td[col="end"]'),w="end");let T=parseInt(q(n.box).find("#grid_"+n.name+"_rec_top").next().attr("index")),_=parseInt(q(n.box).find("#grid_"+n.name+"_rec_bottom").prev().attr("index")),C=parseInt(q(n.box).find("#grid_"+n.name+"_frec_top").next().attr("index")),D=parseInt(q(n.box).find("#grid_"+n.name+"_frec_bottom").prev().attr("index"));x.length===0&&m.index<T&&y.index>T&&(x=q(n.box).find("#grid_"+n.name+"_rec_top").next().find('td[col="'+m.column+'"]')),b.length===0&&y.index>_&&m.index<_&&(b=q(n.box).find("#grid_"+n.name+"_rec_bottom").prev().find('td[col="'+w+'"]')),g.length===0&&m.index<C&&y.index>C&&(g=q(n.box).find("#grid_"+n.name+"_frec_top").next().find('td[col="'+m.column+'"]')),v.length===0&&y.index>D&&m.index<D&&(v=q(n.box).find("#grid_"+n.name+"_frec_bottom").prev().find('td[col="'+y.column+'"]'));let I=q(n.box).find("#grid_"+n.name+"_editable").find(".tsg-input"),R=I.attr("index"),F=n.records[R]?.recid,S=I.attr("column");if(!(f.name=="selection"&&f.range[0].recid==F&&f.range[0].column==S)){if(s=q(n.box).find("#grid_"+n.name+"_f"+f.name),g.length>0||v.length>0)if(s.length===0?(i.append('<div id="grid_'+n.name+"_f"+f.name+'" class="tsg-selection" style="'+f.style+'">'+(f.name=="selection"&&n.show.selectionResizer?'<div id="grid_'+n.name+'_resizer" class="tsg-selection-resizer"></div>':"")+"</div>"),s=q(n.box).find("#grid_"+n.name+"_f"+f.name)):(s.attr("style",f.style),s.find(".tsg-selection-resizer").show()),v.length===0&&(v=q(n.box).find("#grid_"+n.name+"_frec_"+p.escapeId(y.recid)+" td:last-child"),v.length===0&&(v=q(n.box).find("#grid_"+n.name+"_frec_bottom td:first-child")),s.css("border-right","0px"),s.find(".tsg-selection-resizer").hide()),m.recid!=null&&y.recid!=null&&g.length>0&&v.length>0){let $=getComputedStyle(v[0]),H=g.prop("offsetTop")-g.prop("scrollTop"),Q=g.prop("offsetLeft")+g.prop("scrollLeft"),Y=v.prop("offsetTop")-v.prop("scrollTop"),ee=v.prop("offsetLeft")+v.prop("scrollLeft");s.show().css({top:(H>0?H:0)+"px",left:(Q>0?Q:0)+"px",width:ee-Q+parseFloat($.width)-1+"px",height:Y-H+parseFloat($.height)-1+"px"})}else s.hide();else s.hide();if(s=q(n.box).find("#grid_"+n.name+"_"+f.name),x.length>0||b.length>0)if(s.length===0?(o.append(`
353
+ <div id="grid_${n.name}_${f.name}" class="tsg-selection ${f.class??""}" style="${f.style}">
354
+ ${f.name=="selection"&&n.show.selectionResizer?`<div id="grid_${n.name}_resizer" class="tsg-selection-resizer"></div>`:""}
355
+ </div>
356
+ `),s=q(n.box).find("#grid_"+n.name+"_"+f.name)):s.attr("style",f.style),x.length===0&&(x=q(n.box).find("#grid_"+n.name+"_rec_"+p.escapeId(m.recid)+" td:first-child"),x.length===0&&(x=q(n.box).find("#grid_"+n.name+"_rec_top td:first-child"))),v.length!==0&&s.css("border-left","0px"),m.recid!=null&&y.recid!=null&&x.length>0&&b.length>0){let $=getComputedStyle(b[0]),H=x.prop("offsetTop")-x.prop("scrollTop"),Q=x.prop("offsetLeft")+x.prop("scrollLeft"),Y=b.prop("offsetTop")-b.prop("scrollTop"),ee=b.prop("offsetLeft")+b.prop("scrollLeft");s.show().css({top:(H>0?H:0)+"px",left:(Q>0?Q:0)+"px",width:ee-Q+parseFloat($.width)-1+"px",height:Y-H+parseFloat($.height)-1+"px"})}else s.hide();else s.hide()}}q(n.box).find(".tsg-selection-resizer").off(".resizer").on("mousedown.resizer",c).on("dblclick.resizer",h=>{let f=e.trigger("resizerDblClick",{target:e.name,originalEvent:h});f.isCancelled!==!0&&f.finish()});let l,a={target:e.name,originalRange:null,newRange:null},r="abcdefghijklmnopqrstuvwxyz";return Date.now()-t;function c(h){let f=e.getSelectionCells(),m=f[0],y=f[f.length-1];e.last.move={type:"expand",x:h.screenX,y:h.screenY,divX:0,divY:0,index:m.index,recid:m.recid,column:m.column,name:r[m.column]+(m.index+1)+":"+r[y.column]+(y.index+1),originalRange:[p.clone(m),p.clone(y)],newRange:[p.clone(m),p.clone(y)]},a.originalName=e.last.move.name,a.originalRange=e.last.move.originalRange,q("body").off(".tsg-"+e.name).on("mousemove.tsg-"+e.name,d).on("mouseup.tsg-"+e.name,u),h.preventDefault()}function d(h){let f=e.last.move;if(!f||f.type!="expand")return;f.divX=h.screenX-f.x,f.divY=h.screenY-f.y;let m,y=h.target;if(y.tagName.toUpperCase()!="TD"&&(y=q(y).closest("td")[0]),q(y).attr("col")!=null&&(m=parseInt(q(y).attr("col"))),m==null)return;y=q(y).closest("tr")[0];let x=parseInt(q(y).attr("index")),b=e.records[x]?.recid;if(f.newRange[1].recid==b&&f.newRange[1].column==m)return;let g=p.clone(f.newRange);if(f.newRange=[{recid:f.recid,index:f.index,column:f.column},{recid:b,index:x,column:m}],a.newName=r[f.column]+(f.index+1)+":"+r[m]+(x+1),a.newRange=p.clone(f.newRange),l=e.trigger("selectionExtend",a),l.isCancelled===!0){f.newRange=g,a.newRange=g;return}else e.addRange({name:"selection-expand",range:f.newRange,class:"tsg-selection-expand"})}function u(h){e.removeRange("selection-expand"),q("body").off(".tsg-"+e.name),e.last.move?.type=="expand"&&l.finish&&l.finish(),delete e.last.move}}function _s(n,e){n.total=0,n.records=[],n.summary=[],n.last.fetch.offset=0,n.last.idCache={},n.last.selection={indexes:[],columns:{}},n.last.groupBy_links={},n.reset(!0),e||n.refresh()}function ks(n,e){n.last.vscroll.scrollTop=0,n.last.vscroll.scrollLeft=0,n.last.vscroll.recIndStart=null,n.last.vscroll.recIndEnd=null,q(n.box).find(`#grid_${n.name}_records`).prop("scrollTop",0),e||n.refresh()}function Cs(n,e,s){return e==null?(console.log('ERROR: You need to provide url argument when calling .load() method of "'+n.name+'" object.'),new Promise((t,i)=>{i()})):(n.clear(!0),n.request("load",{},e,s))}function Es(n,e){let s=n.url?.get??n.url;return n.selectionSave(),s?n.load(s,()=>{n.selectionRestore(),typeof e=="function"&&e()}):(n.reset(!0),n.localSearch(),n.selectionRestore(),typeof e=="function"&&e({status:"success"}),new Promise(t=>{t()}))}function Ss(n,e,s,t,i){let o=n,l,a,r=new Promise((f,m)=>{l=f,a=m});if(s==null&&(s={}),t||(t=n.url),!t)return new Promise((f,m)=>{m()});p.isInt(n.offset)||(n.offset=0),p.isInt(n.last.fetch.offset)||(n.last.fetch.offset=0);let c,d={limit:n.limit,offset:n.offset+n.last.fetch.offset,searchLogic:n.last.logic,search:n.searchData.map(f=>{let m=p.clone(f);return n.searchMap&&n.searchMap[m.field]&&(m.field=n.searchMap[m.field]),m}),sort:n.sortData.map(f=>{let m=p.clone(f);return n.sortMap&&n.sortMap[m.field]&&(m.field=n.sortMap[m.field]),m})};if(n.searchData.length===0&&(delete d.search,delete d.searchLogic),n.sortData.length===0&&delete d.sort,p.extend(d,n.postData),p.extend(d,s),(e=="delete"||e=="save")&&(delete d.limit,delete d.offset,d.action=e,e=="delete"&&(d[n.recid||"recid"]=n.getSelection())),e=="load"){if(c=n.trigger("request",{target:n.name,url:t,postData:d,httpMethod:"GET",httpHeaders:n.httpHeaders}),c.isCancelled===!0)return new Promise((f,m)=>{m()})}else c={detail:{url:t,postData:d,httpMethod:e=="save"?"PUT":"DELETE",httpHeaders:n.httpHeaders}};if(n.last.fetch.offset===0&&n.lock(p.lang(n.msgRefresh),!0),n.last.fetch.controller)try{n.last.fetch.controller.abort()}catch{}switch(t=c.detail.url,e){case"save":t?.save&&(t=t.save);break;case"delete":t?.remove&&(t=t.remove);break;default:t=t?.get??t}if(Object.keys(n.routeData).length>0){let f=p.parseRoute(t);if(f.keys.length>0)for(let m=0;m<f.keys.length;m++){let y=f.keys[m];n.routeData[y.name]!=null&&(t=t.replace(new RegExp(":"+y.name,"g"),n.routeData[y.name]))}}t=new URL(t,location.href);let u=p.prepareParams(t,{method:c.detail.httpMethod,headers:c.detail.httpHeaders,body:c.detail.postData},{dataType:n.dataType,caller:n,action:e});return Object.assign(n.last.fetch,{action:e,options:u,controller:new AbortController,start:Date.now(),loaded:!1}),u.signal=n.last.fetch.controller.signal,fetch(t,u).catch(h).then(f=>{if(f!=null){if(f?.status!=200){h(f??{});return}f.json().catch(h).then(m=>{n.requestComplete(m??{},e,i,l,a)}).finally(()=>o.unlock())}}),e=="load"&&c.finish(),r;function h(f){if(f?.name==="AbortError")return;o.unlock();let m=o.trigger("error",{response:f,lastFetch:o.last.fetch});m.isCancelled!==!0&&(f.status&&f.status!=200?f.json().then(y=>{o.error(f.status+": "+(y.message||f.statusText))}).catch(()=>{o.error(f.status+": "+f.statusText)}):(console.log("ERROR: Server communication failed.",`
357
+ EXPECTED:`,{total:5,records:[{recid:1,field:"value"}]},`
358
+ OR:`,{error:!0,message:"error message"}),o.requestComplete({error:!0,message:p.lang(o.msgHTTPError),response:f},e,i,l,a)),m.finish())}}function Rs(n,e){let s=n.getChanges(),t=n.url?.save??n.url,i=n.trigger("save",{target:n.name,changes:s});i.isCancelled!==!0&&(t?n.request("save",{changes:i.detail.changes},null,o=>{o.error||n.mergeChanges(),i.finish(),typeof e=="function"&&e(o)}):(n.mergeChanges(),i.finish()))}var X=j;function $s(n,...e){if(e.length===0)return 0;let s=0,t=n.last.selection;n.multiSelect||n.selectNone(!0);let i=e.slice();Array.isArray(i[0])&&(i=i[0]),i=i.filter(c=>{let d=c?.recid??c,u=c?.index??n.get(d,!0);return n.records[u]?.TsUi?.selectable===!1?!1:(typeof c=="object"&&(c.index??=u),!0)});let o={target:n.name};if(i.length==1?(o.multiple=!1,p.isPlainObject(i[0])?o.clicked={recid:i[0].recid,column:i[0].column}:o.recid=i[0]):(o.multiple=!0,o.clicked={recids:i}),n.compareSelection(i).select.length==0)return;let l=n.trigger("select",o);if(l.isCancelled===!0)return 0;if(n.selectType=="row")for(let c=0;c<i.length;c++){let d=typeof i[c]=="object"?i[c].recid:i[c],u=n.get(d,!0);if(u==null)continue;let h=null,f=null;if((n.searchData.length!==0||u+1>=(n.last.vscroll.recIndStart??0)&&u+1<=(n.last.vscroll.recIndEnd??0))&&(h=X(n.box).find("#grid_"+n.name+"_frec_"+p.escapeId(d)),f=X(n.box).find("#grid_"+n.name+"_rec_"+p.escapeId(d))),n.selectType=="row"){if(t.indexes.indexOf(u)!=-1)continue;t.indexes.push(u),h&&f&&(h.addClass("tsg-selected").find(".tsg-col-number").addClass("tsg-row-selected"),f.addClass("tsg-selected").find(".tsg-col-number").addClass("tsg-row-selected"),h.find(".tsg-grid-select-check").prop("checked",!0)),s++}}else{let c={};for(let u=0;u<i.length;u++){let h=typeof i[u]=="object"?i[u].recid:i[u],f=typeof i[u]=="object"?i[u].column:null;if(c[h]=c[h]||[],Array.isArray(f))c[h]=f;else if(p.isInt(f))c[h].push(f);else for(let m=0;m<n.columns.length;m++)n.columns[m].hidden||c[h].push(m)}let d=[];for(let u in c){let h=n.get(u,!0);if(h==null)continue;let f=null,m=null;h+1>=(n.last.vscroll.recIndStart??0)&&h+1<=(n.last.vscroll.recIndEnd??0)&&(f=X(n.box).find("#grid_"+n.name+"_rec_"+p.escapeId(u)),m=X(n.box).find("#grid_"+n.name+"_frec_"+p.escapeId(u)));let y=t.columns[h]||[];t.indexes.indexOf(h)==-1&&t.indexes.push(h);let x=c[u];for(let b=0;b<x.length;b++)y.indexOf(x[b])==-1&&y.push(x[b]);y.sort((b,g)=>b-g);for(let b=0;b<x.length;b++){let g=x[b];d.indexOf(g)==-1&&d.push(g),f&&(f.find("#grid_"+n.name+"_data_"+h+"_"+g).addClass("tsg-selected"),f.find(".tsg-col-number").addClass("tsg-row-selected"),f.find(".tsg-grid-select-check").prop("checked",!0)),m&&(m.find("#grid_"+n.name+"_data_"+h+"_"+g).addClass("tsg-selected"),m.find(".tsg-col-number").addClass("tsg-row-selected"),m.find(".tsg-grid-select-check").prop("checked",!0)),s++}t.columns[h]=y}for(let u=0;u<d.length;u++)X(n.box).find("#grid_"+n.name+"_column_"+d[u]+" .tsg-col-header").addClass("tsg-col-selected")}t.indexes.sort((c,d)=>c-d);let a=n.records.length>0&&t.indexes.length==n.records.length,r=t.indexes.length>0&&n.searchData.length!==0&&t.indexes.length==n.last.searchIds.length;return a||r?X(n.box).find("#grid_"+n.name+"_check_all").prop("checked",!0):X(n.box).find("#grid_"+n.name+"_check_all").prop("checked",!1),n.status(),n.addRange("selection"),n.updateToolbar(t,a),l.finish(),s}function Ms(n,...e){let s=0,t=n.last.selection,i=e.slice();Array.isArray(i[0])&&(i=i[0]);let o={target:n.name};if(i.length==1?(o.multiple=!1,p.isPlainObject(i[0])?o.clicked={recid:i[0].recid,column:i[0].column}:o.clicked={recid:i[0]}):(o.multiple=!0,o.recids=i),n.compareSelection(i).unselect.length==0)return 0;let l=n.trigger("select",o);if(l.isCancelled===!0)return 0;for(let c=0;c<i.length;c++){let d=typeof i[c]=="object"?i[c].recid:i[c],u=n.get(d);if(u==null)continue;let h=n.get(u.recid,!0)??-1,f=X(n.box).find("#grid_"+n.name+"_frec_"+p.escapeId(d)),m=X(n.box).find("#grid_"+n.name+"_rec_"+p.escapeId(d));if(n.selectType=="row"){if(t.indexes.indexOf(h)==-1)continue;t.indexes.splice(t.indexes.indexOf(h),1),f.removeClass("tsg-selected tsg-inactive").find(".tsg-col-number").removeClass("tsg-row-selected"),m.removeClass("tsg-selected tsg-inactive").find(".tsg-col-number").removeClass("tsg-row-selected"),f.length!=0&&(f[0].style.cssText="height: "+n.recordHeight+"px; "+f.attr("custom_style"),m[0].style.cssText="height: "+n.recordHeight+"px; "+m.attr("custom_style")),f.find(".tsg-grid-select-check").prop("checked",!1),s++}else{let y=i[c].column;if(!p.isInt(y)){let w=[];for(let T=0;T<n.columns.length;T++)n.columns[T].hidden||w.push({recid:d,column:T});return n.unselect(w)}let x=t.columns[h];if(!Array.isArray(x)||x.indexOf(y)==-1)continue;x.splice(x.indexOf(y),1),X(n.box).find(`#grid_${n.name}_rec_${p.escapeId(d)} > td[col="${y}"]`).removeClass("tsg-selected tsg-inactive"),X(n.box).find(`#grid_${n.name}_frec_${p.escapeId(d)} > td[col="${y}"]`).removeClass("tsg-selected tsg-inactive");let b=!1,g=!1,v=n.getSelectionCells();for(let w=0;w<v.length;w++)v[w].column==y&&(b=!0),v[w].recid==d&&(g=!0);b||X(n.box).find(`.tsg-grid-columns td[col="${y}"] .tsg-col-header, .tsg-grid-fcolumns td[col="${y}"] .tsg-col-header`).removeClass("tsg-col-selected"),g||X(n.box).find("#grid_"+n.name+"_frec_"+p.escapeId(d)).find(".tsg-col-number").removeClass("tsg-row-selected"),s++,x.length===0&&(delete t.columns[h],t.indexes.splice(t.indexes.indexOf(h),1),f.find(".tsg-grid-select-check").prop("checked",!1))}}let a=n.records.length>0&&t.indexes.length==n.records.length,r=t.indexes.length>0&&n.searchData.length!==0&&t.indexes.length==n.last.searchIds.length;return a||r?X(n.box).find("#grid_"+n.name+"_check_all").prop("checked",!0):X(n.box).find("#grid_"+n.name+"_check_all").prop("checked",!1),n.status(),n.addRange("selection"),n.updateToolbar(t,a),l.finish(),s}function Ds(n,e){let s=[],t=[];if(n.selectType=="row"){let i=n.getSelectionRows();e.forEach((o,l)=>{typeof o=="object"&&(e[l]=o.recid)});for(let o=0;o<e.length;o++)i.includes(e[o])||s.push(e[o]);for(let o=0;o<e.length;o++)i.includes(e[o])&&t.push(e[o])}else{let i=n.getSelectionCells();for(let o=0;o<e.length;o++){let l=!1;for(let a=0;a<i.length;a++)e[o].recid==i[a].recid&&e[o].column==i[a].column&&(l=!0);l||s.push({recid:e[o].recid,column:e[o].column})}for(let o=0;o<i.length;o++){let l=!1;for(let a=0;a<e.length;a++)e[a].recid==i[o].recid&&e[a].column==i[o].column&&(l=!0);l||t.push({recid:i[o].recid,column:i[o].column})}}return{select:s,unselect:t}}function Is(n){let e=Date.now();if(n.multiSelect===!1)return;let s=n.url?.get??n.url,t=p.clone(n.last.selection),i=[];for(let l=0;l<n.columns.length;l++)i.push(l);if(t.indexes=[],!s&&n.searchData.length!==0)for(let l=0;l<n.last.searchIds.length;l++)t.indexes.push(n.last.searchIds[l]),n.selectType!="row"&&(t.columns[n.last.searchIds[l]]=i.slice());else{let l=n.records.length;n.searchData.length!=0&&!s&&(l=n.last.searchIds.length);for(let a=0;a<l;a++)t.indexes.push(a),n.selectType!="row"&&(t.columns[a]=i.slice())}let o=n.trigger("select",{target:n.name,multiple:!0,all:!0,clicked:t});if(o.isCancelled!==!0)return n.last.selection=t,n.selectType=="row"?(X(n.box).find(".tsg-grid-records tr:not(.tsg-empty-record)").addClass("tsg-selected").find(".tsg-col-number").addClass("tsg-row-selected"),X(n.box).find(".tsg-grid-frecords tr:not(.tsg-empty-record)").addClass("tsg-selected").find(".tsg-col-number").addClass("tsg-row-selected"),X(n.box).find("input.tsg-grid-select-check").prop("checked",!0)):(X(n.box).find(".tsg-grid-columns td .tsg-col-header, .tsg-grid-fcolumns td .tsg-col-header").addClass("tsg-col-selected"),X(n.box).find(".tsg-grid-records tr .tsg-col-number").addClass("tsg-row-selected"),X(n.box).find(".tsg-grid-records tr:not(.tsg-empty-record)").find(".tsg-grid-data:not(.tsg-col-select)").addClass("tsg-selected"),X(n.box).find(".tsg-grid-frecords tr .tsg-col-number").addClass("tsg-row-selected"),X(n.box).find(".tsg-grid-frecords tr:not(.tsg-empty-record)").find(".tsg-grid-data:not(.tsg-col-select)").addClass("tsg-selected"),X(n.box).find("input.tsg-grid-select-check").prop("checked",!0)),t=n.getSelectionRows(!0),n.addRange("selection"),X(n.box).find("#grid_"+n.name+"_check_all").prop("checked",!0),n.status(),n.updateToolbar({indexes:t},!0),o.finish(),Date.now()-e}function Os(n,e){let s=Date.now(),t;if(!e&&(t=n.trigger("select",{target:n.name,clicked:[]}),t.isCancelled===!0))return;let i=n.last.selection;return n.selectType=="row"?(X(n.box).find(".tsg-grid-records tr.tsg-selected").removeClass("tsg-selected tsg-inactive").find(".tsg-col-number").removeClass("tsg-row-selected"),X(n.box).find(".tsg-grid-frecords tr.tsg-selected").removeClass("tsg-selected tsg-inactive").find(".tsg-col-number").removeClass("tsg-row-selected"),X(n.box).find("input.tsg-grid-select-check").prop("checked",!1)):(X(n.box).find(".tsg-grid-columns td .tsg-col-header, .tsg-grid-fcolumns td .tsg-col-header").removeClass("tsg-col-selected"),X(n.box).find(".tsg-grid-records tr .tsg-col-number").removeClass("tsg-row-selected"),X(n.box).find(".tsg-grid-frecords tr .tsg-col-number").removeClass("tsg-row-selected"),X(n.box).find(".tsg-grid-data.tsg-selected").removeClass("tsg-selected tsg-inactive"),X(n.box).find("input.tsg-grid-select-check").prop("checked",!1)),i.indexes=[],i.columns={},n.removeRange("selection"),X(n.box).find("#grid_"+n.name+"_check_all").prop("checked",!1),n.status(),n.updateToolbar(i,!1),e||t.finish(),Date.now()-s}function zs(n,e,s){let t=n,i=e&&e.indexes?e.indexes.length:0;if(!n.toolbar.render)return;n.toolbar.items.forEach(l=>{o(l,""),Array.isArray(l.items)&&l.items.forEach(a=>{o(a,l.id+":")})}),n.show.toolbarSave&&(n.getChanges().length>0?n.toolbar.enable("tsg-save"):n.toolbar.disable("tsg-save"));function o(l,a){if(l.batch!=null){let r=!1;l.batch===!0?i>0&&(r=!0):typeof l.batch=="number"?i===l.batch&&(r=!0):typeof l.batch=="function"&&(r=l.batch({cnt:i,sel:e})),r?t.toolbar.enable(a+l.id):t.toolbar.disable(a+l.id)}}}function Ls(n,e){let s=[],t=n.last.selection;for(let i=0;i<t.indexes.length;i++){let o=t.indexes[i];n.records[o]&&(e===!0?s.push(o):s.push(n.records[o].recid))}return s}function As(n){let e=[],s=n.last.selection;for(let t=0;t<s.indexes.length;t++){let i=s.indexes[t],o=s.columns[i]??[];if(n.records[i])for(let l=0;l<o.length;l++)e.push({recid:n.records[i].recid,index:i,column:o[l]})}return e}function Fs(n,e){return n.selectType==="row"?n.getSelectionRows(e):n.getSelectionCells()}var k=j,re=ie,ki=Re,De=Ue,Ie=V,ue=class extends ne{el;selected;helpers;type;options;onClick;onAdd;onNew;onRemove;onMouseEnter;onMouseLeave;onScroll;tmp;constructor(e,s){super(),typeof e=="string"&&s==null&&(s={type:e}),typeof e=="object"&&s==null&&(s=p.clone(e)),typeof e=="string"&&typeof s=="object"&&(s.type=e);let t=s;t.type=String(t.type).toLowerCase(),this.el=t.el??null,this.selected=null,this.helpers={},this.type=t.type??"text",this.options=p.clone(t),this.onClick=t.onClick??null,this.onAdd=t.onAdd??null,this.onNew=t.onNew??null,this.onRemove=t.onRemove??null,this.onMouseEnter=t.onMouseEnter??null,this.onMouseLeave=t.onMouseLeave??null,this.onScroll=t.onScroll??null,this.tmp={},delete this.options.type,delete this.options.onClick,delete this.options.onMouseEnter,delete this.options.onMouseLeave,delete this.options.onScroll,this.el&&this.render(this.el)}render(e){if(!(e instanceof HTMLElement)){console.log("ERROR: Cannot init TsField on empty subject");return}let s=e;s._w2field?.reset?.(),s._w2field=this,this.el=s,this.init()}init(){let e=this.options,s;if(this.el==null||!["INPUT","TEXTAREA"].includes(this.el.tagName.toUpperCase())){console.log("ERROR: TsField could only be applied to INPUT or TEXTAREA.",this.el);return}let t=this.el;switch(this.type){case"text":case"int":case"float":case"money":case"currency":case"percent":case"alphanumeric":case"bin":case"hex":{s={min:null,max:null,step:1,autoFormat:!0,autoCorrect:!0,currency:{prefix:p.settings.currencyPrefix,suffix:p.settings.currencySuffix,precision:p.settings.currencyPrecision},decimalSymbol:p.settings.decimalSymbol,groupSymbol:p.settings.groupSymbol,arrows:!1,keyboard:!0,precision:null,prefix:"",suffix:""},this.options=p.extend({},s,e),e=this.options,e.numberRE=new RegExp("["+e.groupSymbol+"]","g"),e.moneyRE=new RegExp("["+e.currency.prefix+e.currency.suffix+e.groupSymbol+"]","g"),e.percentRE=new RegExp("["+e.groupSymbol+"%]","g"),["text","alphanumeric","hex","bin"].includes(this.type)&&(e.arrows=!1,e.keyboard=!1);break}case"color":{let o=parseInt(getComputedStyle(this.el)["font-size"]??"12")||12;s={prefix:"#",suffix:`<div style="width: ${o}px; height: ${o}px; margin-top: -2px;
359
+ position: relative; top: 50%; transform: translateY(-50%);">&#160;</div>`,arrows:!1,advanced:null,transparent:!0},this.options=p.extend({},s,e),e=this.options;break}case"date":{s={format:p.settings.dateFormat,keyboard:!0,autoCorrect:!0,start:null,end:null,blockDates:[],blockWeekdays:[],colored:{},btnNow:!0},this.options=p.extend({type:"date"},s,e),e=this.options,k(this.el).attr("placeholder")==null&&k(this.el).attr("placeholder",e.format);break}case"time":{s={format:p.settings.timeFormat,keyboard:!0,autoCorrect:!0,start:null,end:null,btnNow:!0,noMinutes:!1},this.options=p.extend({type:"time"},s,e),e=this.options,k(this.el).attr("placeholder")==null&&k(this.el).attr("placeholder",e.format);break}case"datetime":{s={format:p.settings.dateFormat+"|"+p.settings.timeFormat,keyboard:!0,autoCorrect:!0,start:null,end:null,startTime:null,endTime:null,blockDates:[],blockWeekdays:[],colored:{},btnNow:!0,noMinutes:!1},this.options=p.extend({type:"datetime"},s,e),e=this.options,k(this.el).attr("placeholder")==null&&k(this.el).attr("placeholder",e.placeholder||e.format);break}case"list":case"combo":{s={items:[],selected:{},itemMap:null,match:"begins",filter:!0,compare:null,prefix:"",suffix:"",icon:null,iconStyle:"",url:null,method:null,postData:{},recId:null,recText:null,debounce:250,minLength:1,cacheMax:250,renderDrop:null,maxDropHeight:350,maxDropWidth:null,minDropWidth:null,markSearch:!1,align:"both",altRows:!0,openOnFocus:!1,hideSelected:!1,msgNoItems:"No matches",msgSearch:"Type to search...",onSearch:null,onRequest:null,onLoad:null,onError:null},typeof e.items=="function"&&(e._items_fun=e.items),e.items=p.normMenu.call(this,e.items,e),this.type==="list"&&(k(this.el).addClass("tsg-select"),!p.isPlainObject(e.selected)&&Array.isArray(e.items)&&e.items.forEach(l=>{l&&l.id===e.selected&&(e.selected=p.clone(l))})),e=p.extend({},s,e);let o=["is","begins","contains","ends"];o.includes(e.match)||console.log(`ERROR: invalid value "${e.match}" for option.match. It should be one of following: ${o.join(", ")}.`),this.options=e,p.isPlainObject(e.selected)||(e.selected={}),this.selected=e.selected,k(this.el).attr("autocapitalize","off").attr("autocomplete","off").attr("autocorrect","off").attr("spellcheck","false"),e.selected.text!=null&&k(this.el).val(e.selected.text);break}case"enum":{s={items:[],selected:[],itemMap:null,max:0,match:"begins",filter:!0,compare:null,url:null,method:null,postData:{},recId:null,recText:null,debounce:250,minLength:1,cacheMax:250,maxItemWidth:250,maxDropHeight:350,maxDropWidth:null,renderItem:null,renderDrop:null,style:"",openOnFocus:!1,markSearch:!1,align:"both",altRows:!0,hideSelected:!0,msgNoItems:"No matches",msgSearch:"Type to search...",onAdd:null,onNew:null,onRemove:null,onSearch:null,onClick:null,onRequest:null,onLoad:null,onError:null,onScroll:null,onMouseEnter:null,onMouseLeave:null},e=p.extend({},s,e,{suffix:""}),typeof e.items=="function"&&(e._items_fun=e.items);let o=["is","begins","contains","ends"];o.includes(e.match)||console.log(`ERROR: invalid value "${e.match}" for option.match. It should be one of following: ${o.join(", ")}.`),e.items=p.normMenu.call(this,e.items,e),e.selected=p.normMenu.call(this,e.selected,e),this.options=e,Array.isArray(e.selected)||(e.selected=[]),this.selected=e.selected;break}case"file":{s={selected:[],max:0,maxSize:0,maxFileSize:0,renderItem:null,maxItemWidth:250,maxDropHeight:350,maxDropWidth:null,readContent:!0,showErrors:!0,align:"both",altRows:!0,style:"",onClick:null,onAdd:null,onRemove:null,onMouseEnter:null,onMouseLeave:null},e=p.extend({},s,e),this.options=e,Array.isArray(e.selected)||(e.selected=[]),this.selected=e.selected,k(this.el).attr("placeholder")==null&&k(this.el).attr("placeholder",p.lang("Attach files by dragging and dropping or Click to Select"));break}default:{console.log(`ERROR: field type "${this.type}" is not supported.`);break}}let i=k(this.el);i.css("box-sizing","border-box"),i.addClass("TsField tsg-input").off(".TsField").on("change.TsField",o=>{this.change(o)}).on("click.TsField",o=>{this.click(o)}).on("focus.TsField",o=>{this.focus(o)}).on("blur.TsField",o=>{this.type!=="list"&&this.blur(o)}).on("keydown.TsField",o=>{this.keyDown(o)}).on("keyup.TsField",o=>{this.keyUp(o)}),this.addPrefix(),this.addSuffix(),this.addSearch(),this.addMultiSearch(),this.change(new Event("change"))}get(){let e;return["list","enum","file"].indexOf(this.type)!==-1?e=this.selected:e=k(this.el).val(),e}set(e,s){if(["list","enum","file"].indexOf(this.type)!==-1){let t=re.get(this.el.id+"_menu");if(t?.hide(),this.type!=="list"&&s)Array.isArray(this.selected)||(this.selected=[]),this.selected.push(e),t&&(t.options.selected=this.selected),k(this.el).trigger("input").trigger("change");else{e==null&&(e=[]);let i=this.type==="enum"&&!Array.isArray(e)?[e]:e;this.selected=i,k(this.el).trigger("input").trigger("change")}this.refresh()}else k(this.el).val(e)}setIndex(e,s){if(["list","enum"].indexOf(this.type)!==-1){let t=re.get(this.el.id+"_menu");t?.hide();let i=this.options.items;if(i&&i[e])return this.type=="list"&&(this.selected=i[e]),this.type=="enum"&&(s||(this.selected=[]),this.selected.push(i[e])),t&&(t.options.selected=this.selected),k(this.el).trigger("input").trigger("change"),this.refresh(),!0}return!1}refresh(){let e=this.options,s=Date.now(),t=getComputedStyle(this.el);if(this.type=="color"){let o=this.el.value;o.substr(0,1)!="#"&&o.substr(0,3)!="rgb"&&(o="#"+o),k(this.helpers.suffix).find(":scope > div").css("background-color",o)}if(this.type=="list"){if(this.helpers.prefix&&k(this.helpers.prefix).hide(),!this.helpers.search)return Date.now()-s;this.selected==null&&e.icon?(e.prefix=`
360
+ <span class="tsg-icon ${e.icon} "style="cursor: pointer; font-size: 14px;
361
+ display: inline-block; margin-top: -1px; color: #7F98AD; ${e.iconStyle}">
362
+ </span>`,this.addPrefix()):(e.prefix="",this.addPrefix());let o=k(this.helpers.search_focus),l=k(o.get(0).previousElementSibling);if(o.css({outline:"none"}),o.val()==="")if(o.css("opacity",0),l.css("opacity",0),this.selected?.id!=null){let a=this.selected.text,r=this.findItemIndex(e.items,this.selected.id);a!=null&&k(this.el).val(p.lang(a)).data({selected:a,selectedIndex:r[0]})}else this.el.value="",k(this.el).removeData("selected selectedIndex");else o.css("opacity",1),l.css("opacity",1),k(this.el).val(""),setTimeout(()=>{this.helpers.prefix&&k(this.helpers.prefix).hide(),e.icon?(o.css("margin-left","17px"),k(this.helpers.search).find(".tsg-icon-search").addClass("show-search")):(o.css("margin-left","0px"),k(this.helpers.search).find(".tsg-icon-search").removeClass("show-search"))},1);k(this.el).prop("readOnly")||k(this.el).prop("disabled")?setTimeout(()=>{this.helpers.prefix&&k(this.helpers.prefix).css("opacity","0.6"),this.helpers.suffix&&k(this.helpers.suffix).css("opacity","0.6")},1):setTimeout(()=>{this.helpers.prefix&&k(this.helpers.prefix).css("opacity","1"),this.helpers.suffix&&k(this.helpers.suffix).css("opacity","1")},1)}let i=this.helpers.multi;if(["enum","file"].includes(this.type)&&i){let o="";Array.isArray(this.selected)&&this.selected.forEach((a,r)=>{a!=null&&(o+=`
363
+ <div class="li-item" index="${r}" style="max-width: ${parseInt(e.maxItemWidth)}px; ${a.style?a.style:""}">
364
+ ${typeof e.renderItem=="function"?e.renderItem(a,r,`<div class="tsg-list-remove" index="${r}">&#160;&#160;</div>`):`
365
+ ${a.icon?`<span class="tsg-icon ${a.icon}"></span>`:""}
366
+ <div class="tsg-list-remove" index="${r}">&#160;&#160;</div>
367
+ ${(this.type==="enum"?a.text:a.name)??a.id??a}
368
+ ${a.size?`<span class="file-size"> - ${p.formatSize(a.size)}</span>`:""}
369
+ `}
370
+ </div>`)});let l=i.find(".tsg-multi-items");if(e.style&&i.attr("style",i.attr("style")+";"+e.style),k(this.el).css("z-index","-1"),k(this.el).prop("readOnly")||k(this.el).prop("disabled")?setTimeout(()=>{i.get(0).scrollTop=0,i.addClass("tsg-readonly").find(".li-item").css("opacity","0.9"),i.find(".li-item").parent().find(".li-search").hide().find("input").prop("readOnly",!0).closest(".tsg-multi-items").find(".tsg-list-remove").hide()},1):setTimeout(()=>{i.removeClass("tsg-readonly").find(".li-item").css("opacity","1"),i.find(".li-item").parent().find(".li-search").show().find("input").prop("readOnly",!1).closest(".tsg-multi-items").find(".tsg-list-remove").show()},1),this.selected?.length>0&&k(this.el).attr("placeholder",""),i.find(".tsg-enum-placeholder").remove(),l.find(".li-item").remove(),o!=="")l.prepend(o);else if(k(this.el).attr("placeholder")!=null&&i.find("input").val()===""){let a=p.stripSpaces(`
371
+ padding-top: ${t["padding-top"]};
372
+ padding-left: ${t["padding-left"]};
373
+ box-sizing: ${t["box-sizing"]};
374
+ line-height: ${t["line-height"]};
375
+ font-size: ${t["font-size"]};
376
+ font-family: ${t["font-family"]};
377
+ `);i.prepend(`<div class="tsg-enum-placeholder" style="${a}">${k(this.el).attr("placeholder")}</div>`)}i.off(".w2item").on("scroll.w2item",a=>{let r=this.trigger("scroll",{target:this.el,originalEvent:a});r.isCancelled!==!0&&(Ie.hide(this.el.id+"_preview"),r.finish())}).find(".li-item").on("click.w2item",a=>{let r=a,c=k(r.target).closest(".li-item"),d=c.attr("index"),u=d!=null?this.selected[Number(d)]:void 0;if(k(c).hasClass("li-search"))return;r.stopPropagation();let h;if(k(r.target).hasClass("tsg-list-remove")){if(k(this.el).prop("readOnly")||k(this.el).prop("disabled")||(h=this.trigger("remove",{target:this.el,originalEvent:r,item:u}),h.isCancelled===!0))return;let f=new DataTransfer,m=k(r.target).closest(".tsg-list").find("input.file-input").get(0);m&&(Array.from(m.files??[]).filter(y=>y.name!=u.name).forEach(y=>f.items.add(y)),m.files=f.files),d!=null&&this.selected.splice(Number(d),1),k(this.el).trigger("input").trigger("change"),k(r.target).remove()}else{if(h=this.trigger("click",{target:this.el,originalEvent:r.originalEvent,item:u}),h.isCancelled===!0)return;let f=u.tooltip;if(this.type==="file"&&(/image/i.test(u.type)&&(f=`
378
+ <div class="tsg-file-preview">
379
+ <img src="${u.content?"data:"+u.type+";base64,"+u.content:""}"
380
+ style="max-width: 300px">
381
+ </div>`),f+=`
382
+ <div class="tsg-file-info">
383
+ <div class="file-caption">${p.lang("Name")}:</div>
384
+ <div class="file-value">${u.name}</div>
385
+ <div class="file-caption">${p.lang("Size")}:</div>
386
+ <div class="file-value">${p.formatSize(u.size)}</div>
387
+ <div class="file-caption">${p.lang("Type")}:</div>
388
+ <div class="file-value file-type">${u.type}</div>
389
+ <div class="file-caption">${p.lang("Modified")}:</div>
390
+ <div class="file-value">${p.date(u.modified)}</div>
391
+ </div>`),f){let m=this.el.id+"_preview";Ie.show({name:m,anchor:c.get(0),html:f,hideOn:["doc-click"],class:""}).show(y=>{k(`#w2overlay-${m} img`).on("load",function(b){let g=this.clientWidth,v=this.clientHeight;g<300&&v<300||(g>=v&&g>300&&k(this).css("width","300px"),g<v&&v>300&&k(this).css("height","300px"))}).on("error",function(b){this.style.display="none"})})}}h.finish()}).on("mouseenter.w2item",a=>{let r=a,c=k(r.target).closest(".li-item");if(k(c).hasClass("li-search"))return;let d=k(r.target).attr("index"),u=d!=null?this.selected[Number(d)]:void 0,h=this.trigger("mouseEnter",{target:this.el,originalEvent:r,item:u});h.isCancelled!==!0&&h.finish()}).on("mouseleave.w2item",a=>{let r=a,c=k(r.target).closest(".li-item");if(k(c).hasClass("li-search"))return;let d=k(r.target).attr("index"),u=d!=null?this.selected[Number(d)]:void 0,h=this.trigger("mouseLeave",{target:this.el,originalEvent:r,item:u});h.isCancelled!==!0&&h.finish()}),this.type==="enum"?this.helpers.multi?.find("input")?.css({width:"15px"}):this.helpers.multi?.find(".li-search").hide(),this.resize()}return Date.now()-s}resize(){let e=this.el.clientWidth,s=getComputedStyle(this.el),t=this.helpers.search,i=this.helpers.multi,o=this.helpers.suffix,l=this.helpers.prefix;t&&k(t).css("width",e),i&&k(i).css("width",e-parseInt(s["margin-left"],10)-parseInt(s["margin-right"],10)),o&&this.addSuffix(),l&&this.addPrefix();let a=this.helpers.multi;if(["enum","file"].includes(this.type)&&a){k(this.el).css("height","");let r=k(a).find(":scope div.tsg-multi-items").get(0).clientHeight+5;r<20&&(r=20),this.tmp["max-height"]!=null&&r>this.tmp["max-height"]&&(r=this.tmp["max-height"]??r),this.tmp["min-height"]!=null&&r<this.tmp["min-height"]&&(r=this.tmp["min-height"]??r);let c=p.getSize(this.el,"height")-2;c>r&&(r=c),k(a).css({height:r+"px",overflow:r==this.tmp["max-height"]?"auto":"hidden"}),k(a).css("height",r+"px"),k(this.el).css({height:r+"px"})}this.tmp.current_width=e}reset(){this.tmp!=null&&(k(this.el).css("height",""),["padding-left","padding-right","background-color","border-color"].forEach(e=>{this.tmp&&this.tmp["old-"+e]!=null&&(k(this.el).css(e,this.tmp["old-"+e]),delete this.tmp["old-"+e])}),clearInterval(this.tmp.sizeTimer)),k(this.el).val(this.clean(k(this.el).val())).removeClass("TsField tsg-input").removeData("selected selectedIndex").off(".TsField"),Object.keys(this.helpers).forEach(e=>{k(this.helpers[e]).remove()}),this.helpers={},delete this.el._w2field}clean(e){if(typeof e=="number")return e;let s=this.options;if(e=String(e).trim(),["int","float","money","currency","percent"].includes(this.type)){if(typeof e=="string"){s.autoFormat&&(["money","currency"].includes(this.type)&&(e=String(e).replace(s.moneyRE,"")),this.type==="percent"&&(e=String(e).replace(s.percentRE,"")),["int","float"].includes(this.type)&&(e=String(e).replace(s.numberRE,"")));let t=s.groupSymbol.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),i=s.decimalSymbol.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");e=e.replace(/\s+/g,"").replace(new RegExp(t,"g"),"").replace(new RegExp(i,"g"),".")}e!==""&&p.isFloat(e)?e=Number(e):e=""}return e}format(e){let s=this.options;if(s.autoFormat&&e!==""){switch(this.type){case"money":case"currency":e=p.formatNumber(e,s.currency.precision,!0),e!==""&&(e=s.currency.prefix+e+s.currency.suffix);break;case"percent":e=p.formatNumber(e,s.precision,!0),e!==""&&(e+="%");break;case"float":e=p.formatNumber(e,s.precision,!0);break;case"int":e=p.formatNumber(e,0,!0);break}let t=1e3.toLocaleString(p.settings.locale,{useGrouping:!0}).slice(1,2);t!==this.options.groupSymbol&&(e=e.replaceAll(t,this.options.groupSymbol))}return e}change(e){if(["int","float","money","currency","percent"].indexOf(this.type)!==-1){let s=k(this.el).val(),t=this.format(this.clean(k(this.el).val()));if(s!==""&&s!=t)return k(this.el).val(t),e.stopPropagation(),e.preventDefault(),!1}if(this.type==="color"){let s=k(this.el).val();if(s.substr(0,3).toLowerCase()!=="rgb"){s="#"+s;let i=k(this.el).val().length;i!==8&&i!==6&&i!==3&&(s="")}let t=k(this.el).get(0).nextElementSibling;k(t).find("div").css("background-color",s),k(this.el).hasClass("has-focus")&&this.updateOverlay()}if(["list","enum","file"].indexOf(this.type)!==-1&&this.refresh(),["date","time","datetime"].indexOf(this.type)!==-1){let s=parseInt(this.el.value);p.isInt(this.el.value)&&s>3e3&&(this.type==="time"&&(s=p.formatTime(new Date(s),this.options.format)),this.type==="date"&&(s=p.formatDate(new Date(s),this.options.format)),this.type==="datetime"&&(s=p.formatDateTime(new Date(s),this.options.format)),k(this.el).val(String(s)).trigger("input").trigger("change"))}}click(e){if(["list","combo","enum"].includes(this.type)){if(k(this.el).hasClass("has-focus")||this.focus(e),this.type=="list"||this.type=="combo"){if(!this.tmp.openedOnFocus){let s=this.el.id+"_menu";re.get(s)?.displayed?re.hide(s):this.updateOverlay()}delete this.tmp.openedOnFocus,this.type=="list"&&e.stopPropagation()}this.type=="enum"&&this.updateOverlay()}["date","time","datetime","color"].includes(this.type)&&this.updateOverlay()}focus(e){if(this.type=="list"&&document.activeElement==this.el){this.helpers.search_focus?.focus(),e.showMenu!==!1&&this.options.openOnFocus!==!1&&k(this.el).hasClass("has-focus")&&!this.tmp.overlay?.overlay?.displayed&&setTimeout(()=>{this.tmp.openedOnFocus=!0,this.updateOverlay()},0);return}if(["color","date","time","datetime"].indexOf(this.type)!==-1){if(k(this.el).prop("readOnly")||k(this.el).prop("disabled"))return;this.updateOverlay()}if(["list","combo","enum"].indexOf(this.type)!==-1){if(k(this.el).prop("readOnly")||k(this.el).prop("disabled")){k(this.el).addClass("has-focus");return}if(typeof this.options._items_fun=="function"&&(this.options.items=p.normMenu.call(this,this.options._items_fun,this.options)),this.helpers.search){let s=this.helpers.search_focus;s&&(s.value="",s.select())}if(this.type=="enum"){let s=k(this.el.previousElementSibling).find(".li-search input").get(0);document.activeElement!==s&&s.focus()}this.resize(),e.showMenu!==!1&&this.options.openOnFocus!==!1&&k(this.el).hasClass("has-focus")&&!this.tmp.overlay?.overlay?.displayed&&setTimeout(()=>{this.tmp.openedOnFocus=!0,this.updateOverlay()},0)}if(this.type=="file"){let s=k(this.el).get(0).previousElementSibling;k(s).addClass("has-focus")}k(this.el).addClass("has-focus")}blur(e){let s=k(this.el).val().trim();if(k(this.el).removeClass("has-focus"),["int","float","money","currency","percent"].includes(this.type)&&s!==""){let t=s,i="";if(!this.isStrValid(s))t="";else{let o=this.clean(s),l=this.options;l.min!=null&&o<l.min&&(t=l.min,i=`Should be >= ${l.min}`),l.max!=null&&o>l.max&&(t=l.max,i=`Should be <= ${l.max}`)}this.options.autoCorrect&&(k(this.el).val(t).trigger("input").trigger("change"),i&&(Ie.show({name:this.el.id+"_error",anchor:this.el,html:i}),setTimeout(()=>{Ie.hide(this.el.id+"_error")},3e3)))}if(["date","time","datetime"].includes(this.type)&&this.options.autoCorrect&&s!==""){let t=this.type=="date"?p.isDate:this.type=="time"?p.isTime:p.isDateTime;(!De.inRange(this.el.value,this.options)||!t.bind(p)(this.el.value,this.options.format))&&k(this.el).val("").trigger("input").trigger("change")}if(this.type==="enum"&&k(this.helpers.multi).find("input").val("").css("width","15px"),this.type=="file"){let t=this.el.previousElementSibling;k(t).removeClass("has-focus")}this.type==="list"&&(this.el.value=this.selected?.text??"")}keyDown(e,s){let t=this.options,i=e.keyCode||s&&s.keyCode,o=!1,l,a,r,c,d,u;if(["int","float","money","currency","percent","hex","bin","color","alphanumeric"].includes(this.type)&&!e.metaKey&&!e.ctrlKey&&!e.altKey&&!this.isStrValid(e.key??"1",!0)&&![9,8,13,27,37,38,39,40,46].includes(e.keyCode))return e.preventDefault(),e.stopPropagation?e.stopPropagation():e.cancelBubble=!0,!1;if(["int","float","money","currency","percent"].includes(this.type)){if(!t.keyboard||k(this.el).prop("readOnly")||k(this.el).prop("disabled"))return;switch(l=parseFloat(k(this.el).val().replace(t.moneyRE,""))||0,a=t.step,(e.ctrlKey||e.metaKey)&&(a=t.step*10),i){case 38:if(e.shiftKey)break;d=l+a<=t.max||t.max==null?Number((l+a).toFixed(12)):t.max,k(this.el).val(String(d)).trigger("input").trigger("change"),o=!0;break;case 40:if(e.shiftKey)break;d=l-a>=t.min||t.min==null?Number((l-a).toFixed(12)):t.min,k(this.el).val(String(d)).trigger("input").trigger("change"),o=!0;break}o&&(e.preventDefault(),this.moveCaret2end())}if(["date","datetime"].includes(this.type)){if(!t.keyboard||k(this.el).prop("readOnly")||k(this.el).prop("disabled"))return;let h=(this.type=="date"?p.isDate:p.isDateTime).bind(p),f=(this.type=="date"?p.formatDate:p.formatDateTime).bind(p);switch(r=1440*60*1e3,a=1,(e.ctrlKey||e.metaKey)&&(a=10),c=h(k(this.el).val(),t.format,!0),c||(c=new Date,r=0),i){case 38:if(e.shiftKey)break;a==10?c.setMonth(c.getMonth()+1):c.setTime(c.getTime()+r),u=f(c.getTime(),t.format),k(this.el).val(u).trigger("input").trigger("change"),o=!0;break;case 40:if(e.shiftKey)break;a==10?c.setMonth(c.getMonth()-1):c.setTime(c.getTime()-r),u=f(c.getTime(),t.format),k(this.el).val(u).trigger("input").trigger("change"),o=!0;break}o&&(e.preventDefault(),this.moveCaret2end(),this.updateOverlay())}if(this.type==="time"){if(!t.keyboard||k(this.el).prop("readOnly")||k(this.el).prop("disabled"))return;a=e.ctrlKey||e.metaKey?60:1,l=k(this.el).val();let h=De.str2min(l)||De.str2min(new Date().getHours()+":"+(new Date().getMinutes()-1));switch(i){case 38:if(e.shiftKey)break;h+=a,o=!0;break;case 40:if(e.shiftKey)break;h-=a,o=!0;break}o&&(e.preventDefault(),k(this.el).val(De.min2str(h)).trigger("input").trigger("change"),this.moveCaret2end())}if(["list","enum"].includes(this.type))switch(i){case 8:case 46:if(this.type=="list"){if(k(this.helpers.search_focus).val()==""){let f=this.trigger("remove",{target:this.el,originalEvent:e,item:this.selected});if(f.isCancelled===!0)return;this.selected=null,re.hide(this.el.id+"_menu"),k(this.el).val("").trigger("input").trigger("change"),f.finish()}}else if(k(this.helpers.multi).find("input").val()==""){let f=this.trigger("remove",{target:this.el,originalEvent:e,item:this.selected[this.selected.length-1]});if(f.isCancelled===!0)return;re.hide(this.el.id+"_menu"),this.selected.pop();let m=re.get(this.el.id+"_menu");m&&(m.options.selected=this.selected),this.refresh(),f.finish()}break;case 9:case 16:re.hide(this.el.id+"_menu");break;case 27:re.hide(this.el.id+"_menu"),this.refresh();break;default:}}keyUp(e){if(this.type=="list"){let s=k(this.helpers.search_focus);s.val()!==""?k(this.el).attr("placeholder",""):k(this.el).attr("placeholder",this.tmp.pholder),e.keyCode==13&&setTimeout(()=>{s.val(""),re.hide(this.el.id+"_menu"),this.refresh()},1),[38,40].includes(e.keyCode)&&!this.tmp.overlay?.overlay?.displayed&&this.updateOverlay(),this.refresh()}if(this.type=="combo"&&(![9,16,27].includes(e.keyCode)&&this.options.openOnFocus!==!0&&this.updateOverlay(),[38,40].includes(e.keyCode)&&!this.tmp.overlay?.overlay?.displayed&&this.updateOverlay()),this.type=="enum"){let s=this.helpers.multi?.find("input"),t=getComputedStyle(s?.get(0)),i=p.getStrWidth(s?.val(),`font-family: ${t["font-family"]}; font-size: ${t["font-size"]};`,void 0);s?.css({width:i+15+"px"}),this.resize(),[8,46,9,16,27].includes(e.keyCode)?this.tmp.overlay?.overlay?.displayed&&re.hide(this.el.id+"_menu"):this.updateOverlay()}}findItemIndex(e,s,t){let i=[];if(t||(t=[]),["list","combo","enum"].includes(this.type)&&this.options.url){let o=re.get(this.el.id+"_menu");o&&(e=o.options.items,this.options.items=e)}return e.forEach((o,l)=>{o.id===s&&(i=t.concat([l]),this.options.index=[l]),i.length==0&&o.items&&o.items.length>0&&(t.push(l),i=this.findItemIndex(o.items,s,t),t.pop())}),i}updateOverlay(e){let s=this.options,t;if(this.type==="color"){if(k(this.el).prop("readOnly")||k(this.el).prop("disabled"))return;ki.show(p.extend({name:this.el.id+"_color",anchor:this.el,transparent:s.transparent,advanced:s.advanced,color:this.el.value,liveUpdate:!0},this.options)).select(i=>{let o=i.detail.color;k(this.el).val(o).trigger("input").trigger("change")}).liveUpdate(i=>{let o=i.detail.color;k(this.helpers.suffix).find(":scope > div").css("background-color","#"+o)})}if(["list","combo","enum"].includes(this.type)){let i=this.el,o=this.el;if(this.type==="enum"&&(i=this.helpers.multi?.get(0)??this.el,o=k(i).find("input").get(0)??this.el),this.type==="list"){let l=this.selected;if(p.isPlainObject(l)&&Object.keys(l).length>0){let a=this.findItemIndex(s.items,l.id);a.length>0&&(s.index=a)}o=this.helpers.search_focus??this.el}k(this.el).hasClass("has-focus")&&!this.el.readOnly&&!this.el.disabled&&(t=p.extend({},s,{name:this.el.id+"_menu",anchor:o,selected:this.selected,search:!1,render:s.renderDrop,anchorClass:"",offsetY:5,maxHeight:s.maxDropHeight,maxWidth:s.maxDropWidth,minWidth:s.minDropWidth}),this.tmp.overlay=re.show(t).select(l=>{if(["list","combo"].includes(this.type))this.selected=l.detail.item,k(o).val(""),k(this.el).val(this.selected.text).trigger("input").trigger("change"),this.focus({showMenu:!1});else{let a=this.selected,r=l.detail?.item;if(r){let c=this.trigger("add",{target:this.el,item:r,originalEvent:l});if(c.isCancelled===!0)return;a.length>=s.max&&s.max>0&&a.pop(),delete r.hidden,a.push(r),k(this.el).trigger("input").trigger("change"),k(this.helpers.multi).find("input").val("");let d=re.get(this.el.id+"_menu");d&&(d.options.selected=this.selected),c.finish()}}}))}if(["date","time","datetime"].includes(this.type)){if(k(this.el).prop("readOnly")||k(this.el).prop("disabled"))return;De.show(p.extend({name:this.el.id+"_date",anchor:this.el,value:this.el.value},this.options)).select(i=>{let o=i.detail.date;o!=null&&k(this.el).val(o).trigger("input").trigger("change")})}}isStrValid(e,s){let t=!0;switch(this.type){case"int":s&&["-",this.options.groupSymbol].includes(e)?t=!0:t=p.isInt(e.replace(this.options.numberRE,""));break;case"percent":e=e.replace(/%/g,"");case"float":s&&["-","",this.options.decimalSymbol,this.options.groupSymbol].includes(e)?t=!0:t=p.isFloat(e.replace(this.options.numberRE,""));break;case"money":case"currency":s&&["-",this.options.decimalSymbol,this.options.groupSymbol,this.options.currency.prefix,this.options.currency.suffix].includes(e)?t=!0:t=p.isFloat(e.replace(this.options.moneyRE,""));break;case"bin":t=p.isBin(e);break;case"color":case"hex":t=p.isHex(e);break;case"alphanumeric":t=p.isAlphaNumeric(e);break}return t}addPrefix(){if(!this.options.prefix)return;let e=getComputedStyle(this.el);this.tmp["old-padding-left"]==null&&(this.tmp["old-padding-left"]=e["padding-left"]),this.helpers.prefix&&k(this.helpers.prefix).remove(),k(this.el).before(`<div class="tsg-field-helper">${this.options.prefix}</div>`);let s=k(this.el).get(0).previousElementSibling;k(s).css({color:e.color,"font-family":e["font-family"],"font-size":e["font-size"],height:this.el.clientHeight+"px","padding-top":parseInt(e["padding-top"],10)+1+"px","padding-bottom":parseInt(e["padding-bottom"],10)-1+"px","padding-left":this.tmp["old-padding-left"]??"","padding-right":0,"margin-top":parseInt(e["margin-top"],10)+"px","margin-bottom":parseInt(e["margin-bottom"],10)+"px","margin-left":e["margin-left"],"margin-right":0,"z-index":1,display:"inline-flex","align-items":"center"}),k(this.el).css("padding-left",s.clientWidth+"px !important"),this.helpers.prefix=s}addSuffix(){if(!this.options.suffix&&!this.options.arrows)return;let e=getComputedStyle(this.el);this.tmp["old-padding-right"]==null&&(this.tmp["old-padding-right"]=e["padding-right"]);let s=parseInt(e["padding-right"]||"0");if(this.options.arrows){this.helpers.arrows&&k(this.helpers.arrows).remove(),k(this.el).after('<div class="tsg-field-helper" style="border: 1px solid transparent">&#160; <div class="tsg-field-up" type="up"> <div class="arrow-up" type="up"></div> </div> <div class="tsg-field-down" type="down"> <div class="arrow-down" type="down"></div> </div></div>');let t=k(this.el).get(0).nextElementSibling,i=k(t);i.css({color:e.color,"font-family":e["font-family"],"font-size":e["font-size"],height:this.el.clientHeight+"px",padding:0,"margin-top":parseInt(e["margin-top"],10)+1+"px","margin-bottom":0,"border-left":"1px solid silver",width:"16px",transform:"translateX(-100%)"}),i.on("mousedown",o=>{let l=o;k(l.target).hasClass("arrow-up")&&this.keyDown(l,{keyCode:38}),k(l.target).hasClass("arrow-down")&&this.keyDown(l,{keyCode:40})}),s+=t.clientWidth,k(this.el).css("padding-right",s+"px !important"),this.helpers.arrows=t}if(this.options.suffix!==""){this.helpers.suffix&&k(this.helpers.suffix).remove(),k(this.el).after(`<div class="tsg-field-helper">${this.options.suffix}</div>`);let t=k(this.el).get(0).nextElementSibling;k(t).css({color:e.color,"font-family":e["font-family"],"font-size":e["font-size"],height:this.el.clientHeight+"px","padding-top":e["padding-top"],"padding-bottom":e["padding-bottom"],"padding-left":0,"padding-right":e["padding-right"],"margin-top":parseInt(e["margin-top"],10)+2+"px","margin-bottom":parseInt(e["margin-bottom"],10)+1+"px",transform:"translateX(-100%)"}),k(this.el).css("padding-right",t.clientWidth+"px !important"),this.helpers.suffix=t}}addSearch(){if(this.type!=="list")return;this.helpers.search&&k(this.helpers.search).remove();let e=parseInt(k(this.el).attr("tabIndex"));!isNaN(e)&&e!==-1&&(this.tmp["old-tabIndex"]=e),this.tmp["old-tabIndex"]&&(e=this.tmp["old-tabIndex"]),(e==null||isNaN(e))&&(e=0);let s="";k(this.el).attr("id")!=null&&(s='id="'+k(this.el).attr("id")+'_search"');let t=`
392
+ <div class="tsg-field-helper">
393
+ <span class="tsg-icon tsg-icon-search"></span>
394
+ <input ${s} type="text" tabIndex="${e}" ${k(this.el).prop("readOnly")?"readonly":""}
395
+ autocapitalize="off" autocomplete="off" autocorrect="off" spellcheck="false"/>
396
+ </div>`;k(this.el).attr("tabindex",String(-1)).before(t);let i=k(this.el).get(0).previousElementSibling;this.helpers.search=i,this.helpers.search_focus=k(i).find("input").get(0);let o=getComputedStyle(this.el),l=k(i);l.css({width:this.el.clientWidth+"px","margin-top":o["margin-top"],"margin-left":o["margin-left"],"margin-bottom":o["margin-bottom"],"margin-right":o["margin-right"]}),l.find("input").css({cursor:"default",width:"100%",opacity:1,padding:o.padding,margin:o.margin,border:"1px solid transparent","background-color":"transparent"}),k(i).find("input").off(".tsg-helper").on("focus.tsg-helper",a=>{let r=a;k(r.target).val(""),this.tmp.pholder=k(this.el).attr("placeholder")??"",this.focus(r),r.stopPropagation()}).on("blur.tsg-helper",a=>{let r=a;k(r.target).val(""),this.tmp.pholder!=null&&k(this.el).attr("placeholder",this.tmp.pholder),this.blur(r),r.stopPropagation()}).on("keydown.tsg-helper",a=>{this.keyDown(a)}).on("keyup.tsg-helper",a=>{this.keyUp(a)}),k(i).off(".tsg-helper").on("click.tsg-helper",a=>{k(i).find("input").get(0).focus()})}addMultiSearch(){if(!["enum","file"].includes(this.type))return;k(this.helpers.multi).remove();let e="",s=getComputedStyle(this.el),t=p.stripSpaces(`
397
+ margin-top: 0px;
398
+ margin-bottom: 0px;
399
+ margin-left: ${s["margin-left"]};
400
+ margin-right: ${s["margin-right"]};
401
+ width: ${p.getSize(this.el,"width")-parseInt(s["margin-left"],10)-parseInt(s["margin-right"],10)}px;
402
+ `);if(this.tmp["min-height"]==null){let a=this.tmp["min-height"]=parseInt((s["min-height"]!="none"?s["min-height"]:"0")||"0"),r=parseInt(s.height);this.tmp["min-height"]=Math.max(a,r)}this.tmp["max-height"]==null&&s["max-height"]!="none"&&(this.tmp["max-height"]=parseInt(s["max-height"]));let i="";k(this.el).attr("id")!=null&&(i=`id="${k(this.el).attr("id")}_search"`);let o=parseInt(k(this.el).attr("tabIndex"));!isNaN(o)&&o!==-1&&(this.tmp["old-tabIndex"]=o),this.tmp["old-tabIndex"]&&(o=this.tmp["old-tabIndex"]),(o==null||isNaN(o))&&(o=0),this.type==="enum"&&(e=`
403
+ <div class="tsg-field-helper tsg-list" style="${t}">
404
+ <div class="tsg-multi-items">
405
+ <div class="li-search">
406
+ <input ${i} type="text" autocapitalize="off" autocomplete="off" autocorrect="off" spellcheck="false"
407
+ tabindex="${o}"
408
+ ${k(this.el).prop("readOnly")?"readonly":""}
409
+ ${k(this.el).prop("disabled")?"disabled":""}>
410
+ </div>
411
+ </div>
412
+ </div>`),this.type==="file"&&(e=`
413
+ <div class="tsg-field-helper tsg-list" style="${t}">
414
+ <div class="tsg-multi-file">
415
+ <input name="attachment" class="file-input" type="file" tabindex="-1"'
416
+ style="width: 100%; height: 100%; opacity: 0" title=""
417
+ ${this.options.max!==1?"multiple":""}
418
+ ${k(this.el).prop("readOnly")||k(this.el).prop("disabled")?"disabled":""}
419
+ ${k(this.el).attr("accept")?' accept="'+k(this.el).attr("accept")+'"':""}>
420
+ </div>
421
+ <div class="tsg-multi-items">
422
+ <div class="li-search" style="display: none">
423
+ <input ${i} type="text" autocapitalize="off" autocomplete="off" autocorrect="off" spellcheck="false"
424
+ tabindex="${o}"
425
+ ${k(this.el).prop("readOnly")?"readonly":""}
426
+ ${k(this.el).prop("disabled")?"disabled":""}>
427
+ </div>
428
+ </div>
429
+ </div>`),this.tmp["old-background-color"]=s["background-color"],this.tmp["old-border-color"]=s["border-color"],k(this.el).before(e).css({"border-color":"transparent","background-color":"transparent"});let l=k(this.el.previousElementSibling);this.helpers.multi=l,k(this.el).attr("tabindex",String(-1)),l.on("mousedown",a=>{k(a.target).addClass("has-focus")}).on("mouseup",a=>{k(a.target).removeClass("has-focus")}).on("click",a=>{this.focus(a),this.updateOverlay()}),l.find("input:not(.file-input)").on("click",a=>{this.click(a)}).on("focus",a=>{this.focus(a)}).on("blur",a=>{this.blur(a)}).on("keydown",a=>{this.keyDown(a)}).on("keyup",a=>{this.keyUp(a)}),this.type==="file"&&l.find("input.file-input").off(".drag").on("click.drag",a=>{let r=a;r.stopPropagation(),!(k(this.el).prop("readOnly")||k(this.el).prop("disabled"))&&this.focus(r)}).on("dragenter.drag",a=>{k(this.el).prop("readOnly")||k(this.el).prop("disabled")||l.addClass("tsg-file-dragover")}).on("dragleave.drag",a=>{k(this.el).prop("readOnly")||k(this.el).prop("disabled")||l.removeClass("tsg-file-dragover")}).on("drop.drag",a=>{let r=a;if(k(this.el).prop("readOnly")||k(this.el).prop("disabled"))return;l.removeClass("tsg-file-dragover"),Array.from(r.dataTransfer?.files??[]).forEach(d=>{this.addFile(d)}),this.focus(r),r.preventDefault(),r.stopPropagation()}).on("dragover.drag",a=>{let r=a;r.preventDefault(),r.stopPropagation()}).on("change.drag",a=>{let r=a.target;r.files!=null&&Array.from(r.files).forEach(c=>{this.addFile(c)}),this.focus(a)}),this.refresh()}addFile(e){let s=this.options,t=this.selected,i={name:e.name,type:e.type,modified:new Date(e.lastModified),size:e.size,content:null,file:e},o=0,l=0,a=[];Array.isArray(t)&&t.forEach(c=>{c.name==e.name&&c.size==e.size&&a.push(p.lang('The file "${name}" (${size}) is already added.',{name:e.name,size:String(p.formatSize(e.size))})),o+=c.size,l++}),s.maxFileSize!==0&&i.size>s.maxFileSize&&a.push(p.lang("Maximum file size is ${size}",{size:String(p.formatSize(s.maxFileSize))})),s.maxSize!==0&&o+i.size>s.maxSize&&a.push(p.lang("Maximum total size is ${size}",{size:String(p.formatSize(s.maxSize))})),s.max!==0&&l>=s.max&&a.push(p.lang("Maximum number of files is ${count}",{count:s.max}));let r=this.trigger("add",{target:this.el,file:i,total:l,totalSize:o,errors:a});if(r.isCancelled!==!0){if(a.length>0){s.showErrors&&Ie.show({anchor:this.el,html:"Errors: "+a.join("<br>"),hideOn:["input","doc-click"]}),console.log("ERRORS (while adding files): ",a);return}if(t.push(i),typeof FileReader<"u"&&s.readContent===!0){let c=new FileReader;c.onload=d=>{let u=d.target?.result??"",h=u.indexOf(",");i.content=u.substr(h+1),this.refresh(),k(this.el).trigger("input").trigger("change"),r.finish()},c.readAsDataURL(e)}else this.refresh(),k(this.el).trigger("input").trigger("change"),r.finish()}}moveCaret2end(){setTimeout(()=>{this.el.setSelectionRange(this.el.value.length,this.el.value.length)},0)}};var ae=j,at=V;function Hs(n,e,s,t,i){let o=n;if(n.last.inEditMode===!0){if(i&&i.keyCode==13){let{index:_,column:C,value:D}=n.last._edit;n.editChange({type:"custom",value:D},_,C,i),n.editDone(_,C,i)}else{let _=ae(n.box).find("div.tsg-edit-box .tsg-input");_.length>0&&(_.get(0).tagName=="DIV"?(_.text(_.text()+t),p.setCursorPosition(_.get(0),_.text().length)):(_.val(_.val()+t),p.setCursorPosition(_.get(0),_.val().length)))}return}let l=n.get(e,!0);if(l==null)return;let a=n.getCellEditable(l,s);if(!a||["checkbox","check"].includes(a.type))return;let r=n.records[l],c=n.columns[s],d=c.frozen===!0?"_f":"_";if(["enum","file"].indexOf(a.type)!=-1){console.log('ERROR: input types "enum" and "file" are not supported in inline editing.');return}let u=n.trigger("editField",{target:n.name,recid:e,column:s,value:t,index:l,originalEvent:i});if(u.isCancelled===!0)return;t=u.detail.value,n.last.inEditMode=!0,n.last.editColumn=s,n.last._edit={value:t,index:l,column:s,recid:e},n.selectNone(!0),n.select({recid:e,column:s});let h=ae(n.box).find("#grid_"+n.name+d+"rec_"+p.escapeId(e)),f=h.find('[col="'+s+'"] > div');n.last._edit.tr=h,n.last._edit.div=f,ae(n.box).find("div.tsg-edit-box").remove(),n.selectType!="row"&&(ae(n.box).find("#grid_"+n.name+d+"selection").attr("id","grid_"+n.name+"_editable").removeClass("tsg-selection").addClass("tsg-edit-box").prepend('<div style="position: absolute; top: 0px; bottom: 0px; left: 0px; right: 0px;"></div>').find(".tsg-selection-resizer").remove(),f=ae(n.box).find("#grid_"+n.name+"_editable > div:first-child")),a.attr=a.attr??"",a.text=a.text??"",a.style=a.style??"",a.items=a.items??[];let m=r.TsUi?.changes?.[c.field]!=null?p.stripTags(r.TsUi.changes[c.field]):p.stripTags(o.parseField(r,c.field));m==null&&(m="");let y=typeof m!="object"?m:"";u.detail.prevValue!=null&&(y=u.detail.prevValue),t!=null&&(m=t);let x=c.style!=null?c.style+";":"";if(typeof c.render=="string"){let _=c.render.replace("|",":").split(":");["number","int","float","money","currency","percent","size"].includes(_[0]??"")&&(x+="text-align: right;")}a.items.length>0&&!p.isPlainObject(a.items[0])&&(a.items=p.normMenu(a.items,a));let b,g=["date","time","datetime","color","list","combo"],v=getComputedStyle(h.find('[col="'+s+'"] > div').get(0)),w=`font-family: ${v.getPropertyValue("font-family")}; font-size: ${v.getPropertyValue("font-size")};`;if(a.type==="div")f.addClass("tsg-editable").html(p.stripSpaces(`<div id="grid_${n.name}_edit_${e}_${s}" class="tsg-input tsg-focus"
430
+ contenteditable autocorrect="off" autocomplete="off" spellcheck="false"
431
+ style="${w+x+a.style}"
432
+ field="${c.field}" recid="${e}" column="${s}" ${a.attr}>
433
+ </div>${a.text}`)),b=f.find("div.tsg-input").get(0),b.innerText=typeof m!="object"?m:"",t!=null?p.setCursorPosition(b,b.innerText.length):p.setCursorPosition(b,0,b.innerText.length);else{f.addClass("tsg-editable").html(p.stripSpaces(`<input id="grid_${n.name}_edit_${e}_${s}" class="tsg-input"
434
+ autocorrect="off" autocomplete="off" spellcheck="false" type="text"
435
+ style="${w+x+a.style}"
436
+ field="${c.field}" recid="${e}" column="${s}" ${a.attr}>${a.text}`)),b=f.find("input").get(0),a.type=="number"&&(m=p.formatNumber(m)),a.type=="date"&&(m=p.formatDate(p.isDate(m,a.format,!0)||new Date,a.format)),b.value=typeof m!="object"?m:"";let _=C=>{let D=n.last._edit?.escKey,O=!1,I=ae(b).data("tooltipName");I&&at.get(I[0])?.selected!=null&&(O=!0),n.last.inEditMode&&!D&&g.includes(a.type)&&(C.detail.overlay.anchor?.id==n.last._edit?.input?.id||a.type=="list")&&(n.editChange(),n.editDone(void 0,void 0,{keyCode:O?13:0}))};new ue(p.extend({},a,{el:b,selected:m,onSelect:_,onHide:_})),t==null&&b&&b.select()}Object.assign(n.last._edit,{input:b,edit:a}),ae(b).off(".tsg-editable").on("blur.tsg-editable",_=>{if(n.last.inEditMode){let C=n.last._edit?.edit?.type,D=ae(b).data("tooltipName"),O=_.target;if(D&&g.includes(C)||O?._keepOpen===!0){delete O._keepOpen;return}n.editChange(b,l,s,_),n.editDone()}}).on("mousedown.tsg-editable",_=>{_.stopPropagation()}).on("click.tsg-editable",_=>{T.call(b,_)}).on("paste.tsg-editable",_=>{_.preventDefault();let C=_.clipboardData.getData("text/plain");document.execCommand("insertHTML",!1,C)}).on("keyup.tsg-editable",_=>{T.call(b,_)}).on("keydown.tsg-editable",_=>{let C=_;switch(C.keyCode){case 8:a.type=="list"&&!b._w2field&&C.preventDefault();break;case 9:case 13:C.preventDefault();break;case 27:let D=ae(b).data("tooltipName");if(D&&D.length>0){n.last._edit&&(n.last._edit.escKey=!0),at.hide(D[0]),C.preventDefault();return}C.stopPropagation();break}setTimeout(()=>{switch(C.keyCode){case 9:{let D=C.shiftKey?o.prevCell(l,s,!0):o.nextCell(l,s,!0);if(D!=null){let O=o.records[D.index].recid;n.editChange(b,l,s,_),n.editDone(l,s,_),o.selectType!="row"?(o.selectNone(!0),o.select({recid:O,column:D.colIndex})):o.editField(O,D.colIndex,null,_),_.preventDefault&&_.preventDefault()}break}case 13:{let D=!1,O=ae(b).data("tooltipName");O&&at.get(O[0]).selected!=null&&(D=!0),(!O||!D)&&b._keepOpen!==!0?(n.editChange(b,l,s,_),n.editDone(l,s,_)):delete b._keepOpen;break}case 27:{n.last._edit&&(n.last._edit.escKey=!1);let D=o.parseField(r,c.field);r.TsUi?.changes?.[c.field]!=null&&(D=r.TsUi.changes[c.field]),b._prevValue!=null&&(D=b._prevValue),b.tagName=="DIV"?b.innerText=D??"":b.value=D??"",n.editDone(l,s,_),setTimeout(()=>{o.select({recid:e,column:s})},1);break}}T(b)},1)}),b&&(b._prevValue=y),a.type!="list"&&setTimeout(()=>{n.last.inEditMode&&b&&(b.focus(),clearTimeout(n.last.kbd_timer??void 0),b.resize=T,T(b))},50),u.finish({input:b});return;function T(_){try{let C=getComputedStyle(_),D=_.tagName.toUpperCase()=="DIV"?_.innerText:_.value,O=ae(o.box).find("#grid_"+o.name+"_editable").get(0),I=`font-family: ${C.getPropertyValue("font-family")}; font-size: ${C.getPropertyValue("font-size")}; white-space: no-wrap;`,R=p.getStrWidth(D,I);R+20>O.clientWidth&&ae(O).css("width",R+20+"px")}catch{}}}function Ns(n,e,s,t,i){e=e??n.last._edit?.input,s=s??n.last._edit?.index,t=t??n.last._edit?.column,i=i??{};let o=s<0;s=s<0?-s-1:s;let a=(o?n.summary:n.records)[s],r=n.columns[t],c=e?.tagName=="DIV"?e.innerText:e.value,d=e._w2field;d&&(d.type=="list"&&(c=d.selected),(c==null||Object.keys(c).length===0)&&(c=""),p.isPlainObject(c)||(c=d.clean(c))),e.type=="checkbox"&&(a.TsUi?.editable===!1&&(e.checked=!e.checked),c=e.checked);let u=n.parseField(a,r.field),h=a.TsUi?.changes&&a.TsUi.changes.hasOwnProperty(r.field)?a.TsUi.changes[r.field]:u,f={target:n.name,input:e,recid:a.recid,index:s,column:t,originalEvent:i,value:{new:c,previous:h,original:u}};i.target?._prevValue!=null&&(f.value.previous=i.target._prevValue);let m=0;for(;m<20;){if(m++,c=f.value.new,typeof c!="object"&&String(u)!=String(c)||typeof c=="object"&&c&&c.id!=u&&(typeof u!="object"||u==null||c.id!=u.id)){if(f=n.trigger("change",f),f.isCancelled!==!0){if(c!==f.detail.value.new)continue;(f.detail.value.new===""||f.detail.value.new==null)&&(h===""||h==null)||(a.TsUi=a.TsUi??{},a.TsUi.changes=a.TsUi.changes??{},a.TsUi.changes[r.field]=f.detail.value.new),f.finish()}}else if(f=n.trigger("restore",f),f.isCancelled!==!0){if(c!==f.detail.value.new)continue;a.TsUi?.changes&&(delete a.TsUi.changes[r.field],Object.keys(a.TsUi.changes).length===0&&delete a.TsUi.changes),f.finish()}break}}function Ps(n,e,s,t){if(e=e??n.last._edit?.index,s=s??n.last._edit?.column,t=t??{},n.advanceOnEdit&&t.keyCode==13){let r=t.shiftKey?n.prevRow(e,s,1)??e:n.nextRow(e,s,1)??e;setTimeout(()=>{n.selectType!="row"?(n.selectNone(!0),n.select({recid:n.records[r].recid,column:s})):n.editField(n.records[r].recid,s,null,t)},1)}let i=e<0,o=ae(n.last._edit?.tr).find('[col="'+s+'"]'),l=n.records[e],a=n.columns[s];n.last.inEditMode=!1,n.last._edit=null,i||(l.TsUi?.changes?.[a.field]!=null?o.addClass("tsg-changed"):o.removeClass("tsg-changed"),o.replace(n.getCellHTML(e,s,i))),ae(n.box).find("div.tsg-edit-box").remove(),n.updateToolbar(),setTimeout(()=>{let r=ae(n.box).find(`#grid_${n.name}_focus`).get(0);document.activeElement!==r&&!n.last.inEditMode&&r.focus()},10)}var J=j,js=ie,pe=V;function Us(n,e,s){let t=0;s===void 0?(s=e,e=n.searches.length):(typeof e=="string"&&(e=n.getSearch(e,!0)),e==null&&(e=n.searches.length)),Array.isArray(s)||(s=[s]);for(let i=0;i<s.length;i++)n.searches.splice(e,0,s[i]),e++,t++;return n.searchClose(),t}function Gs(n,...e){let s=0;for(let t=0;t<e.length;t++){let i=e[t];for(let o=n.searches.length-1;o>=0;o--)n.searches[o].field==i&&(n.searches.splice(o,1),s++)}return n.searchClose(),s}function Bs(n,e,s){if(e===void 0){let t=[];for(let i=0;i<n.searches.length;i++)t.push(n.searches[i].field);return t}for(let t=0;t<n.searches.length;t++)if(n.searches[t].field==e)return s===!0?t:n.searches[t];return null}function Qs(n,...e){let s=0;for(let t=0;t<e.length;t++){let i=e[t];for(let o=n.searches.length-1;o>=0;o--)n.searches[o].field==i&&(n.searches[o].hidden=!n.searches[o].hidden,s++)}return n.searchClose(),s}function Vs(n,...e){let s=0;for(let t=0;t<e.length;t++){let i=e[t];for(let o=n.searches.length-1;o>=0;o--)n.searches[o].field==i&&n.searches[o].hidden!==!1&&(n.searches[o].hidden=!1,s++)}return n.searchClose(),s}function qs(n,...e){let s=0;for(let t=0;t<e.length;t++){let i=e[t];for(let o=n.searches.length-1;o>=0;o--)n.searches[o].field==i&&n.searches[o].hidden!==!0&&(n.searches[o].hidden=!0,s++)}return n.searchClose(),s}function Ws(n,e){for(let s=0;s<n.searchData.length;s++)if(n.searchData[s].field==e)return n.searchData[s];return null}function Ys(n,e,s){let t=n.url?.get??n.url,i=[],o=n.last.multi,l=n.last.logic,a=n.last.field,r=n.last.search,c=!1,d=J(`#w2overlay-${n.name}-search-overlay`);s===""&&(s=null);for(let h=0;h<n.searches.length;h++){let f=n.searches[h];!f.hidden||f.value==null||(i.push({field:f.field,operator:f.operator||"is",type:f.type,value:f.value||""}),c=!0)}if(e===void 0&&d.length===0&&(n.multiSearch?(e=n.searchData,s=n.last.logic):(e=n.last.field,s=n.last.search)),e===void 0&&d.length!==0){n.focus(),l=d.find(`#grid_${n.name}_logic`).val(),r="";for(let h=0;h<n.searches.length;h++){let f=n.searches[h],m=d.find("#grid_"+n.name+"_operator_"+h).val(),y=d.find("#grid_"+n.name+"_field_"+h),x=d.find("#grid_"+n.name+"_field2_"+h),b=y.val(),g=x.val(),v=null,w=null;if(["int","float","money","currency","percent"].indexOf(f.type)!=-1){let T=y[0]._w2field,_=x[0]._w2field;T&&(b=T.clean(b)),_&&(g=_.clean(g))}if(["list","enum"].indexOf(f.type)!=-1||["in","not in"].indexOf(m)!=-1)if(b=y[0]._w2field.selected||{},Array.isArray(b)){v=[];for(let T=0;T<b.length;T++)v.push(p.isFloat(b[T].id)?parseFloat(b[T].id):String(b[T].id).toLowerCase()),delete b[T].hidden;Object.keys(b).length===0&&(b="")}else w=b.text||"",b=b.id||"";if(b!==""&&b!=null||g!=null&&g!==""){let T={field:f.field,type:f.type,operator:m};m=="between"?p.extend(T,{value:[b,g]}):m=="in"&&typeof b=="string"?p.extend(T,{value:b.split(",")}):m=="not in"&&typeof b=="string"?p.extend(T,{value:b.split(",")}):p.extend(T,{value:b}),v&&p.extend(T,{svalue:v}),w&&p.extend(T,{text:w});try{f.type=="date"&&m=="between"&&(T.value[0]=b,T.value[1]=g),f.type=="date"&&m=="is"&&(T.value=b)}catch{}i.push(T),o=!0}}}if(typeof e=="string"&&(s===void 0&&(s=e,e="all"),a=e,r=s,o=!1,l=c?"AND":"OR",s!=null))if(e.toLowerCase()=="all"){if(n.searches.length>0)for(let h=0;h<n.searches.length;h++){let f=n.searches[h];if(f.type=="text"||f.type=="alphanumeric"&&p.isAlphaNumeric(s)||f.type=="int"&&p.isInt(s)||f.type=="float"&&p.isFloat(s)||f.type=="percent"&&p.isFloat(s)||(f.type=="hex"||f.type=="color")&&p.isHex(s)||f.type=="currency"&&p.isMoney(s)||f.type=="money"&&p.isMoney(s)||f.type=="date"&&p.isDate(s)||f.type=="time"&&p.isTime(s)||f.type=="datetime"&&p.isDateTime(s)||f.type=="datetime"&&p.isDate(s)||f.type=="enum"&&p.isAlphaNumeric(s)||f.type=="list"&&p.isAlphaNumeric(s)){let m=n.defaultOperator[n.operatorsMap[f.type]],y={field:f.field,type:f.type,operator:f.operator!=null?f.operator:m,value:s};String(s).trim()!=""&&i.push(y)}if(["int","float","money","currency","percent"].indexOf(f.type)!=-1){let m=String(s).trim().split("-").map(y=>y.trim()).filter(y=>p.isFloat(y));if(m.length==2){let y={field:f.field,type:f.type,operator:"between",value:[m[0],m[1]]};i.push(y)}}if(["list","enum"].indexOf(f.type)!=-1){let m=[];f.options==null&&(f.options={}),Array.isArray(f.options.items)||(f.options.items=[]);for(let y=0;y<f.options.items;y++){let x=f.options.items[y];try{let b=new RegExp(s,"i");b.test(x)&&m.push(y),x.text&&b.test(x.text)&&m.push(x.id)}catch{}}if(m.length>0){let y={field:f.field,type:f.type,operator:f.operator!=null?f.operator:"in",value:m};i.push(y)}}}else for(let h=0;h<n.columns.length;h++){let f={field:n.columns[h].field,type:"text",operator:n.defaultOperator.text,value:s};i.push(f)}if(i.length==0){let h={field:"All",type:"text",operator:n.defaultOperator.text,value:s};i.push(h)}}else{let h=d.find("#grid_"+n.name+"_search_all"),f=n.getSearch(e);if(f==null&&(f={field:e,type:"text"}),f.field==e&&(n.last.label=f.label??""),s!==""){let m=n.defaultOperator[n.operatorsMap[f.type]],y=s;if(["date","time","datetime"].indexOf(f.type)!=-1&&(m="is"),["list","enum"].indexOf(f.type)!=-1){m="is";let b=h._w2field?.get();b&&Object.keys(b).length>0?y=b.id:y=""}if(f.type=="int"&&s!==""){if(m="is",String(s).indexOf("-")!=-1){let b=s.split("-");b.length==2&&(m="between",y=[parseInt(b[0]),parseInt(b[1])])}if(String(s).indexOf(",")!=-1){let b=s.split(",");m="in",y=[];for(let g=0;g<b.length;g++)y.push(b[g])}}f.operator!=null&&(m=f.operator);let x={field:f.field,type:f.type,operator:m,value:y};i.push(x)}}if(Array.isArray(e)){let h="AND";if(typeof s=="string"){let f=s.toUpperCase();(f==="OR"||f==="AND")&&(h=f)}r="",o=!0,l=h;for(let f=0;f<e.length;f++){let m=e[f];typeof m.value=="number"&&m.operator==null&&(m.operator=n.defaultOperator.number),typeof m.value=="string"&&m.operator==null&&(m.operator=n.defaultOperator.text),Array.isArray(m.value)&&m.operator==null&&(m.operator=n.defaultOperator.enum),p.isDate(m.value)&&m.operator==null&&(m.operator=n.defaultOperator.date),i.push(m)}}let u=n.trigger("search",{target:n.name,multi:e===void 0,searchField:e||"multi",searchValue:e?s:"multi",searchData:i,searchLogic:l});u.isCancelled!==!0&&(n.searchData=u.detail.searchData,n.last.field=a,n.last.search=r,n.last.multi=o,n.last.logic=u.detail.searchLogic,n.last.vscroll.scrollTop=0,n.last.vscroll.scrollLeft=0,n.last.selection.indexes=[],n.last.selection.columns={},n.searchClose(),t?(n.last.fetch.offset=0,n.reload()):(n.localSearch(),n.refresh()),u.finish())}function Xs(n,e={}){if(!n.box||n.searches.length===0)return;let s=n.trigger("searchOpen",{target:n.name});if(s.isCancelled===!0)return;let t=J(n.toolbar.box).find(".tsg-grid-search-input .tsg-search-drop");t.addClass("checked"),pe.show({name:n.name+"-search-overlay",anchor:J(n.box).find("#grid_"+n.name+"_search_all").get(0),position:"bottom|top",html:n.getSearchesHTML(),align:"left",arrowSize:12,class:"tsg-grid-search-advanced",hideOn:["doc-click"],...e?.overlay??{}}).then(i=>{n.initSearches(),n.last.search_opened=!0;let o=J(`#w2overlay-${n.name}-search-overlay`);o.data("gridName",n.name).off(".grid-search").on("click.grid-search",a=>{o.find("input, select").each(r=>{let c=J(r).data("tooltipName");c&&c.forEach(d=>{pe.hide(d)})}),console.log(a.target),J(a.target).hasClass("tsg-saved-searches")||pe.hide(n.name+"-search-suggest")}),p.bindEvents(o.find("select, input, button"),n);let l=J(`#w2overlay-${n.name}-search-overlay *[rel=search]`);l.length>0&&l[0].focus(),s.finish()}).hide(i=>{let o=n.trigger("searchClose",{target:n.name});o.isCancelled!==!0&&(t.removeClass("checked"),n.last.search_opened=!1,o.finish())})}function Ks(n){pe.hide(n.name+"-search-overlay")}function Js(n,e,s,t){let i=n.searches[e],o=n.searchData[s];if(o==null||i==null)return;let l=o.operator;l=="more"&&o.type=="date"&&(l="since"),l=="less"&&o.type=="date"&&(l="before");let a="",r=o.value;Array.isArray(o.value)?(o.value.forEach(c=>{a+=`<span class="value">${c.text||c}</span>`}),o.type=="date"&&(a="",o.value.forEach(c=>{a+=`<span class="value">${p.formatDate(c)}</span>`}))):o.type=="date"&&(r=p.formatDateTime(r)),pe.hide(n.name+"-search-props"),pe.show({name:n.name+"-search-props",anchor:t,class:"tsg-white",hideOn:"doc-click",html:`
437
+ <div class="tsg-grid-search-single">
438
+ <span class="field">${i.label??""}</span>
439
+ <span class="operator">${p.lang(l)}</span>
440
+ ${Array.isArray(o.value)?`${a}`:`<span class="value">${r}</span>`}
441
+ <div class="buttons">
442
+ <button id="remove" class="tsg-btn">${p.lang("Remove This Field")}</button>
443
+ </div>
444
+ </div>`}).then(c=>{J(c.detail.overlay.box).find("#remove").on("click",()=>{n.searchData.splice(s,1),n.reload(),n.localSearch(),pe.hide(n.name+"-search-props")})})}function Zs(n,e,s,t){if(clearTimeout(n.last.kbd_timer??void 0),clearTimeout(n.last.overlay_timer),n.searchShowFields(!0),t==null&&n.searchClose(),s===!0||t!=null&&J(`#w2overlay-${n.name}-search-suggest`).length>0){pe.hide(n.name+"-search-suggest");return}if(J(`#w2overlay-${n.name}-search-suggest`).length>0)return;if(!e){n.last.overlay_timer=setTimeout(()=>{n.searchSuggest(!0)},100);return}let i=t??J(n.box).find(`#grid_${n.name}_search_all`).get(0),o=[...n.defaultSearches??[],...n.defaultSearches?.length>0&&n.savedSearches?.length>0?["--"]:[],...n.savedSearches??[]];Array.isArray(o)&&o.length>0&&js.show({name:n.name+"-search-suggest",anchor:i,align:t!=null?"left":"both",items:o,selected:!1,filter:!0,hideOn:["doc-click","sleect","remove"],render(l){let a=l.text;return l.isDefault&&(a=`<b>${a}</b>`),a}}).select(l=>{let a=n.trigger("searchSelect",{target:n.name,index:l.detail.index,item:l.detail.item});if(a.isCancelled===!0){l.preventDefault();return}l.detail.overlay.hide(),n.last.logic=l.detail.item.logic||"AND",n.last.search="",n.last.label="[Multiple Fields]",n.searchData=p.clone(l.detail.item.data),n.searchSelected=p.clone(l.detail.item,{exclude:["icon","remove"]}),n.reload(),a.finish()}).remove(l=>{let a=l.detail.item,r=n.trigger("searchRemove",{target:n.name,index:l.detail.index,item:a});if(r.isCancelled===!0){l.preventDefault();return}queueMicrotask(()=>l.detail.overlay.hide()),pe.hide(n.name+"-search-overlay"),n.confirm(p.lang('Do you want to delete search "${item}"?',{item:a.text})).yes(c=>{let d=n.savedSearches.findIndex(u=>u.id==a.id);d!==-1&&n.savedSearches.splice(d,1),n.cacheSave("searches",n.savedSearches.map(u=>p.clone(u,{exclude:["remove","icon"]}))),c.detail.self.close(),r.finish()}).no(c=>{c.detail.self.close()})})}function en(n){let e="";n.searchSelected&&(e=n.searchSelected.text);let s=n.savedSearches.findIndex(i=>i.id==n.searchSelected?.id),t=n.trigger("searchSave",{target:n.name,saveLocalStorage:!0});t.isCancelled!==!0&&n.message({width:350,height:150,body:`<div class="tsg-grid-save-search">
445
+ <span>${p.lang(s!=-1?"Update Search":"Save New Search")}</span>
446
+ <input class="search-name tsg-input" placeholder="${p.lang("Search name")}">
447
+ </div>`,buttons:`
448
+ <button id="grid-search-cancel" class="tsg-btn">${p.lang("Cancel")}</button>
449
+ <button id="grid-search-save" class="tsg-btn tsg-btn-blue" ${String(e).trim()==""?"disabled":""}>${p.lang("Save")}</button>
450
+ `})?.open(async i=>{J(i.detail.box).find("input, button").eq(0).val(e),await i.complete,J(i.detail.box).find("#grid-search-cancel").on("click",()=>{n.message()}),J(i.detail.box).find("#grid-search-save").on("click",()=>{let l=J(i.detail.box).find(".tsg-message .search-name").val();n.searchSelected&&s!=-1?Object.assign(n.savedSearches[s],{id:l,text:l,logic:n.last.logic,data:p.clone(n.searchData)}):n.savedSearches.push({id:l,text:l,icon:"tsg-icon-search",remove:!0,logic:n.last.logic,data:n.searchData}),n.cacheSave("searches",n.savedSearches.map(a=>p.clone(a,{exclude:["remove","icon"]}))),n.message(),n.searchSelected?(n.searchSelected.text=l,J(n.box).find(`#grid_${n.name}_search_name .name-text`).html(l)):(n.searchSelected={text:l,logic:n.last.logic,data:p.clone(n.searchData)},J(i.detail.box).find(`#grid_${n.name}_search_all`).val(" ").prop("readOnly",!0),J(i.detail.box).find(`#grid_${n.name}_search_name`).show().find(".name-text").html(l)),t.finish({name:l})}),await p.wait(100),J(i.detail.box).find("input, button").off(".message").on("keydown.message",o=>{let l=String(J(i.detail.box).find(".tsg-message-body input").val()).trim();o.keyCode==13&&l!=""&&J(i.detail.box).find("#grid-search-save").trigger("click"),o.keyCode==27&&n.message()}).eq(0).on("input.message",o=>{let l=J(i.detail.box).closest(".tsg-message").find("#grid-search-save");String(J(i.detail.box).val()).trim()===""?l.prop("disabled",!0):l.prop("disabled",!1)}).get(0).focus()})}function tn(n,e){if(p.hasLocalStorage&&n.useLocalStorage)try{let s=JSON.parse(localStorage.TsUi||"{}");return s[n.stateId||n.name]??={},s[n.stateId||n.name][e]}catch{}return null}function sn(n,e,s){if(p.hasLocalStorage&&n.useLocalStorage)try{let t=JSON.parse(localStorage.TsUi||"{}");return t[n.stateId||n.name]??={},t[n.stateId||n.name][e]=s,localStorage.TsUi=JSON.stringify(t),!0}catch{delete localStorage.TsUi}return!1}function nn(n,e){let s=[],t=!1;for(let a=0;a<n.searches.length;a++){let r=n.searches[a];!r.hidden||r.value==null||(s.push({field:r.field,operator:r.operator||"is",type:r.type,value:r.value||""}),t=!0)}let i=n.trigger("search",{reset:!0,target:n.name,searchData:s});if(i.isCancelled===!0)return;let o=J(n.box).find("#grid_"+n.name+"_search_all");n.searchData=i.detail.searchData,n.searchSelected=null,n.last.search="",n.last.logic=t?"AND":n.last.logic,n.multiSearch?o.next().show():o.next().hide(),n.last.multi=!1,n.last.fetch.offset=0,n.last.vscroll.scrollTop=0,n.last.vscroll.scrollLeft=0,n.last.selection.indexes=[],n.last.selection.columns={},n.searchClose();let l=o.val("").get(0);l?._w2field&&l._w2field.reset(),e||n.reload(),i.finish()}function on(n,e){if(e===!0){pe.hide(n.name+"-search-fields");return}let s=[];for(let t=-1;t<n.searches.length;t++){let i=n.searches[t],o=i?i.field:null,l=o!=null?n.getColumn(o):null,a=!1,r=null;if(n.show.searchHiddenMsg==!0&&t!=-1&&(l==null||l.hidden===!0&&l.hideable!==!1)&&(a=!0,r=p.lang(`This column ${l==null?"does not exist":"is hidden"}`)),t==-1){if(!n.multiSearch||!n.show.searchAll)continue;i={field:"all",label:"All Fields",type:"text"}}else if(l!=null&&l.hideable===!1||i==null||i.hidden===!0&&(r=p.lang("This column is hidden"),i.simple===!1))continue;i!=null&&(i.label==null&&i.caption!=null&&(console.log("NOTICE: grid search.caption property is deprecated, please use search.label. Search ->",i),i.label=i.caption),s.push({id:i.field,text:p.lang(i.label??""),search:i,tooltip:r,disabled:a,checked:i.field==n.last.field}))}js.show({type:"radio",name:n.name+"-search-fields",anchor:J(n.box).find("#grid_"+n.name+"_search_name").parent().find(".tsg-search-down").get(0),items:s,align:"none",hideOn:["doc-click","select"]}).select(t=>{n.searchInitInput(t.detail.item.search.field)})}function ln(n,e,s){let t,i=J(n.box).find("#grid_"+n.name+"_search_all");if(e=="all")t={field:"all",label:p.lang("All Fields")};else if(t=n.getSearch(e),t==null)return;n.last.search!=""?(n.last.label=t.label??"",n.search(t.field,n.last.search)):(n.last.field=t.field,n.last.label=t.label??""),i.attr("placeholder",p.lang("Search")+" "+p.lang(t.label||t.caption||t.field,!0)),n.searchSelected?(J(n.box).find(`#grid_${n.name}_search_all`).val(" ").prop("readOnly",!0),J(n.box).find(`#grid_${n.name}_search_name`).show().find(".name-text").html(n.searchSelected.text)):(J(n.box).find(`#grid_${n.name}_search_all`).prop("readOnly",!1),J(n.box).find(`#grid_${n.name}_search_name`).hide().find(".name-text").html(""))}function an(n){let e=`
451
+ <div class="search-title">
452
+ ${p.lang("Advanced Search")}
453
+ ${n.savedSearches?.length>0?`<button class="tsg-btn tsg-saved-searches" data-click="searchSuggest|true|false|this">Saved Searches (${n.savedSearches?.length??0})</button>`:""}
454
+ <span class="search-logic" style="${n.show.searchLogic?"":"display: none"}">
455
+ <select id="grid_${n.name}_logic" class="tsg-input">
456
+ <option value="AND" ${n.last.logic=="AND"?"selected":""}>${p.lang("All")}</option>
457
+ <option value="OR" ${n.last.logic=="OR"?"selected":""}>${p.lang("Any")}</option>
458
+ </select>
459
+ </span>
460
+ </div>
461
+ `,s=[],t=0;s.push('<div><table cellspacing="0"><tbody>');for(let i=0;i<n.searches.length;i++){let o=n.searches[i];if(o.type=String(o.type).toLowerCase(),o.hidden)continue;if(o.type=="new-column"){s[t]+="</tbody></table></div>",s.push('<div><table cellspacing="0"><tbody>'),t++;continue}o.attr==null&&(o.attr=""),o.text==null&&(o.text=""),o.style==null&&(o.style=""),o.type==null&&(o.type="text"),o.label==null&&o.caption!=null&&(console.log("NOTICE: grid search.caption property is deprecated, please use search.label. Search ->",o),o.label=o.caption);let l=`
462
+ <select id="grid_${n.name}_operator_${i}" class="tsg-input" data-change="initOperator|${i}">
463
+ ${n.getOperators(o.type,o.operators)}
464
+ </select>
465
+ `;s[t]+=`<tr>
466
+ <td class="caption">${p.lang(o.label??o.field)||""}</td>
467
+ <td class="operator">${l}</td>
468
+ <td class="value">`;let a;switch(o.type){case"text":case"alphanumeric":case"hex":case"color":case"list":case"combo":case"enum":a="width: 250px;",["hex","color"].indexOf(o.type)!=-1&&(a="width: 90px;"),s[t]+=`<input rel="search" type="text" id="grid_${n.name}_field_${i}" name="${o.field}"
469
+ class="tsg-input" style="${a+o.style}" ${o.attr}>`;break;case"int":case"float":case"money":case"currency":case"percent":case"date":case"time":case"datetime":a="width: 90px;",o.type=="datetime"&&(a="width: 140px;"),s[t]+=`<input id="grid_${n.name}_field_${i}" name="${o.field}" ${o.attr} rel="search" type="text"
470
+ class="tsg-input" style="${a+o.style}">
471
+ <span id="grid_${n.name}_range_${i}" style="display: none">&#160;-&#160;&#160;
472
+ <input rel="search" type="text" class="tsg-input" style="${a+o.style}" id="grid_${n.name}_field2_${i}" name="${o.field}" ${o.attr}>
473
+ </span>`;break;case"select":s[t]+=`<select rel="search" class="tsg-input" style="${o.style}" id="grid_${n.name}_field_${i}"
474
+ name="${o.field}" ${o.attr}></select>`;break}s[t]+=o.text+" </td></tr>"}return s[t]+="</tbody></table></div>",e+=`
475
+ <div class="search-body">
476
+ ${s.join("")}
477
+ </div>
478
+ <div class="search-bottom actions">
479
+ <button type="button" class="tsg-btn close-btn" data-click="searchClose">${p.lang("Close")}</button>
480
+ <div style="float: right; display: inline">
481
+ <button type="button" class="tsg-btn" data-click="searchReset">${p.lang("Reset")}</button>
482
+ <button type="button" class="tsg-btn tsg-btn-blue" data-click="search">${p.lang("Search")}</button>
483
+ </div>
484
+ </div>
485
+ `,e}function rn(n,e,s){let t=n.operators[n.operatorsMap[e]??""]||[];s!=null&&Array.isArray(s)&&(t=s);let i="";return t.forEach(o=>{let l=o,a=o;Array.isArray(o)?(l=o[1],a=o[0]):p.isPlainObject(o)&&(l=o.text,a=o.oper),l==null&&(l=o),i+=`<option value="${a}">${p.lang(l)}</option>
486
+ `}),i}function cn(n,e){let s,t=n.searches[e],i=n.getSearchData(t.field),o=J(`#w2overlay-${n.name}-search-overlay`),l=o.find(`#grid_${n.name}_range_${e}`),a=o.find(`#grid_${n.name}_field_${e}`),r=o.find(`#grid_${n.name}_field2_${e}`),d=o.find(`#grid_${n.name}_operator_${e}`).val();switch(a.show(),l.hide(),d){case"between":l.css("display","inline");break;case"null":case"not null":a.hide(),a.val(d),a.trigger("change");break}switch(t.type){case"text":case"alphanumeric":let u=a[0]._w2field;u&&u.reset();break;case"int":case"float":case"hex":case"color":case"money":case"currency":case"percent":case"date":case"time":case"datetime":a[0]._w2field||(new ue(t.type,{el:a[0],...t.options}),new ue(t.type,{el:r[0],...t.options}),setTimeout(()=>{a.trigger("keydown"),r.trigger("keydown")},1));break;case"list":case"combo":case"enum":if(s=t.options??{},t.type=="list"&&(s.selected={}),t.type=="enum"&&(s.selected=[]),i&&(s.selected=i.value),!a[0]._w2field){let f=new ue(t.type,{el:a[0],...s,onSelect:async m=>{await m.complete,n.initSearchLists(t.field)},onRemove:async m=>{await m.complete,n.initSearchLists(t.field)}});i&&i.text!=null&&f.set({id:i.value,text:i.text}),t._w2field=f}break;case"select":s='<option value="">--</option>';let h=t.options??{};for(let f=0;f<h.items.length;f++){let m=h.items[f];if(p.isPlainObject(h.items[f])){let y=m.id,x=m.text;y==null&&m.value!=null&&(y=m.value),x==null&&m.text!=null&&(x=m.text),y==null&&(y=""),s+='<option value="'+y+'">'+x+"</option>"}else s+='<option value="'+m+'">'+m+"</option>"}a.html(s);break}n.initSearchLists()}function un(n,e){let s=n.getSearch();s.forEach(t=>{let i=n.getSearch(t);if(i!=null&&i.options?.parentList!=null){let o=n.getSearch(i.options.parentList);if(o==null)return;let l=n.getSearch(o.field)?._w2field?.get();Array.isArray(l)?l=l.map(a=>a.id):l=l?.id!=null?[l.id]:[],i._w2field?.options?.items?.forEach?.(a=>{let r=p.getNested(a,i?.options?.parentField??"parentId");if(r==null)return;let c=p.clone(Array.isArray(r)?r:[r]);c.unshift("");let d=l.some(u=>c.includes(u));d&&a.hidden===!0?a.hidden=!1:!d&&a.hidden!==!0&&(a.hidden=!0)})}}),e!=null&&s.forEach(t=>{let i=n.getSearch(t);if(i!=null&&i.options?.parentList==e){let o=i._w2field,l=o.options.items.filter(a=>!a.hidden).map(a=>a.id);if(o.type=="list"&&!l.includes(o.get()?.id)&&o.set(null),o.type=="enum"){let a=o.get()?.filter(r=>l.includes(r.id));o.set(a||[])}}})}function dn(n){let e=J(`#w2overlay-${n.name}-search-overlay`);for(let s=0;s<n.searches.length;s++){let t=n.searches[s],i=n.getSearchData(t.field);if(t.type=String(t.type).toLowerCase(),t.type=="new-column")continue;typeof t.options!="object"&&(t.options={});let o=t.operator,l=[...n.operators[n.operatorsMap[t.type]??""]??[]];t.operators&&(l=[...t.operators]),p.isPlainObject(o)&&(o=o.oper),l.forEach((d,u)=>{p.isPlainObject(d)&&(l[u]=d.oper)}),i&&i.operator&&(o=i.operator);let a=n.defaultOperator[n.operatorsMap[t.type]??""];l.indexOf(o)==-1&&(o=a),e.find(`#grid_${n.name}_operator_${s}`).val(o),n.initOperator(s);let r=e.find(`#grid_${n.name}_field_${s}`),c=e.find(`#grid_${n.name}_field2_${s}`);i!=null&&(Array.isArray(i.value)?["in","not in"].includes(i.operator)?r[0]._w2field.set(i.value):(r.val(i.value[0]).trigger("change"),c.val(i.value[1]).trigger("change")):i.value!=null&&r.val(i.value).trigger("change"))}e.find(".tsg-grid-search-advanced *[rel=search]").on("keypress",s=>{s.keyCode==13&&(n.search(),pe.hide(n.name+"-search-overlay"))})}var U=j,fn=ie;function hn(n,e,s){let t=Date.now(),i=null;if(n.last.cancelClick==!0||s&&s.altKey)return;if(typeof e=="object"&&e!==null&&(i=e.column,e=e.recid),s==null&&(s={}),t-n.last.click_time<350&&n.last.click_recid==e&&s.type=="click"){n.dblClick(e,s);return}n.last.bubbleEl&&(n.last.bubbleEl=null),n.last.click_time=t;let o=n.last.click_recid;if(n.last.click_recid=e,i==null&&s.target){let x=s.target;x.tagName!="TD"&&(x=U(x).closest("td")[0]),U(x).attr("col")!=null&&(i=parseInt(U(x).attr("col")))}let l=n.get(e,!0),a=l!=null?n.records[l]:null;if(a?.TsUi?.selectable===!1&&(a?.TsUi?.children?.length??0)>0&&!U(s.target).hasClass("tsg-show-children")){n.toggle(e);return}let r=n.trigger("click",{target:n.name,recid:e,column:i,originalEvent:s});if(r.isCancelled===!0)return;let c=n.getSelection();U(n.box).find("#grid_"+n.name+"_check_all").prop("checked",!1);let d=n.get(e,!0),u=[];n.last.sel_ind=d,n.last.sel_col=i,n.last.sel_recid=e,n.last.sel_type="click";let h=0,f=0,m=0,y=0;if(s.shiftKey&&c.length>0&&n.multiSelect){let x=c;if(typeof c[0]=="object"&&x[0].recid!=null){h=n.get(x[0].recid,!0)??0,f=n.get(e,!0)??0,i>x[0].column?(m=x[0].column,y=i):(m=i,y=x[0].column);for(let v=m;v<=y;v++)u.push(v)}else h=o!=null?n.get(o,!0)??0:0,f=n.get(e,!0)??0;let b=[];if(h>f){let v=h;h=f,f=v}let g=n.url?.get??n.url;for(let v=h;v<=f;v++)if(!(n.searchData.length>0&&!g&&!n.last.searchIds.includes(v)))if(n.selectType=="row")b.push(n.records[v].recid);else for(let w=0;w<u.length;w++)b.push({recid:n.records[v].recid,column:u[w]});n.select(b)}else{let x=n.last.selection,b=x.indexes.indexOf(d??-1)!=-1,g=!1;U(s.target).closest("td").hasClass("tsg-col-select")&&(g=!0),(!s.ctrlKey&&!s.shiftKey&&!s.metaKey&&!g||!n.multiSelect)&&!n.showSelectColumn?(n.selectType!="row"&&!x.columns[d??-1]?.includes(i)&&(b=!1),b===!0&&c.length==1?n.unselect({recid:e,column:i}):(n.selectNone(!0),n.select({recid:e,column:i}))):(n.selectType!="row"&&(b=!1),b===!0?n.unselect({recid:e,column:i}):n.select({recid:e,column:i}))}n.status(),n.initResize(),r.finish()}function pn(n,e,s){if(n.last.colResizing===!0)return;let t=n.trigger("columnClick",{target:n.name,field:e,originalEvent:s});if(t.isCancelled!==!0){if(n.selectType=="row"){let i=n.getColumn(e);i&&i.sortable&&n.sort(e,null,!!(s&&(s.ctrlKey||s.metaKey||s.shiftKey))),t.detail.field=="line-number"&&(n.getSelection().length>=n.records.length?n.selectNone():n.selectAll())}else{if(s.altKey){let i=n.getColumn(e);i&&i.sortable&&n.sort(e,null,!!(s&&(s.ctrlKey||s.metaKey||s.shiftKey)))}if(t.detail.field=="line-number")n.getSelection().length>=n.records.length?n.selectNone():n.selectAll();else{!s.shiftKey&&!s.metaKey&&!s.ctrlKey&&n.selectNone(!0);let i=n.getSelectionCells(),o=n.getColumn(t.detail.field,!0)??0,l=[],a=[];if(i.length!=0&&s.shiftKey){let r=o,c=i[0].column;r>c&&(r=i[0].column,c=o);for(let d=r;d<=c;d++)a.push(d)}else a.push(o);if(t=n.trigger("columnSelect",{target:n.name,columns:a}),t.isCancelled!==!0){for(let r=0;r<n.records.length;r++)l.push({recid:n.records[r].recid,column:a});n.select(l)}t.finish()}}t.finish()}}function mn(n,e,s){let t=n.trigger("columnDblClick",{target:n.name,field:e,originalEvent:s});t.isCancelled!==!0&&t.finish()}function gn(n,e,s){let t=n.trigger("columnContextMenu",{target:n.name,field:e,originalEvent:s});t.isCancelled!==!0&&(fn.show({type:"check",contextMenu:!0,originalEvent:s,items:n.initColumnOnOff()}).then(()=>{U("#w2overlay-context-menu .tsg-grid-skip").off(".tsg-grid").on("click.tsg-grid",i=>{i.stopPropagation()}).on("keypress",i=>{i.keyCode==13&&(n.skip(i.target.value),n.toolbar.click("tsg-column-on-off"))})}).select(i=>{let o=i.detail.item.id;["tsg-stateSave","tsg-stateReset"].includes(o)?n[o.substring(5)]():o=="tsg-skip"||n.columnOnOff(i,i.detail.item.id),clearTimeout(n.last.kbd_timer??void 0)}),clearTimeout(n.last.kbd_timer??void 0),s.preventDefault(),t.finish())}function yn(n,e){if(e===void 0){n.columns.forEach((a,r)=>n.columnAutoSize(r));return}let s=n.columns[e],t=U(`#grid_${n.name}_column_${e} .tsg-col-header`)[0];if(s.autoResize===!1||s.hidden===!0||!t)return!0;let i=getComputedStyle(t),o=p.getStrWidth(t.innerHTML,`font-family: ${i.fontFamily}; font-size: ${i.fontSize}`,!0)+parseFloat(i.paddingLeft)+parseFloat(i.paddingRight)+4;U(n.box).find(`.tsg-grid-records td[col="${e}"] > div`,n.box).each(a=>{let r=a,c=getComputedStyle(r),d=p.getStrWidth(r.innerHTML,`font-family: ${c.fontFamily}; font-size: ${c.fontSize}`,!0)+parseFloat(c.paddingLeft)+parseFloat(c.paddingRight)+4;o<d&&(o=d)});let l=n.trigger("columnAutoResize",{maxWidth:o,originalEvent:event,target:n.name,column:s});l.isCancelled!==!0&&(o>0&&(s.sizeOriginal==null&&(s.sizeOriginal=s.size??""),s.size=Math.min(Math.abs(o),s.max||1/0)+"px",n.resizeRecords(),n.resizeRecords(),n.scroll()),l.finish())}function bn(n){n.columns.forEach((e,s)=>n.columnAutoSize(s))}function xn(n,e){let s=n.trigger("focus",{target:n.name,originalEvent:e});if(s.isCancelled===!0)return!1;n.hasFocus=!0,U(n.box).removeClass("tsg-inactive").find(".tsg-inactive").removeClass("tsg-inactive"),setTimeout(()=>{let t=U(n.box).find(`#grid_${n.name}_focus`).get(0);t&&document.activeElement!=t&&t.focus()},10),s.finish()}function vn(n,e){let s=n.trigger("blur",{target:n.name,originalEvent:e});if(s.isCancelled===!0)return!1;n.hasFocus=!1,U(n.box).addClass("tsg-inactive").find(".tsg-selected").addClass("tsg-inactive"),U(n.box).find(".tsg-selection").addClass("tsg-inactive"),s.finish()}function Tn(n,e){let s=n,t=n.url?.get??n.url;if(s.keyboard!==!0)return;let i=s.trigger("keydown",{target:s.name,originalEvent:e});if(i.isCancelled===!0)return;if(U(n.box).find(".tsg-message").length>0){e.keyCode==27&&n.message();return}let o=!1,l=U(s.box).find("#grid_"+s.name+"_records"),a=s.getSelection();a.length===0&&(o=!0);let r=a[0]||null,c=[],d=a[a.length-1],u=a;if(typeof r=="object"&&r!=null){let I=a;r=I[0].recid,c=[];let R=0;for(;!(!I[R]||I[R].recid!=r);)c.push(I[R].column),R++;d=I[I.length-1].recid}let h=s.get(r,!0)??-1,f=s.get(d,!0)??-1,m=U(s.box).find(`#grid_${s.name}_rec_${h>=0?p.escapeId(s.records[h].recid):"none"}`),y=Math.floor(l[0].clientHeight/s.recordHeight),x=!1,b=e.keyCode,g=e.shiftKey;switch(b){case 8:case 46:{s.delete(),x=!0,e.stopPropagation();break}case 27:{s.last.move?.type?(delete s.last.move,s.removeRange("selection-preview"),s.removeRange("selection-expand"),x=!0):(s.selectNone(),x=!0);break}case 65:{if(!e.metaKey&&!e.ctrlKey)break;s.selectAll(),x=!0;break}case 13:{if(n.selectType=="row"&&s.show.expandColumn===!0){if(m.length<=0)break;s.toggle(r,e),x=!0}else{for(let I=0;I<n.columns.length;I++)if(n.getCellEditable(h,I)){c.push(I);break}n.selectType=="row"&&n.last._edit&&n.last._edit.column&&(c=[n.last._edit.column]),c.length>0&&(s.editField(r,c[0]??n.last.editColumn,null,e),x=!0)}break}case 37:{w();break}case 39:{T();break}case 33:{_(y);break}case 34:{C(y);break}case 35:{C(-1);break}case 36:{_(-1);break}case 38:{_(e.metaKey||e.ctrlKey?-1:1);break}case 40:{C(e.metaKey||e.ctrlKey?-1:1);break}case 17:case 91:{if(o)break;if(p.isSafari){s.last.copy_event=s.copy(!1,e);let I=U(s.box).find("#grid_"+s.name+"_focus");I.val(s.last.copy_event.detail.text),I[0].select()}break}case 67:{if(e.metaKey||e.ctrlKey)if(p.isSafari)s.copy(s.last.copy_event,e);else{s.last.copy_event=s.copy(!1,e);let I=U(s.box).find("#grid_"+s.name+"_focus");I.val(s.last.copy_event.detail.text),I[0].select(),s.copy(s.last.copy_event,e)}break}case 88:{if(o)break;if(e.ctrlKey||e.metaKey)if(p.isSafari)s.copy(s.last.copy_event,e);else{s.last.copy_event=s.copy(!1,e);let I=U(s.box).find("#grid_"+s.name+"_focus");I.val(s.last.copy_event.detail.text),I[0].select(),s.copy(s.last.copy_event,e)}break}}let v=[32,187,189,192,219,220,221,186,222,188,190,191];for(let I=48;I<=111;I++)v.push(I);v.indexOf(b)!=-1&&!e.ctrlKey&&!e.metaKey&&!x&&(c.length===0&&c.push(0),x=!1,setTimeout(()=>{let I=U(s.box).find("#grid_"+s.name+"_focus"),R=I.val();I.val(""),s.editField(r,c[0],R,e)},1)),x&&e.preventDefault&&e.preventDefault(),i.finish();function w(){if(o){D();return}if(s.selectType=="row"){if(m.length<=0)return;let I=s.records[h].TsUi||{};I&&I.parent_recid!=null&&(!Array.isArray(I.children)||I.children.length===0||!I.expanded)?(s.unselect(r),s.collapse(I.parent_recid,e),s.select(I.parent_recid)):s.collapse(r,e)}else{let I=s.prevCell(h,c[0]),R=I?.index!=h?null:I?.colIndex??null;if(!g&&R==null&&(s.selectNone(!0),R=0),R!=null)if(g&&s.multiSelect){if(O())return;let F=[],S=[],$=[];if(c.indexOf(s.last.sel_col)===0&&c.length>1){for(let H=0;H<a.length;H++)F.indexOf(u[H].recid)==-1&&F.push(u[H].recid),$.push({recid:u[H].recid,column:c[c.length-1]});s.unselect($),s.scrollIntoView(h,c[c.length-1],!0)}else{for(let H=0;H<a.length;H++)F.indexOf(u[H].recid)==-1&&F.push(u[H].recid),S.push({recid:u[H].recid,column:R});s.select(S),s.scrollIntoView(h,R,!0)}}else s.click({recid:r,column:R},e),s.scrollIntoView(h,R,!0);else g||s.selectNone(!0)}x=!0}function T(){if(o){D();return}if(s.selectType=="row"){if(m.length<=0)return;s.expand(r,e)}else{let I=s.nextCell(h,c[c.length-1]),R=I?.index!=h?null:I?.colIndex??null;if(!g&&R==null&&(s.selectNone(!0),R=s.columns.length-1),R!=null)if(g&&b==39&&s.multiSelect){if(O())return;let F=[],S=[],$=[];if(c.indexOf(s.last.sel_col)==c.length-1&&c.length>1){for(let H=0;H<a.length;H++)F.indexOf(u[H].recid)==-1&&F.push(u[H].recid),$.push({recid:u[H].recid,column:c[0]});s.unselect($),s.scrollIntoView(h,c[0],!0)}else{for(let H=0;H<a.length;H++)F.indexOf(u[H].recid)==-1&&F.push(u[H].recid),S.push({recid:u[H].recid,column:R});s.select(S),s.scrollIntoView(h,R,!0)}}else s.click({recid:r,column:R},e),s.scrollIntoView(h,R,!0);else g||s.selectNone(!0)}x=!0}function _(I){if(o&&D(),m.length<=0)return;let R=s.prevRow(h,s.selectType=="row"?0:u[0].column,I);if(!g&&R==null&&(s.searchData.length!=0&&!t?R=s.last.searchIds[0]??null:R=0),R!=null){if(g&&s.multiSelect){if(O())return;let F=s.last.sel_ind??-1;if(s.selectType=="row")F>R&&F!=f?s.unselect(s.records[f].recid):s.select(s.records[R].recid);else if(F>R&&F!=f){R=f;let S=[];for(let $=0;$<c.length;$++)S.push({recid:s.records[R].recid,column:c[$]});s.unselect(S)}else{let S=[];for(let $=0;$<c.length;$++)S.push({recid:s.records[R].recid,column:c[$]});s.select(S)}}else s.selectNone(!0),s.click({recid:s.records[R].recid,column:c[0]},e);s.scrollIntoView(R,void 0,!0,I!=1),e.preventDefault&&e.preventDefault()}else g||s.selectNone(!0)}function C(I){if(o&&D(),m.length<=0)return;let R=s.nextRow(f,s.selectType=="row"?0:u[0].column,I);if(!g&&R==null&&(s.searchData.length!=0&&!t?R=s.last.searchIds[s.last.searchIds.length-1]??null:R=s.records.length-1),R!=null){if(g&&s.multiSelect){if(O())return;let F=s.last.sel_ind??-1;if(s.selectType=="row")F<R&&F!=h?s.unselect(s.records[h].recid):s.select(s.records[R].recid);else if(F<R&&F!=h){R=h;let S=[];for(let $=0;$<c.length;$++)S.push({recid:s.records[R].recid,column:c[$]});s.unselect(S)}else{let S=[];for(let $=0;$<c.length;$++)S.push({recid:s.records[R].recid,column:c[$]});s.select(S)}}else s.selectNone(!0),s.click({recid:s.records[R].recid,column:c[0]},e);s.scrollIntoView(R,void 0,!0,I!=1),x=!0}else g||s.selectNone(!0)}function D(){if(!s.records||s.records.length===0)return;let I=Math.floor(l[0].scrollTop/s.recordHeight)+1;(!s.records[I]||I<2)&&(I=0),!(typeof s.records[I]>"u")&&s.select({recid:s.records[I].recid,column:0})}function O(){if(s.last.sel_type!="click")return!1;if(s.selectType!="row"){if(s.last.sel_type="key",a.length>1){for(let I=0;I<a.length;I++)if(u[I].recid==s.last.sel_recid&&u[I].column==s.last.sel_col){a.splice(I,1);break}return s.unselect(a),!0}return!1}else{if(s.last.sel_type="key",a.length>1){let I=a;return I.splice(I.indexOf(s.records[s.last.sel_ind??0].recid),1),s.unselect(I),!0}return!1}}}function wn(n,e,s,t,i){let o=n.records.length;if(n.searchData.length!=0&&!n.url&&(o=n.last.searchIds.length),o===0)return;if(e==null){let h=n.getSelection();if(h.length===0)return;if(p.isPlainObject(h[0])){let f=h;e=f[0].index,s=f[0].column}else e=n.get(h[0],!0)}let l=U(n.box).find(`#grid_${n.name}_records`),a=l[0].clientWidth,r=l[0].clientHeight,c=l[0].scrollTop,d=l[0].scrollLeft,u=n.last.searchIds.length;if(u>0&&(e=n.last.searchIds.indexOf(e??0)),l.css({"scroll-behavior":t?"auto":"smooth"}),r<n.recordHeight*(u>0?u:o)&&l.length>0){let h=Math.floor(c/n.recordHeight),f=h+Math.floor(r/n.recordHeight);e==h&&l.prop("scrollTop",c-r/1.3),e==f&&l.prop("scrollTop",c+r/1.3),((e??0)<h||(e??0)>f)&&l.prop("scrollTop",((e??0)-1)*n.recordHeight),i===!0&&l.prop("scrollTop",(e??0)*n.recordHeight)}if(s!=null){let h=0,f=0,m=p.scrollBarSize();for(let y=0;y<=s;y++){let x=n.columns[y];x.frozen||x.hidden||(h=f,f+=parseInt(x.sizeCalculated??"0"))}a<f-d?l.prop("scrollLeft",h-m):h<d&&l.prop("scrollLeft",f-a+m*2)}}function _n(n,e){if(e==null)return;let s=0,t=!1;for(let i=0;i<n.columns.length;i++){let o=n.columns[i];if(o.field==e){t=!0;break}if(o.frozen||o.hidden)continue;let l=parseInt(o.sizeCalculated?o.sizeCalculated:String(o.size??0));s+=l}t&&(n.last.vscroll.scrollLeft=s+1,n.scroll())}function kn(n,e,s){let t=null;if(typeof e=="object"&&e!==null&&(t=e.column,e=e.recid),s==null&&(s={}),t==null&&s.target){let r=s.target;r.tagName.toUpperCase()!="TD"&&(r=U(r).closest("td")[0]),t=parseInt(U(r).attr("col"))}let i=n.get(e,!0),o=i!=null?n.records[i]:null,l=n.trigger("dblClick",{target:n.name,recid:e,column:t,originalEvent:s});if(l.isCancelled===!0)return;n.selectNone(!0),(i!=null?n.getCellEditable(i,t):null)?n.editField(e,t,null,s):(n.select({recid:e,column:t}),(n.show.expandColumn||o&&o.TsUi&&Array.isArray(o.TsUi.children))&&n.toggle(e)),l.finish()}function Cn(n,e,s){let{recid:t,index:i,column:o}=s;if(n.last.userSelect=="text")return;if(e==null&&(e={offsetX:0,offsetY:0,target:U(n.box).find(`#grid_${n.name}_rec_${t}`)[0]}),e.offsetX==null&&(e.offsetX=e.layerX-e.target.offsetLeft,e.offsetY=e.layerY-e.target.offsetTop),n.selectType=="row"){let a=n.getSelectionRows();t!=null&&a.indexOf(t)==-1&&n.click(t)}else{let a=n.getSelectionCells(),r=!1,c=!1,d=!1;a.forEach(u=>{u.recid==t&&(c=!0),u.column==o&&(r=!0),u.recid==t&&u.column==o&&(d=!0)}),!c&&t!=null&&o===null&&n.click({recid:t}),!r&&t===null&&o!=null&&n.columnClick(n.columns[o].field,e),!d&&t!=null&&o!=null&&n.click({recid:t,column:o})}let l=n.trigger("contextMenu",{target:n.name,originalEvent:e,recid:t,index:i,column:o});l.isCancelled!==!0&&(n.contextMenu?.length>0&&fn.show({contextMenu:!0,originalEvent:e,items:n.contextMenu}).select(a=>{clearTimeout(n.last.kbd_timer??void 0),n.contextMenuClick(t??"",o??null,a)}),e.preventDefault(),clearTimeout(n.last.kbd_timer??void 0),l.finish())}function En(n,e,s,t){let i=n.trigger("contextMenuClick",{target:n.name,recid:e,column:s,originalEvent:t.detail.originalEvent,menuEvent:t,menuIndex:t.detail.index,menuItem:t.detail.item});i.isCancelled!==!0&&i.finish()}function Sn(n,e,s){let t=n.get(e);if(t!=null)return t.TsUi=t.TsUi??{},t.TsUi.expanded===!0?n.collapse(e):n.expand(e)}function Rn(n,e,s){let t=n.get(e,!0);if(t==null)return!1;let i=n.records[t];i.TsUi=i.TsUi??{};let o=p.escapeId(e),l=i.TsUi.children,a;if(Array.isArray(l)){if(i.TsUi.expanded===!0||l.length===0||(a=n.trigger("expand",{target:n.name,recid:e}),a.isCancelled===!0))return!1;i.TsUi.expanded=!0,i.TsUi._copied=!0,l.forEach(c=>{c.TsUi=c.TsUi??{},c.TsUi.parent_recid=i.recid,c.TsUi.children==null&&(c.TsUi.children=[])}),n.records.splice(t+1,0,...l),n.total!==-1&&(n.total+=l.length),(n.url?.get??n.url)||(n.localSort(!0,!0),n.searchData.length>0&&n.localSearch(!0)),s!==!0&&n.refresh(),a.finish()}else{if(U(n.box).find("#grid_"+n.name+"_rec_"+o+"_expanded_row").length>0||n.show.expandColumn!==!0||i.TsUi.expanded=="none")return!1;if(U(n.box).find("#grid_"+n.name+"_rec_"+o).after(`<tr id="grid_${n.name}_rec_${e}_expanded_row" class="tsg-expanded-row">
487
+ <td colspan="100" class="tsg-expanded2">
488
+ <div id="grid_${n.name}_rec_${e}_expanded"></div>
489
+ </td>
490
+ <td class="tsg-grid-data-last"></td>
491
+ </tr>`),U(n.box).find("#grid_"+n.name+"_frec_"+o).after(`<tr id="grid_${n.name}_frec_${e}_expanded_row" class="tsg-expanded-row">
492
+ ${n.show.lineNumbers?'<td class="tsg-col-number"></td>':""}
493
+ <td class="tsg-grid-data tsg-expanded1" colspan="100">
494
+ <div id="grid_${n.name}_frec_${e}_expanded"></div>
495
+ </td>
496
+ </tr>`),a=n.trigger("expand",{target:n.name,recid:e,box_id:"grid_"+n.name+"_rec_"+e+"_expanded",fbox_id:"grid_"+n.name+"_frec_"+e+"_expanded"}),a.isCancelled===!0)return U(n.box).find("#grid_"+n.name+"_rec_"+o+"_expanded_row").remove(),U(n.box).find("#grid_"+n.name+"_frec_"+o+"_expanded_row").remove(),!1;let r=U(n.box).find("#grid_"+n.name+"_rec_"+e+"_expanded"),c=U(n.box).find("#grid_"+n.name+"_frec_"+e+"_expanded"),d=r.find(":scope div:first-child")[0]?.clientHeight??50;r[0].clientHeight<d&&r.css({height:d+"px"}),c[0].clientHeight<d&&c.css({height:d+"px"}),U(n.box).find("#grid_"+n.name+"_rec_"+o).attr("expanded","yes").addClass("tsg-expanded"),U(n.box).find("#grid_"+n.name+"_frec_"+o).attr("expanded","yes").addClass("tsg-expanded"),U(n.box).find("#grid_"+n.name+"_cell_"+n.get(e,!0)+"_expand div").html("-"),i.TsUi.expanded=!0,a.finish(),n.resizeRecords()}return n.selectNone(),!0}function $n(n,e,s){let t=n.get(e,!0);if(t==null)return!1;let i=n.records[t];i.TsUi=i.TsUi||{};let o=p.escapeId(e),l=i.TsUi.children,a;if(Array.isArray(l)){if(i.TsUi.expanded!==!0||(a=n.trigger("collapse",{target:n.name,recid:e}),a.isCancelled===!0))return!1;r(i);let c=[];for(let f=i;f!=null;f=f.TsUi?.parent_recid!=null?n.get(f.TsUi.parent_recid):null)c.push(f.TsUi?.parent_recid);let d=t+1,u=d;for(;!(n.records.length<=u+1||n.records[u+1].TsUi==null||c.indexOf(n.records[u+1].TsUi.parent_recid)>=0);)u++;n.records.splice(d,u-d+1),n.total!==-1&&(n.total-=u-d+1),(n.url?.get??n.url)||n.searchData.length>0&&n.localSearch(!0),s!==!0&&n.refresh(),a.finish()}else{if(U(n.box).find("#grid_"+n.name+"_rec_"+o+"_expanded_row").length===0||n.show.expandColumn!==!0||(a=n.trigger("collapse",{target:n.name,recid:e,box_id:"grid_"+n.name+"_rec_"+e+"_expanded",fbox_id:"grid_"+n.name+"_frec_"+e+"_expanded"}),a.isCancelled===!0))return!1;U(n.box).find("#grid_"+n.name+"_rec_"+o).removeAttr("expanded").removeClass("tsg-expanded"),U(n.box).find("#grid_"+n.name+"_frec_"+o).removeAttr("expanded").removeClass("tsg-expanded"),U(n.box).find("#grid_"+n.name+"_cell_"+n.get(e,!0)+"_expand div").html("+"),U(n.box).find("#grid_"+n.name+"_rec_"+o+"_expanded").css("height","0px"),U(n.box).find("#grid_"+n.name+"_frec_"+o+"_expanded").css("height","0px"),setTimeout(()=>{U(n.box).find("#grid_"+n.name+"_rec_"+o+"_expanded_row").remove(),U(n.box).find("#grid_"+n.name+"_frec_"+o+"_expanded_row").remove(),i.TsUi&&(i.TsUi.expanded=!1),a.finish(),n.resizeRecords()},300)}return n.selectNone(),!0;function r(c){c.TsUi.expanded=!1,c.TsUi._copied=!1;for(let d=0;d<c.TsUi.children.length;d++){let u=c.TsUi.children[d];u.TsUi?.expanded&&r(u)}}}function Mn(n){let e=!1;for(let s=n.records.length-1;s>=0;s--){let t=n.records[s],i=t.TsUi?.children;t.TsUi?.expanded===!0&&(i?.length??0)>0&&!t.TsUi._copied&&(t.TsUi._copied=!0,i.forEach(o=>{o.TsUi??={},o.TsUi.parent_recid=t.recid,o.TsUi.children??=[]}),n.records.splice(s+1,0,...i),n.total!==-1&&(n.total+=i.length),e=!0)}e&&((n.url?.get??n.url)||(n.localSort(!0,!0),n.searchData.length>0&&n.localSearch(!0)))}function Dn(n,e,s,t){let i=n.trigger("sort",{target:n.name,field:e,direction:s,multiField:t});if(i.isCancelled===!0)return;if(e!=null){let l=n.sortData.length;for(let a=0;a<n.sortData.length;a++)if(n.sortData[a].field==e){l=a;break}if(s==null)if(s=n.sortData[l]?.direction,s==null)n.last.originalSort==null&&(n.last.originalSort=n.records.map(a=>a.recid)),s="asc";else switch(s.toLowerCase()){case"asc":{s="desc";break}case"desc":{s="";break}default:{s="asc";break}}t!=!0&&(n.sortData=[],l=0),s===""?n.sortData.splice(l,1):(n.sortData[l]??={},Object.assign(n.sortData[l],{field:e,direction:s}))}else n.sortData=[];n.url?.get??n.url?(i.finish({direction:s}),n.last.fetch.offset=0,n.reload()):(n.localSort(!1,!0),n.searchData.length>0&&n.localSearch(!0),n.last.vscroll.scrollTop=0,U(n.box).find(`#grid_${n.name}_records`).prop("scrollTop",0),i.finish({direction:s}),n.refresh())}function In(n,e,s){if(p.isPlainObject(e))return e.finish(),e.text;let t=n.getSelection();if(t.length===0)return"";let i="";if(typeof t[0]=="object"){let l=t,a=l[0].column,r=l[0].column,c=[];for(let d=0;d<l.length;d++)l[d].column<a&&(a=l[d].column),l[d].column>r&&(r=l[d].column),c.indexOf(l[d].index)==-1&&c.push(l[d].index);c.sort((d,u)=>d-u);for(let d=0;d<c.length;d++){let u=c[d];for(let h=a;h<=r;h++)n.columns[h].hidden!==!0&&(i+=n.getCellCopy(u,h)+" ");i=i.substr(0,i.length-1),i+=`
497
+ `}}else{for(let l=0;l<n.columns.length;l++){let a=n.columns[l];if(a.hidden===!0)continue;let r=a.text?a.text:a.field;a.text&&a.text.length<3&&a.tooltip&&(r=a.tooltip),i+='"'+p.stripTags(r)+'" '}i=i.substr(0,i.length-1),i+=`
498
+ `;for(let l=0;l<t.length;l++){let a=n.get(t[l],!0);for(let r=0;r<n.columns.length;r++)n.columns[r].hidden!==!0&&(i+='"'+n.getCellCopy(a,r)+'" ');i=i.substr(0,i.length-1),i+=`
499
+ `}}i=i.substr(0,i.length-1);let o;if(e==null)return o=n.trigger("copy",{target:n.name,text:i,cut:s.keyCode==88,originalEvent:s}),o.isCancelled===!0?"":(i=o.detail.text,o.finish(),i);if(e===!1)return o=n.trigger("copy",{target:n.name,text:i,cut:s.keyCode==88,originalEvent:s}),o.isCancelled===!0?"":(i=o.detail.text,o)}function On(n,e,s){return p.stripTags(n.getCellHTML(e,s))}function zn(n,e,s){let t=n.getSelectionCells(),i=n.get(t[0].recid,!0)??0,o=t[0].column,l=n.trigger("paste",{target:n.name,text:e,index:i,column:o,originalEvent:s});if(l.isCancelled===!0)return;let a=l.detail.text;if(n.selectType=="row"||t.length===0){console.log("ERROR: You can paste only if grid.selectType = 'cell' and when at least one cell selected."),l.finish();return}if(typeof a!="object"){let c=[];a=a.split(`
500
+ `);for(let d=0;d<a.length;d++){let u=a[d].split(" "),h=0,f=n.records[i],m=[];if(f!=null){for(let y=0;y<u.length;y++)n.columns[o+h]&&(r(f,n.columns[o+h].field,u[y]),m.push(o+h),h++);for(let y=0;y<m.length;y++)c.push({recid:f.recid,column:m[y]});i++}}n.selectNone(!0),n.select(c)}else n.selectNone(!0),n.select([{recid:n.records[i].recid,column:o}]);n.refresh(),l.finish();function r(c,d,u){c.TsUi=c.TsUi??{},c.TsUi.changes=c.TsUi.changes||{},c.TsUi.changes[d]=u}}var E=j,Ri=ie,ye=V;function Ln(n){let e=Date.now();if(!n.box||E(n.box).attr("name")!=n.name)return;let s=n.trigger("resize",{target:n.name});if(s.isCancelled!==!0)return n.box!=null&&(n.resizeBoxes(),n.resizeRecords()),s.finish(),Date.now()-e}function An(n,{cells:e,fullCellRefresh:s,ignoreColumns:t}={}){let i=Date.now(),o=n;if(n.box==null)return 0;if(Array.isArray(e))for(let a=0;a<e.length;a++){let r=e[a].index,c=e[a].column;if(r<0)continue;if(r==null||c==null){console.log("ERROR: Wrong argument for grid.update({ cells }), cells should be [{ index: X, column: Y }, ...]");continue}let d=n.records[r]??{};d.TsUi=d.TsUi??{},d.TsUi._update=d.TsUi._update??{cells:[]};let u=d.TsUi._update.row1,h=d.TsUi._update.row2;(u==null||!u.isConnected||h==null||!h.isColSelected)&&(u=n.box.querySelector(`#grid_${n.name}_rec_${p.escapeId(d.recid)}`),h=n.box.querySelector(`#grid_${n.name}_frec_${p.escapeId(d.recid)}`),d.TsUi._update.row1=u,d.TsUi._update.row2=h),l(d,u,h,r,c)}else for(let a=(n.last.vscroll.recIndStart??0)-1;a<=(n.last.vscroll.recIndEnd??0);a++){let r=a;n.last.searchIds.length>0?r=n.last.searchIds[a]??a:r=a;let c=n.records[r];if(r<0||c==null)continue;c.TsUi=c.TsUi??{},c.TsUi._update=c.TsUi._update??{cells:[]};let d=c.TsUi._update.row1,u=c.TsUi._update.row2;(d==null||!d.isConnected||u==null||!u.isColSelected)&&(d=n.box.querySelector(`#grid_${n.name}_rec_${p.escapeId(c.recid)}`),u=n.box.querySelector(`#grid_${n.name}_frec_${p.escapeId(c.recid)}`),c.TsUi._update.row1=d,c.TsUi._update.row2=u);for(let h=0;h<n.columns.length;h++)l(c,d,u,r,h)}return Date.now()-i;function l(a,r,c,d,u){let h=o.columns[u];if(Array.isArray(t)&&(t.includes(u)||t.includes(h?.field)))return;let f=a.TsUi._update.cells[u];if((f==null||!f.isConnected)&&(f=o.box.querySelector(`#grid_${o.name}_data_${d}_${u}`),a.TsUi._update.cells[u]=f),f!=null){if(s)E(f).replace(o.getCellHTML(d,u,!1)),f=o.box.querySelector(`#grid_${o.name}_data_${d}_${u}`),a.TsUi._update.cells[u]=f;else{let m=f.children[0],{value:y,style:x,className:b}=o.getCellValue(d,u,!1,!0);if(m.innerHTML!=y&&(m.innerHTML=y),x!=""&&f.style.cssText!=x&&(f.style.cssText=x),b!=""){let g=["tsg-grid-data"],v=[],w=b.split(" ").filter(T=>!!T);f.classList.forEach(T=>{g.includes(T)||v.push(T)}),f.classList.remove(...v),f.classList.add(...w)}}if(o.columns[u]?.style&&o.columns[u]?.style!=f.style.cssText&&(f.style.cssText=o.columns[u]?.style??""),a.TsUi.class!=null){if(typeof a.TsUi.class=="string"){let m=["tsg-odd","tsg-even","tsg-record"],y=[],x=a.TsUi.class.split(" ").filter(b=>!!b);r&&c&&(r.classList.forEach(b=>{m.includes(b)||y.push(b)}),r.classList.remove(...y),r.classList.add(...x),c.classList.remove(...y),c.classList.add(...x))}if(p.isPlainObject(a.TsUi.class)&&typeof a.TsUi.class[h?.field??""]=="string"){let m=["tsg-grid-data"],y=[],x=a.TsUi.class[h.field].split(" ").filter(b=>!!b);f.classList.forEach(b=>{m.includes(b)||y.push(b)}),f.classList.remove(...y),f.classList.add(...x)}}(a.TsUi.style!=null||a.TsUi.styles!=null)&&(r&&c&&typeof a.TsUi.style=="string"&&r.style.cssText!==a.TsUi.style&&(r.style.cssText="height: "+o.recordHeight+"px;"+a.TsUi.style,r.setAttribute("custom_style",a.TsUi.style),c.style.cssText="height: "+o.recordHeight+"px;"+a.TsUi.style,c.setAttribute("custom_style",a.TsUi.style)),a.TsUi.styles==null&&(a.TsUi.styles=a.TsUi.style),p.isPlainObject(a.TsUi.styles)&&typeof a.TsUi.styles[h?.field??""]=="string"&&f.style.cssText!==a.TsUi.styles[h?.field??""]&&(f.style.cssText=a.TsUi.styles[h.field]))}}}function Fn(n,e,s){let t=n.get(e,!0),i=n.getColumn(s,!0);if(t==null||i==null)return!1;let o=!(n.records[t]&&n.records[t].recid==e),l=E(n.box).find(`${o?".tsg-grid-summary ":""}#grid_${n.name}_data_${t}_${i}`);return l.length==0?!1:(l.replace(n.getCellHTML(t,i,o)),!0)}function Hn(n,e,s=null){let t=E(n.box).find("#grid_"+n.name+"_frec_"+p.escapeId(e)),i=E(n.box).find("#grid_"+n.name+"_rec_"+p.escapeId(e));if(t.length>0){s==null&&(s=n.get(e,!0));let o=t.attr("line"),l=!(n.records[s]&&n.records[s].recid==e),a=n.url?.get??n.url;if(n.searchData.length>0&&!a)for(let d=0;d<n.last.searchIds.length;d++)n.last.searchIds[d]==s&&(s=d);let r=n.getRecordHTML(s,o,l);t.replace(r[0]),i.replace(r[1]);let c=n.records[s].TsUi?n.records[s].TsUi.style:"";return typeof c=="string"&&(t=E(n.box).find("#grid_"+n.name+"_frec_"+p.escapeId(e)),i=E(n.box).find("#grid_"+n.name+"_rec_"+p.escapeId(e)),t.attr("custom_style",c),i.attr("custom_style",c),t.hasClass("tsg-selected")&&(c=c.replace("background-color","none")),t[0].style.cssText="height: "+n.recordHeight+"px;"+c,i[0].style.cssText="height: "+n.recordHeight+"px;"+c),l&&n.resize(),!0}return!1}function Nn(n){let e=Date.now(),s=n.url?.get??n.url;if(n.total<=0&&!s&&n.searchData.length===0&&(n.total=n.records.length),!n.box)return;let t=n.trigger("refresh",{target:n.name});if(t.isCancelled===!0)return;n.show.header?E(n.box).find(`#grid_${n.name}_header`).html(p.lang(n.header)+"&#160;").show():E(n.box).find(`#grid_${n.name}_header`).hide(),n.show.toolbar?E(n.box).find("#grid_"+n.name+"_toolbar").show():E(n.box).find("#grid_"+n.name+"_toolbar").hide(),n.searchClose();let i=()=>{let d=0;for(;d<n.searches.length&&(n.searches[d].hidden||n.searches[d].simple===!1);)d++;return d>=n.searches.length?{field:"",label:""}:n.searches[d]};if(!n.multiSearch&&n.last.field=="all"){let d=i();n.last.field=d.field,n.last.label=d.label??""}if(n.last.field=="all"&&!n.show.searchAll&&(n.last.field=""),!n.last.field)if(n.show.searchAll)n.last.field="all",n.last.label="All Fields";else{let d=i();n.last.field=d.field,n.last.label=d.label??""}let o=E(n.box).find("#grid_"+n.name+"_search_all");for(let d=0;d<n.searches.length;d++)n.searches[d].field==n.last.field&&(n.last.label=n.searches[d].label??"");if(n.last.multi?o.attr("placeholder","["+p.lang("Multiple Fields")+"]"):o.attr("placeholder",p.lang("Search")+" "+p.lang(n.last.label,!0)),o.val()!=n.last.search){let d=n.last.search,u=o._w2field;u&&(d=u.format(d)),o.val(d)}n.refreshSearch(),n.refreshBody(),n.show.footer?E(n.box).find(`#grid_${n.name}_footer`).html(n.getFooterHTML()).show():E(n.box).find(`#grid_${n.name}_footer`).hide();let l=n.last.selection,a=n.records.length>0&&l.indexes.length==n.records.length,r=l.indexes.length>0&&n.searchData.length!==0&&l.indexes.length==n.last.searchIds.length;a||r?E(n.box).find("#grid_"+n.name+"_check_all").prop("checked",!0):E(n.box).find("#grid_"+n.name+"_check_all").prop("checked",!1),n.status();let c=n.find({"TsUi.expanded":!0},!0,!0);for(let d=0;d<c.length;d++){let u=n.records[c[d]].TsUi;u&&!Array.isArray(u.children)&&(u.expanded=!1)}return n.markSearch&&setTimeout(()=>{let d=[];for(let u=0;u<n.searchData.length;u++){let h=n.searchData[u],f=n.getSearch(h.field);if(!f||f.hidden)continue;let m=n.getColumn(h.field,!0);d.push({field:h.field,search:h.value,col:m})}d.length>0&&d.forEach(u=>{let h=E(n.box).find('td[col="'+u.col+'"]:not(.tsg-head)');p.marker(h,u.search)})},50),n.updateToolbar(n.last.selection),t.finish(),n.resize(),n.addRange("selection"),setTimeout(()=>{n.resize(),n.scroll()},1),n.reorderColumns&&!n.last.columnDrag?n.last.columnDrag=n.initColumnDrag():!n.reorderColumns&&n.last.columnDrag&&n.last.columnDrag.remove(),Date.now()-e}function Pn(n){if(n.multiSearch&&n.searchData.length>0){E(n.box).find(".tsg-grid-searches").length==0&&E(n.box).find(".tsg-grid-toolbar").css("height",n.last.toolbar_height+35+"px").append(`<div id="grid_${n.name}_searches" class="tsg-grid-searches"></div>`);let e=`
501
+ <span id="grid_${n.name}_search_logic" class="tsg-grid-search-logic"></span>
502
+ <div class="grid-search-line"></div>`;n.searchData.forEach((s,t)=>{let i=n.getSearch(s.field,!0),o=i!=null?n.searches[i]:null,l;if(o?.type=="enum"&&Array.isArray(s.value)?l=`<span class="grid-search-count">${s.value.length}</span>`:o?.type=="list"?l=s.text&&s.text!==s.value?`: ${s.text}`:`: ${s.value}`:l=`: ${s.value}`,o&&o.type=="date")if(s.operator=="between"){let a=s.value[0],r=s.value[1];Number(a)===a&&(a=p.formatDate(a)),Number(r)===r&&(r=p.formatDate(r)),l=`: ${a} - ${r}`}else{let a=s.value;Number(a)==a&&(a=p.formatDate(a));let r=s.operator;r=="more"&&(r="since"),r=="less"&&(r="before"),r.substr(0,5)=="more:"&&(r="since"),r=="null"&&(a=""),r=="not null"&&(a=""),l=`: ${r} ${a}`}e+=`<span class="tsg-action" data-click="searchFieldTooltip|${i}|${t}|this">
503
+ ${o?o.label??o.field:s.field}
504
+ ${l}
505
+ <span class="icon-chevron-down"></span>
506
+ </span>`}),e+=`
507
+ ${n.show.searchSave?`<div class="grid-search-line"></div>
508
+ <button class="tsg-btn grid-search-btn" data-click="searchSave" type="button">${p.lang("Save")}</button>
509
+ `:""}
510
+ <button class="tsg-btn grid-search-btn btn-remove" type="button"
511
+ data-click="searchReset">X</button>
512
+ `,E(n.box).find(`#grid_${n.name}_searches`).html(e),E(n.box).find(`#grid_${n.name}_search_logic`).html(p.lang(n.last.logic=="AND"?"All":"Any"))}else E(n.box).find(".tsg-grid-toolbar").css("height",n.last.toolbar_height+"px").find(".tsg-grid-searches").remove();n.searchSelected?(E(n.box).find(`#grid_${n.name}_search_all`).val(" ").prop("readOnly",!0),E(n.box).find(`#grid_${n.name}_search_name`).show().find(".name-text").html(n.searchSelected.text)):(E(n.box).find(`#grid_${n.name}_search_all`).prop("readOnly",!1),E(n.box).find(`#grid_${n.name}_search_name`).hide().find(".name-text").html("")),p.bindEvents(E(n.box).find(`#grid_${n.name}_searches .tsg-action, #grid_${n.name}_searches button`),n)}function jn(n){n.updateExpanded(),n.scroll();let e=n.getRecordsHTML(),s=n.getColumnsHTML(),t='<div id="grid_'+n.name+'_frecords" class="tsg-grid-frecords" style="margin-bottom: '+(p.scrollBarSize()-1)+'px;">'+e[0]+'</div><div id="grid_'+n.name+'_records" class="tsg-grid-records">'+e[1]+'</div><div id="grid_'+n.name+'_scroll1" class="tsg-grid-scroll1" style="height: '+p.scrollBarSize()+'px"></div><div id="grid_'+n.name+'_fcolumns" class="tsg-grid-fcolumns"> <table><tbody>'+s[0]+'</tbody></table></div><div id="grid_'+n.name+'_columns" class="tsg-grid-columns"> <table><tbody>'+s[1]+`</tbody></table></div><div class="tsg-intersection-marker" style="display: none; height: ${n.recordHeight-5}px">
513
+ <div class="top-marker"></div>
514
+ <div class="bottom-marker"></div>
515
+ </div>`,i=E(n.box).find(`#grid_${n.name}_body`,n.box).html(t),o=E(n.box).find(`#grid_${n.name}_records`,n.box),l=E(n.box).find(`#grid_${n.name}_frecords`,n.box);if(n.selectType=="row"&&(o.on("mouseover mouseout",{delegate:"tr"},a=>{let r=E(a.delegate).attr("index"),c=n.records[r]?.recid;E(n.box).find(`#grid_${n.name}_frec_${p.escapeId(c)}`).toggleClass("tsg-record-hover",a.type=="mouseover")}),l.on("mouseover mouseout",{delegate:"tr"},a=>{let r=E(a.delegate).attr("index"),c=n.records[r]?.recid;E(n.box).find(`#grid_${n.name}_rec_${p.escapeId(c)}`).toggleClass("tsg-record-hover",a.type=="mouseover")})),p.isMobile?o.append(l).on("click",{delegate:"tr"},a=>{let r=E(a.delegate).attr("index"),c=n.records[r]?.recid;n.click(c,a)}).on("touchstart",{delegate:"tr"},a=>{let r=E(a.delegate).attr("index"),c=n.records[r]?.recid;n.last.mobile_touch&&Date.now()-n.last.mobile_touch<350&&(a.preventDefault(),n.dblClick(c,a)),n.last.mobile_touch=Date.now(),setTimeout(()=>n.last.mobile_touch=null,350)}).on("contextmenu",{delegate:"tr"},a=>{let r=parseInt(E(a.delegate).attr("index")),c=n.records[r]?.recid,d=E(a.target).closest("td"),u=d.attr("col")?parseInt(d.attr("col")):void 0,h={index:r};c!=null&&(h.recid=c),u!=null&&(h.column=u),n.showContextMenu(a,h)}):o.add(l).on("click",{delegate:"tr"},a=>{let r=E(a.delegate).attr("index"),c=n.records[r]?.recid;c!="-none-"&&!n.last.inEditMode&&n.click(c,a)}).on("contextmenu",{delegate:"tr"},a=>{let r=parseInt(E(a.delegate).attr("index")),c=n.records[r]?.recid,d=E(a.target).closest("td"),u=d.attr("col")?parseInt(d.attr("col")):void 0,h={index:r};c!=null&&(h.recid=c),u!=null&&(h.column=u),n.showContextMenu(a,h)}).on("mouseover",{delegate:"tr"},a=>{n.last.rec_out=!1;let r=E(a.delegate).attr("index"),c=n.records[r]?.recid;r!==n.last.rec_over&&(n.last.rec_over=r,setTimeout(()=>{delete n.last.rec_out,n.trigger("mouseEnter",{target:n.name,originalEvent:a,index:r,recid:c}).finish()}))}).on("mouseout",{delegate:"tr"},a=>{let r=E(a.delegate).attr("index"),c=n.records[r]?.recid;n.last.rec_out=!0,setTimeout(()=>{let d=()=>{n.trigger("mouseLeave",{target:n.name,originalEvent:a,index:r,recid:c}).finish()};r!==n.last.rec_over&&d(),setTimeout(()=>{n.last.rec_out&&(delete n.last.rec_out,delete n.last.rec_over,d())})})}),i.data("scroll",{lastDelta:0,lastTime:0}).find(".tsg-grid-frecords").on("mousewheel DOMMouseScroll ",a=>{a.preventDefault();let r=i.data("scroll"),c=i.find(".tsg-grid-records"),d=typeof a.wheelDelta<"u"?-a.wheelDelta:a.detail||a.deltaY,u=c.prop("scrollTop");r.lastDelta+=d,d=Math.round(r.lastDelta),i.data("scroll",r),c.get(0).scroll({top:u+d,behavior:"smooth"})}),o.off(".body-global").on("scroll.body-global",{delegate:".tsg-grid-records"},a=>{n.scroll(a)}),E(n.box).find(".tsg-grid-body").off(".body-global").on("click.body-global dblclick.body-global contextmenu.body-global",{delegate:"td.tsg-head"},a=>{let r=parseInt(E(a.delegate).attr("col")),c=n.columns[r]??{field:String(r)};switch(a.type){case"click":n.columnClick(c.field,a);break;case"dblclick":n.columnDblClick(c.field,a);break;case"contextmenu":n.show.columnMenu?n.columnContextMenu(c.field,a):n.showContextMenu(a,{column:r??void 0});break}}).on("mouseover.body-global",{delegate:".tsg-col-header"},a=>{let r=E(a.delegate).parent().attr("col");n.columnTooltipShow(r,a),E(a.delegate).off(".tooltip").on("mouseleave.tooltip",()=>{n.columnTooltipHide(r,a)})}).on("click.body-global",{delegate:"input.tsg-select-all"},a=>{a.delegate.checked?n.selectAll():n.selectNone(),a.stopPropagation(),clearTimeout(n.last.kbd_timer??void 0)}).on("click.body-global",{delegate:".tsg-show-children, .tsg-col-expand"},a=>{a.stopPropagation();let r=E(a.target).parents("tr").attr("index");n.toggle(n.records[r].recid)}).on("click.body-global mouseover.body-global",{delegate:".tsg-info"},a=>{let r=E(a.delegate).closest("td"),c=r.parent(),d=n.columns[r.attr("col")],u=c.parents(".tsg-grid-body").hasClass("tsg-grid-summary");["mouseenter","mouseover"].includes(d?.info?.showOn?.toLowerCase())&&a.type=="mouseover"?n.showBubble(parseInt(c.attr("index")),parseInt(r.attr("col")),u).then(()=>{E(a.delegate).off(".tooltip").on("mouseleave.tooltip",()=>{ye.hide(n.name+"-bubble")})}):a.type=="click"&&(ye.hide(n.name+"-bubble"),n.showBubble(parseInt(c.attr("index")),parseInt(r.attr("col")),u))}).on("mouseover.body-global",{delegate:".tsg-clipboard-copy"},a=>{if(a.delegate._tooltipShow)return;let r=E(a.delegate).parent(),c=r.parent(),d=n.columns[r.attr("col")],u=c.parents(".tsg-grid-body").hasClass("tsg-grid-summary");ye.show({name:n.name+"-bubble",anchor:a.delegate,html:p.lang(typeof d?.clipboardCopy=="string"?d.clipboardCopy:"Copy to clipboard"),position:"top|bottom",offsetY:-2}),E(a.delegate).off(".tooltip").on("mouseleave.tooltip",h=>{ye.hide(n.name+"-bubble")}).on("click.tooltip",h=>{h.stopPropagation(),ye.update(n.name+"-bubble",p.lang("Copied")),n.clipboardCopy(c.attr("index"),r.attr("col"),u)}),a.delegate._tooltipShow=!0}).on("click.body-global",{delegate:".tsg-editable-checkbox"},a=>{let r=E(a.delegate).data();n.editChange.call(n,a.delegate,r.changeind,r.colind,a),n.updateToolbar()}),n.records.length===0&&n.msgEmpty?E(n.box).find(`#grid_${n.name}_body`).append(`<div id="grid_${n.name}_empty_msg" class="tsg-grid-empty-msg"><div>${p.lang(n.msgEmpty)}</div></div>`):E(n.box).find(`#grid_${n.name}_empty_msg`).length>0&&E(n.box).find(`#grid_${n.name}_empty_msg`).remove(),n.summary.length>0){let a=n.getSummaryHTML();E(n.box).find(`#grid_${n.name}_fsummary`).html(a?.[0]??"").show(),E(n.box).find(`#grid_${n.name}_summary`).html(a?.[1]??"").show()}else E(n.box).find(`#grid_${n.name}_fsummary`).hide(),E(n.box).find(`#grid_${n.name}_summary`).hide()}function Un(n){let e=n.trigger("destroy",{target:n.name});e.isCancelled!==!0&&(n.toolbar?.destroy?.(),E(n.box).find(`#grid_${n.name}_body`).length>0&&n.unmount(),delete se[n.name],e.finish())}function Gn(n){let e=[{id:"line-numbers",text:"Line #",checked:n.show.lineNumbers}];for(let i=0;i<n.columns.length;i++){let o=n.columns[i],l=o.text;o.hideable!==!1&&(!l&&o.tooltip&&(l=o.tooltip),l||(l="- column "+(i+1)+" -"),e.push({id:o.field,text:p.stripTags(l),checked:!o.hidden}))}if(((n.url?.get??n.url)&&n.show.skipRecords||n.show.saveRestoreState)&&e.push({text:"--"}),n.show.skipRecords){let i=p.lang("Skip")+`<input id="${n.name}_skip" type="text" class="tsg-input tsg-grid-skip" value="${n.offset}">`+p.lang("records");e.push({id:"tsg-skip",text:i,group:!1,icon:"tsg-icon-empty"})}n.show.saveRestoreState&&e.push({id:"tsg-stateSave",text:p.lang("Save Grid State"),icon:"tsg-icon-empty",group:!1},{id:"tsg-stateReset",text:p.lang("Restore Default State"),icon:"tsg-icon-empty",group:!1});let t=[];return e.forEach(i=>{i.text=p.lang(i.text),i.checked&&t.push(i.id)}),n.toolbar.set("tsg-column-on-off",{selected:t,items:e}),e}function Bn(n,e){if(n.columnGroups&&n.columnGroups.length)throw"Draggable columns are not currently supported with column groups.";let s=n,t={pressed:!1,targetPos:null,columnHead:null},i=(d,u)=>{let h=["tsg-col-number","tsg-col-expand","tsg-col-select"];u!==!0&&h.push("tsg-head-last");for(let f=0;f<h.length;f++)if(E(d).closest(".tsg-head").hasClass(h[f]))return!0;return!1};E(s.box).off(".colDrag").on("mousedown.colDrag",o);function o(d){if(t.pressed||t.numberPreColumnsPresent===0||d.button!==0)return;let u=".tsg-head.tsg-col-number, .tsg-head.tsg-col-expand, .tsg-head.tsg-col-select";if(!E(d.target).parents().hasClass("tsg-head")||i(d.target))return;t.pressed=!0,t.initialX=d.pageX,t.initialY=d.pageY,t.numberPreColumnsPresent=E(s.box).find(u).length;let h=t.columnHead=E(d.target).closest(".tsg-head"),f=t.originalPos=parseInt(h.attr("col"),10),m=s.trigger("columnDragStart",{originalEvent:d,origColumnNumber:f,target:h[0]});if(m.isCancelled===!0)return!1;let y=t.columns=E(s.box).find(".tsg-head:not(.tsg-head-last)");E(document).on("mouseup.colDrag",a),E(document).on("mousemove.colDrag",l);let x=s.columns[t.originalPos],b=p.lang(typeof x.text=="function"?x.text(x):x.text);t.ghost=j.html(`<span col="${t.originalPos}">${b}</span>`)[0],E(document.body).append(t.ghost),E(t.ghost).css({display:"none",left:d.pageX,top:d.pageY,opacity:1,margin:"3px 0 0 20px",padding:"3px","background-color":"white",position:"fixed","z-index":999999}).addClass(".tsg-grid-ghost"),t.offsets=[];for(let g=0,v=y.length;g<v;g++){let w=y[g].getBoundingClientRect();t.offsets.push(w.left)}m.finish()}function l(d){if(!t.pressed||!t.columnHead)return;let u=d.pageX,h=d.pageY;i(d.target,!0)||r(d),c(u,h)}function a(d){if(!t.pressed||!t.columnHead)return;t.pressed=!1;let u,h=()=>{let x=E(s.box).find(".tsg-grid-ghost");E(s.box).find(".tsg-intersection-marker").hide(),E(t.ghost).remove(),x.remove(),E(document).off(".colDrag"),t={}};if(d.pageX==t.initialX&&d.pageY==t.initialY){s.columnClick(s.columns[t.originalPos].field,d),h();return}let f=s.trigger("columnDragEnd",{originalEvent:d,target:t.columnHead[0],dragData:t});if(f.isCancelled===!0)return!1;let m=s.columns[t.originalPos],y=s.columns;t.originalPos!=t.targetPos&&t.targetPos!=null&&(y.splice(t.targetPos,0,p.clone(m)),y.splice(y.indexOf(m),1)),h(),s.refresh(),f.finish({targetColumn:(u??1)-1})}function r(d){if(E(d.target).closest("td").length==0)return;let u=E(d.target).closest("td"),h=u.hasClass("tsg-head-last")?s.columns.length:parseInt(u.attr("col"));if(t.targetPos!=h){let f=E(s.box).find(".tsg-grid-body").get(0).getBoundingClientRect(),m=E(d.target).closest("td").get(0).getBoundingClientRect();E(s.box).find(".tsg-intersection-marker").show().css({left:m.left-f.left+"px",height:m.height+"px"}),t.targetPos=h}}function c(d,u){E(t.ghost).css({left:d-10+"px",top:u-10+"px"}).show()}return{remove(){E(s.box).off(".colDrag"),s.last.columnDrag=!1}}}function Qn(n,e,s){let t=n.trigger("columnOnOff",{target:n.name,field:s,originalEvent:e});if(t.isCancelled===!0)return;let i=n.find({"TsUi.expanded":!0},!0);for(let o=0;o<i.length;o++){let l=n.records[o].TsUi;l&&!Array.isArray(l.children)&&(n.records[o].TsUi.expanded=!1)}if(s=="line-numbers")n.show.lineNumbers=!n.show.lineNumbers,n.refresh();else{let o=n.getColumn(s);o!=null&&o.hidden?n.showColumn(o.field):o!=null&&n.hideColumn(o.field)}t.finish()}function Vn(n){if(n.toolbar.render!=null)return;let e=n.toolbar.items||[];if(n.toolbar.items=[],n.toolbar=new he(p.extend({},n.toolbar,{name:n.name+"_toolbar",owner:n})),n.show.toolbarReload&&n.toolbar.items.push(p.extend({},n.buttons.reload)),n.show.toolbarColumns&&n.toolbar.items.push(p.extend({},n.buttons.columns)),n.show.toolbarSearch){let s=`
516
+ <div class="tsg-grid-search-input">
517
+ ${n.buttons.search.html}
518
+ <div id="grid_${n.name}_search_name" class="tsg-grid-search-name">
519
+ <span class="name-icon tsg-icon-search"></span>
520
+ <span class="name-text"></span>
521
+ <span class="name-cross tsg-action" data-click="searchReset">x</span>
522
+ </div>
523
+ <input type="text" id="grid_${n.name}_search_all" class="tsg-search-all" tabindex="-1"
524
+ autocapitalize="off" autocomplete="off" autocorrect="off" spellcheck="false"
525
+ placeholder="${p.lang(n.last.label,!0)}" value="${n.last.search}"
526
+ data-focus="searchSuggest" data-click="stop"
527
+ >
528
+ <div class="tsg-search-drop tsg-action" data-click="searchOpen"
529
+ style="${n.multiSearch?"":"display: none"}">
530
+ <span class="tsg-icon-drop"></span>
531
+ </div>
532
+ </div>`;n.toolbar.items.push({id:"tsg-search",type:"html",html:s,onRefresh:async t=>{await t.complete;let i=E(n.box).find(`#grid_${n.name}_search_all`);p.bindEvents(E(n.box).find(`#grid_${n.name}_search_all, .tsg-action`),n);let o=p.debounce(l=>{let a=l.target.value;n.liveSearch&&n.last.liveText!=a&&(n.last.liveText=a,n.search(n.last.field,a))},250);i.on("blur",()=>{n.last.liveText=""}).on("keyup",l=>{switch(l.keyCode){case 40:{n.searchSuggest(!0);break}case 38:{n.searchSuggest(!0,!0);break}case 13:{Ri.hide(n.name+"-search-suggest"),n.search(n.last.field,l.target.value);break}default:{o(l);break}}})}})}if(Array.isArray(e)){let s=e.map(t=>t.id);n.show.toolbarAdd&&!s.includes(n.buttons.add.id)&&n.toolbar.items.push(p.extend({},n.buttons.add)),n.show.toolbarEdit&&!s.includes(n.buttons.edit.id)&&n.toolbar.items.push(p.extend({},n.buttons.edit)),n.show.toolbarDelete&&!s.includes(n.buttons.delete.id)&&n.toolbar.items.push(p.extend({},n.buttons.delete)),n.show.toolbarSave&&!s.includes(n.buttons.save.id)&&((n.show.toolbarAdd||n.show.toolbarDelete||n.show.toolbarEdit)&&n.toolbar.items.push({type:"break",id:"tsg-break2"}),n.toolbar.items.push(p.extend({},n.buttons.save))),e=e.map(t=>n.buttons[t.name]?p.extend({},n.buttons[t.name],t):t)}n.toolbar.items.push(...e),n.toolbar.on("click",s=>{let t=n.trigger("toolbar",{target:s.target,originalEvent:s});if(t.isCancelled===!0)return;let i;switch(s.detail.item.id){case"tsg-reload":if(i=n.trigger("reload",{target:n.name}),i.isCancelled===!0)return!1;n.reload(),i.finish();break;case"tsg-column-on-off":if(s.detail.subItem){let o=s.detail.subItem.id;["tsg-stateSave","tsg-stateReset"].includes(o)?n[o.substring(5)]():o=="tsg-skip"||n.columnOnOff(s,s.detail.subItem.id)}else n.initColumnOnOff(),setTimeout(()=>{E(`#w2overlay-${n.name}_toolbar-drop .tsg-grid-skip`).off(".tsg-grid").on("click.tsg-grid",o=>{o.stopPropagation()}).on("keypress",o=>{o.keyCode==13&&(n.skip(o.target.value),n.toolbar.click("tsg-column-on-off"))})},100);break;case"tsg-add":if(i=n.trigger("add",{target:n.name,recid:null}),i.isCancelled===!0)return!1;i.finish();break;case"tsg-edit":{let o=n.getSelection(),l=null;if(o.length==1&&(l=o[0]),i=n.trigger("edit",{target:n.name,recid:l}),i.isCancelled===!0)return!1;i.finish();break}case"tsg-delete":n.delete();break;case"tsg-save":n.save();break}t.finish()}),n.toolbar.on("refresh",s=>{if(s.target=="tsg-search"){let t=n.searchData;setTimeout(()=>{n.searchInitInput(n.last.field,t.length==1?t[0].value:null)},1)}})}function qn(n){let e=n;E(n.box).find(".tsg-resizer").off(".grid-col-resize").on("click.grid-col-resize",function(s){s.stopPropagation(),s.preventDefault()}).on("mousedown.grid-col-resize",function(s){let t=s;if(!t)return;e.last.colResizing=!0,e.last.tmp={x:t.screenX,y:t.screenY,gx:t.screenX,gy:t.screenY,col:parseInt(E(this).attr("name"))},e.last.tmp.tds=E(e.box).find("#grid_"+e.name+'_body table tr:first-child td[col="'+e.last.tmp.col+'"]'),t.stopPropagation(),t.preventDefault();for(let r=0;r<e.columns.length;r++)e.columns[r].hidden||(e.columns[r].sizeOriginal==null&&(e.columns[r].sizeOriginal=e.columns[r].size??""),e.columns[r].size=e.columns[r].sizeCalculated??"");let i=e.trigger("columnResize",{target:e.name,resizeBy:0,originalEvent:t,column:e.last.tmp.col,field:e.columns[e.last.tmp.col].field}),o,l=function(r){if(e.last.colResizing!=!0)return;r||(r=window.event);let c=e.trigger("columnResizeMove",p.extend(i.detail,{resizeBy:r.screenX-e.last.tmp.gx,originalEvent:r}));if(c.isCancelled===!0)return;e.last.tmp.x=r.screenX-e.last.tmp.x,e.last.tmp.y=r.screenY-e.last.tmp.y;let d=parseInt(String(e.columns[e.last.tmp.col].size??0))+e.last.tmp.x+"px";e.columns[e.last.tmp.col].size=d,o&&clearTimeout(o),o=setTimeout(()=>{e.resizeRecords(),e.scroll()},100),e.last.tmp.tds.css({width:d}),e.last.tmp.x=r.screenX,e.last.tmp.y=r.screenY,c.finish()},a=function(r){E(document).off(".grid-col-resize"),e.resizeRecords(),e.scroll(),i.finish({originalEvent:r}),setTimeout(()=>{e.last.colResizing=!1},1)};E(document).off(".grid-col-resize").on("mousemove.grid-col-resize",l).on("mouseup.grid-col-resize",a)}).on("dblclick.grid-col-resize",function(s){let t=parseInt(E(this).attr("name"));e.columnAutoSize(t),s.stopPropagation(),s.preventDefault()}).each(s=>{let t=E(s).get(0).parentNode;E(s).css({height:t.clientHeight+"px","margin-left":t.clientWidth-3+"px"})})}function Wn(n){let e=E(n.box).find(`#grid_${n.name}_header`),s=E(n.box).find(`#grid_${n.name}_toolbar`),t=E(n.box).find(`#grid_${n.name}_fsummary`),i=E(n.box).find(`#grid_${n.name}_summary`),o=E(n.box).find(`#grid_${n.name}_footer`),l=E(n.box).find(`#grid_${n.name}_body`);n.show.header&&e.css({top:"0px",left:"0px",right:"0px"}),n.show.toolbar&&s.css({top:0+(n.show.header?p.getSize(e,"height"):0)+"px",left:"0px",right:"0px"}),n.summary.length>0&&(t.css({bottom:0+(n.show.footer?p.getSize(o,"height"):0)+"px"}),i.css({bottom:0+(n.show.footer?p.getSize(o,"height"):0)+"px",right:"0px"})),n.show.footer&&o.css({bottom:"0px",left:"0px",right:"0px"}),l.css({top:0+(n.show.header?p.getSize(e,"height"):0)+(n.show.toolbar?p.getSize(s,"height"):0)+"px",bottom:0+(n.show.footer?p.getSize(o,"height"):0)+(n.summary.length>0?p.getSize(i,"height"):0)+"px",left:"0px",right:"0px"})}function Yn(n){let e=n;E(n.box).find(".tsg-empty-record").remove();let s=E(n.box),t=E(n.box).find(":scope > div.tsg-grid-box"),i=E(n.box).find(`#grid_${n.name}_header`),o=E(n.box).find(`#grid_${n.name}_toolbar`),l=E(n.box).find(`#grid_${n.name}_summary`),a=E(n.box).find(`#grid_${n.name}_fsummary`),r=E(n.box).find(`#grid_${n.name}_footer`),c=E(n.box).find(`#grid_${n.name}_body`),d=E(n.box).find(`#grid_${n.name}_columns`),u=E(n.box).find(`#grid_${n.name}_fcolumns`),h=E(n.box).find(`#grid_${n.name}_records`),f=E(n.box).find(`#grid_${n.name}_frecords`),m=E(n.box).find(`#grid_${n.name}_scroll1`),y=String(n.total).length*8+10;y<34&&(y=34),n.lineNumberWidth!=null&&(y=n.lineNumberWidth);let x=!1,b=!1,g=0;for(let R=0;R<n.columns.length;R++){if(n.columns[R].frozen||n.columns[R].hidden)continue;let F=parseInt(n.columns[R].sizeCalculated?n.columns[R].sizeCalculated:String(n.columns[R].size??0));g+=F}if(h[0]?.clientWidth<g&&(x=!0),c[0]?.clientHeight-(d[0]?.clientHeight??0)<(E(h).find(":scope > table")[0]?.clientHeight??0)+(x?p.scrollBarSize():0)&&(b=!0),n.fixedBody){let R=t[0]?.clientHeight-(n.show.header?p.getSize(i,"height"):0)-(n.show.toolbar?p.getSize(o,"height"):0)-(l.css("display")!="none"?p.getSize(l,"height"):0)-(n.show.footer?p.getSize(r,"height"):0);c.css("height",R+"px")}else{let R=p.getSize(d,"height")+p.getSize(E(n.box).find("#grid_"+n.name+"_records table"),"height")+(x?p.scrollBarSize():0),F=R+(n.show.header?p.getSize(i,"height"):0)+(n.show.toolbar?p.getSize(o,"height"):0)+(l.css("display")!="none"?p.getSize(l,"height"):0)+(n.show.footer?p.getSize(r,"height"):0);t.css("height",F+"px"),c.css("height",R+"px"),s.css("height",p.getSize(t,"height")+"px")}let v=n.records.length,w=n.url?.get??n.url;if(n.searchData.length!=0&&!w&&(v=n.last.searchIds.length),n.fixedBody||(b=!1),x||b?(d.find(":scope > table > tbody > tr:nth-child(1) td.tsg-head-last").css("width",p.scrollBarSize()+"px").show(),h.css({top:(n.columnGroups.length>0&&n.show.columns?1:0)+p.getSize(d,"height")+"px","-webkit-overflow-scrolling":"touch","overflow-x":x?"auto":"hidden","overflow-y":b?"auto":"hidden"})):(d.find(":scope > table > tbody > tr:nth-child(1) td.tsg-head-last").hide(),h.css({top:(n.columnGroups.length>0&&n.show.columns?1:0)+p.getSize(d,"height")+"px",overflow:"hidden"}),h.length>0&&(n.last.vscroll.scrollTop=0,n.last.vscroll.scrollLeft=0)),x?(f.css("margin-bottom",p.scrollBarSize()+"px"),m.show()):(f.css("margin-bottom",0),m.hide()),f.css({overflow:"hidden",top:h.css("top")}),n.show.emptyRecords&&!b){let R=Math.floor((h[0]?.clientHeight??0)/n.recordHeight)-1,F=0;if(h[0]&&(F=h[0].scrollHeight-R*n.recordHeight),F>=n.recordHeight&&(F-=n.recordHeight,R++),n.fixedBody){for(let S=v;S<R;S++)T(S,n.recordHeight,n);T(R,F,n)}}function T(R,F,S){let $="",H="",Q="";$+='<tr class="'+(R%2?"tsg-even":"tsg-odd")+' tsg-empty-record" recid="-none-" style="height: '+F+'px">',H+='<tr class="'+(R%2?"tsg-even":"tsg-odd")+' tsg-empty-record" recid="-none-" style="height: '+F+'px">',S.show.lineNumbers&&($+='<td class="tsg-col-number"></td>'),S.show.selectColumn&&($+='<td class="tsg-grid-data tsg-col-select"></td>'),S.show.expandColumn&&($+='<td class="tsg-grid-data tsg-col-expand"></td>'),H+='<td class="tsg-grid-data-spacer" col="start" style="border-right: 0"></td>',S.reorderRows&&(H+='<td class="tsg-grid-data tsg-col-order" col="order"></td>');for(let Y=0;Y<S.columns.length;Y++){let ee=S.columns[Y];(ee.hidden||Y<S.last.vscroll.colIndStart||Y>S.last.vscroll.colIndEnd)&&!ee.frozen||(Q='<td class="tsg-grid-data" '+(ee.attr!=null?ee.attr:"")+' col="'+Y+'"></td>',ee.frozen?$+=Q:H+=Q)}$+='<td class="tsg-grid-data-last"></td> </tr>',H+='<td class="tsg-grid-data-last" col="end"></td> </tr>',E(S.box).find("#grid_"+S.name+"_frecords > table").append($),E(S.box).find("#grid_"+S.name+"_records > table").append(H)}let _,C;if(c.length>0){let R=parseInt(c[0].clientWidth)-(b?p.scrollBarSize():0)-(n.show.lineNumbers?y:0)-(n.reorderRows?26:0)-(n.show.selectColumn?26:0)-(n.show.expandColumn?26:0)-1;_=R,C=0;let F=!1;for(let S=0;S<n.columns.length;S++){let $=n.columns[S];($.gridMinWidth??0)>0&&(($.gridMinWidth??0)>_&&$.hidden!==!0&&($.hidden=!0,F=!0),($.gridMinWidth??0)<_&&$.hidden===!0&&($.hidden=!1,F=!0))}if(F===!0){n.refresh();return}for(let S=0;S<n.columns.length;S++){let $=n.columns[S];if($.hidden)continue;let H=String($.size??0);H.substr(H.length-2).toLowerCase()=="px"?(R-=parseFloat(H),$.sizeCalculated=H,$.sizeType="px"):(C+=parseFloat(H),$.sizeType="%",delete $.sizeCorrected)}if(C!=100&&C>0)for(let S=0;S<n.columns.length;S++){let $=n.columns[S];$.hidden||$.sizeType=="%"&&($.sizeCorrected=Math.round(parseFloat(String($.size??0))*100*100/C)/100+"%")}for(let S=0;S<n.columns.length;S++){let $=n.columns[S];$.hidden||$.sizeType=="%"&&($.sizeCorrected!=null?$.sizeCalculated=Math.floor(R*parseFloat(String($.sizeCorrected))/100)-1+"px":$.sizeCalculated=Math.floor(R*parseFloat(String($.size??0))/100)-1+"px")}}let D=0;for(let R=0;R<n.columns.length;R++){let F=n.columns[R];F.hidden||(F.min==null&&(F.min=20),parseInt(F.sizeCalculated??"0")<F.min&&(F.sizeCalculated=F.min+"px"),F.max!=null&&parseInt(F.sizeCalculated??"0")>F.max&&(F.sizeCalculated=F.max+"px"),D+=parseInt(F.sizeCalculated??"0"))}let O=parseInt(_)-D;if(O>0&&C>0){let R=0;for(;;){let F=n.columns[R];if(F==null){R=0;continue}if(F.hidden||F.sizeType=="px"){R++;continue}if(F.sizeCalculated=parseInt(F.sizeCalculated??"0")+1+"px",O--,O===0)break;R++}}else O>0&&d.find(":scope > table > tbody > tr:nth-child(1) td.tsg-head-last").css("width",p.scrollBarSize()+"px").show();let I=1;n.show.lineNumbers&&(I+=y),n.show.selectColumn&&(I+=26),n.show.expandColumn&&(I+=26);for(let R=0;R<n.columns.length;R++)n.columns[R].hidden||n.columns[R].frozen&&(I+=parseInt(n.columns[R].sizeCalculated??"0"));u.css("width",I+"px"),f.css("width",I+"px"),a.css("width",I+"px"),m.css("width",I+"px"),d.css({left:I+"px","padding-left":"0.5px"}),h.css({left:I+"px"}),l.css({left:I+"px"}),d.find(":scope > table > tbody > tr:nth-child(1) td").add(u.find(":scope > table > tbody > tr:nth-child(1) td")).each(R=>{E(R).hasClass("tsg-col-number")&&E(R).css("width",y+"px");let F=E(R).attr("col");if(F!=null){if(F=="start"){let S=0;for(let $=0;$<(e.last.vscroll.colIndStart??0);$++)!e.columns[$]||e.columns[$].frozen||e.columns[$].hidden||(S+=parseInt(e.columns[$].sizeCalculated??"0"));E(R).css("width",S+"px")}e.columns[F]&&E(R).css("width",e.columns[F].sizeCalculated??"")}if(E(R).hasClass("tsg-head-last"))if((e.last.vscroll.colIndEnd??0)+1<e.columns.length){let S=0;for(let $=(e.last.vscroll.colIndEnd??0)+1;$<e.columns.length;$++)!e.columns[$]||e.columns[$].frozen||e.columns[$].hidden||(S+=parseInt(e.columns[$].sizeCalculated??"0"));E(R).css("width",S+"px")}else E(R).css("width",p.scrollBarSize()+(O>0&&C===0?O:0)+"px")}),d.find(":scope > table > tbody > tr").length==3&&d.find(":scope > table > tbody > tr:nth-child(1) td").add(u.find(":scope > table > tbody > tr:nth-child(1) td")).html("").css({height:"0",border:"0",padding:"0",margin:"0"}),h.find(":scope > table > tbody > tr:nth-child(1) td").add(f.find(":scope > table > tbody > tr:nth-child(1) td")).each(R=>{E(R).hasClass("tsg-col-number")&&E(R).css("width",y+"px");let F=E(R).attr("col");if(F!=null){if(F=="start"){let S=0;for(let $=0;$<(e.last.vscroll.colIndStart??0);$++)!e.columns[$]||e.columns[$].frozen||e.columns[$].hidden||(S+=parseInt(e.columns[$].sizeCalculated??"0"));E(R).css("width",S+"px")}e.columns[F]&&E(R).css("width",e.columns[F].sizeCalculated??"")}if(E(R).hasClass("tsg-grid-data-last")&&E(R).parents(".tsg-grid-frecords").length===0)if((e.last.vscroll.colIndEnd??0)+1<e.columns.length){let S=0;for(let $=(e.last.vscroll.colIndEnd??0)+1;$<e.columns.length;$++)!e.columns[$]||e.columns[$].frozen||e.columns[$].hidden||(S+=parseInt(e.columns[$].sizeCalculated??"0"));E(R).css("width",S+"px")}else E(R).css("width",(O>0&&C===0?O:0)+"px")}),l.find(":scope > table > tbody > tr:nth-child(1) td").add(a.find(":scope > table > tbody > tr:nth-child(1) td")).each(R=>{E(R).hasClass("tsg-col-number")&&E(R).css("width",y+"px");let F=E(R).attr("col");if(F!=null){if(F=="start"){let S=0;for(let $=0;$<(e.last.vscroll.colIndStart??0);$++)!e.columns[$]||e.columns[$].frozen||e.columns[$].hidden||(S+=parseInt(e.columns[$].sizeCalculated??"0"));E(R).css("width",S+"px")}e.columns[F]&&E(R).css("width",e.columns[F].sizeCalculated??"")}E(R).hasClass("tsg-grid-data-last")&&E(R).parents(".tsg-grid-frecords").length===0&&E(R).css("width",p.scrollBarSize()+(O>0&&C===0?O:0)+"px")}),n.initResize(),n.refreshRanges(),(n.last.vscroll.scrollTop||n.last.vscroll.scrollLeft)&&h.length>0&&(d.prop("scrollLeft",n.last.vscroll.scrollLeft),h.prop("scrollTop",n.last.vscroll.scrollTop),h.prop("scrollLeft",n.last.vscroll.scrollLeft)),d.css("will-change","scroll-position")}function Xn(n){let e=n,s="",t="";if(n.show.columnHeaders)if(n.columnGroups.length>0){let l=o(!0),a=i(),r=o(!1);s=(l[0]??"")+(a[0]??"")+(r[0]??""),t=(l[1]??"")+(a[1]??"")+(r[1]??"")}else{let l=o(!0);s=l[0]??"",t=l[1]??""}return[s,t];function i(){let l="<tr>",a="<tr>",r="",c=e.columnGroups.length-1;e.columnGroups[c].text==null&&e.columnGroups[c].caption!=null&&(console.log("NOTICE: grid columnGroup.caption property is deprecated, please use columnGroup.text. Group -> ",e.columnGroups[c]),e.columnGroups[c].text=e.columnGroups[c].caption),e.columnGroups[e.columnGroups.length-1].text!=""&&e.columnGroups.push({text:""}),e.show.lineNumbers&&(l+='<td class="tsg-head tsg-col-number" col="line-number"> <div>&#160;</div></td>'),e.show.selectColumn&&(l+='<td class="tsg-head tsg-col-select" col="select"> <div style="height: 25px">&#160;</div></td>'),e.show.expandColumn&&(l+='<td class="tsg-head tsg-col-expand" col="expand"> <div style="height: 25px">&#160;</div></td>');let d=0;a+=`<td id="grid_${e.name}_column_start" class="tsg-head" col="start" style="border-right: 0"></td>`,e.reorderRows&&(a+='<td class="tsg-head tsg-col-order" col="order"> <div style="height: 25px">&#160;</div></td>');for(let u=0;u<e.columnGroups.length;u++){let h=e.columnGroups[u],f=e.columns[d]??{};h.colspan!=null&&(h.span=h.colspan),(h.span==null||h.span!=parseInt(h.span))&&(h.span=1),f.text==null&&f.caption!=null&&(console.log("NOTICE: grid column.caption property is deprecated, please use column.text. Column ->",f),f.text=f.caption);let m=0;for(let y=d;y<d+h.span;y++)e.columns[y]&&!e.columns[y].hidden&&m++;if(u==e.columnGroups.length-1&&(m=100),!(m<=0))if(h.main===!0){let y="";for(let g=0;g<e.sortData.length;g++)e.sortData[g].field==f.field&&((e.sortData[g].direction||"").toLowerCase()==="asc"&&(y="tsg-sort-up"),(e.sortData[g].direction||"").toLowerCase()==="desc"&&(y="tsg-sort-down"));let x="";f.resizable!==!1&&(x=`<div class="tsg-resizer" name="${d}"></div>`);let b=p.lang(typeof f.text=="function"?f.text(f):f.text);r=`<td id="grid_${e.name}_column_${d}" class="tsg-head ${y}" col="${d}" rowspan="2" colspan="${m}">`+x+` <div class="tsg-col-group tsg-col-header ${y?"tsg-col-sorted":""}"> <div class="${y}"></div>`+(b||"&#160;")+" </div></td>",f&&f.frozen?l+=r:a+=r}else{let y=p.lang(typeof h.text=="function"?h.text(h):h.text);r=`<td id="grid_${e.name}_column_${d}" class="tsg-head" col="${d}" colspan="${m}"> <div class="tsg-col-group" style="${h.style??""}">${y||"&#160;"}</div></td>`,f&&f.frozen?l+=r:a+=r}d+=h.span}return l+="<td></td></tr>",a+=`<td id="grid_${e.name}_column_end" class="tsg-head" col="end"></td></tr>`,[l,a]}function o(l){let a="<tr>",r="<tr>";e.show.lineNumbers&&(a+='<td class="tsg-head tsg-col-number" col="line-number"> <div>#</div></td>'),e.show.selectColumn&&(a+=`<td class="tsg-head tsg-col-select" col="select"> <div> <input type="checkbox" id="grid_${e.name}_check_all" class="tsg-select-all" tabindex="-1" style="${e.multiSelect==!1?"display: none;":""}" > </div></td>`),e.show.expandColumn&&(a+='<td class="tsg-head tsg-col-expand" col="expand"> <div>&#160;</div></td>');let c=0,d=0,u;r+=`<td id="grid_${e.name}_column_start" class="tsg-head" col="start" style="border-right: 0"></td>`,e.reorderRows&&(r+='<td class="tsg-head tsg-col-order" col="order"> <div>&#160;</div></td>');for(let h=0;h<e.columns.length;h++){let f=e.columns[h];if(f.text==null&&f.caption!=null&&(console.log("NOTICE: grid column.caption property is deprecated, please use column.text. Column -> ",f),f.text=f.caption),f.size==null&&(f.size="100%"),h==d&&(u=e.columnGroups[c++]||{},d=d+u.span),!((h<(e.last.vscroll.colIndStart??0)||h>(e.last.vscroll.colIndEnd??1/0))&&!f.frozen)&&!f.hidden&&(u.main!==!0||l)){let m=e.getColumnCellHTML(h);f&&f.frozen?a+=m:r+=m}}return a+='<td class="tsg-head tsg-head-last"><div>&#160;</div></td>',r+='<td class="tsg-head tsg-head-last" col="end"><div>&#160;</div></td>',a+="</tr>",r+="</tr>",[a,r]}}function Kn(n,e){let s=n.columns[e];if(s==null)return"";let t=n.reorderColumns&&(!n.columnGroups||!n.columnGroups.length)?" tsg-col-reorderable ":"",i="";for(let c=0;c<n.sortData.length;c++)n.sortData[c].field==s.field&&((n.sortData[c].direction||"").toLowerCase()==="asc"&&(i="tsg-sort-up"),(n.sortData[c].direction||"").toLowerCase()==="desc"&&(i="tsg-sort-down"));let o=n.last.selection.columns,l=!1;for(let c in o)for(let d=0;d<o[c].length;d++)o[c][d]==e&&(l=!0);let a=p.lang(typeof s.text=="function"?s.text(s):s.text);return'<td id="grid_'+n.name+"_column_"+e+'" col="'+e+'" class="tsg-head '+i+t+'">'+(s.resizable!==!1?'<div class="tsg-resizer" name="'+e+'"></div>':"")+' <div class="tsg-col-header '+(i?"tsg-col-sorted":"")+" "+(l?"tsg-col-selected":"")+'"> <div class="'+i+'"></div>'+(a||"&#160;")+" </div></td>"}function Jn(n,e,s){let t=E(n.box).find("#grid_"+n.name+"_column_"+e),i=n.columns[e],o=n.columnTooltip;ye.show({name:n.name+"-column-tooltip",anchor:t.get(0),html:i?.tooltip,position:o})}function Zn(n,e,s){ye.hide(n.name+"-column-tooltip")}function ei(n){let e=n.records.length,s=n.url?.get??n.url;n.searchData.length!=0&&!s&&(e=n.last.searchIds.length),e>n.vs_start?n.last.vscroll.show_extra=n.vs_extra:n.last.vscroll.show_extra=n.vs_start;let t=E(n.box).find(`#grid_${n.name}_records`),i=Math.floor((t.get(0)?.clientHeight||0)/n.recordHeight)+n.last.vscroll.show_extra+1;i<n.vs_start&&(i=n.vs_start),(!n.fixedBody||i>e)&&(i=e);let o=n.getRecordHTML(-1,0),l="<table><tbody>"+o[0],a="<table><tbody>"+o[1];l+='<tr id="grid_'+n.name+'_frec_top" line="top" style="height: 0px"> <td colspan="2000"></td></tr>',a+='<tr id="grid_'+n.name+'_rec_top" line="top" style="height: 0px"> <td colspan="2000"></td></tr>';for(let c=0;c<i;c++)o=n.getRecordHTML(c,c+1),l+=o[0],a+=o[1];let r=(e-i)*n.recordHeight;return l+='<tr id="grid_'+n.name+'_frec_bottom" rec="bottom" line="bottom" style="height: '+r+'px; vertical-align: top"> <td colspan="2000" style="border: 0"></td></tr><tr id="grid_'+n.name+'_frec_more" style="display: none; "> <td colspan="2000" class="tsg-load-more"></td></tr></tbody></table>',a+='<tr id="grid_'+n.name+'_rec_bottom" rec="bottom" line="bottom" style="height: '+r+'px; vertical-align: top"> <td colspan="2000" style="border: 0"></td></tr><tr id="grid_'+n.name+'_rec_more" style="display: none"> <td colspan="2000" class="tsg-load-more"></td></tr></tbody></table>',n.last.vscroll.recIndStart=0,n.last.vscroll.recIndEnd=i,[l,a]}function ti(n){if(n.summary.length===0)return;let e=n.getRecordHTML(-1,0),s="<table><tbody>"+e[0],t="<table><tbody>"+e[1];for(let i=0;i<n.summary.length;i++)e=n.getRecordHTML(i,i+1,!0),s+=e[0],t+=e[1];return s+="</tbody></table>",t+="</tbody></table>",[s,t]}function si(n,e,s,t){let i="",o="",l="",a=n.last.selection,r;if(e==-1){o+='<tr line="0">',l+='<tr line="0">',n.show.lineNumbers&&(o+='<td class="tsg-col-number" style="height: 0px"></td>'),n.show.selectColumn&&(o+='<td class="tsg-col-select" style="height: 0px"></td>'),n.show.expandColumn&&(o+='<td class="tsg-col-expand" style="height: 0px"></td>'),l+='<td class="tsg-grid-data tsg-grid-data-spacer" col="start" style="height: 0px; width: 0px"></td>',n.reorderRows&&(l+='<td class="tsg-col-order" style="height: 0px"></td>');for(let y=0;y<n.columns.length;y++){let x=n.columns[y];if(i='<td class="tsg-grid-data" col="'+y+'" style="height: 0px;"></td>',x.frozen&&!x.hidden)o+=i;else{if(x.hidden||y<n.last.vscroll.colIndStart||y>n.last.vscroll.colIndEnd)continue;l+=i}}return o+='<td class="tsg-grid-data-last" style="height: 0px"></td>',l+='<td class="tsg-grid-data-last" col="end" style="height: 0px"></td>',o+="</tr>",l+="</tr>",[o,l]}let c=n.url?.get??n.url;if(t!==!0)if(n.searchData.length>0&&!c){if(e>=n.last.searchIds.length)return"";e=n.last.searchIds[e]??e,r=n.records[e]}else{if(e>=n.records.length)return"";r=n.records[e]}else{if(e>=n.summary.length)return"";r=n.summary[e]}if(!r)return"";if(r.recid==null&&n.recid!=null){let y=n.parseField(r,n.recid);y!=null&&(r.recid=y)}let d=!1;a.indexes.indexOf(e)!=-1&&(d=!0);let u=r.TsUi?r.TsUi.style:"";(u==null||typeof u!="string")&&(u="");let h=r.TsUi?r.TsUi.class:"";if((h==null||typeof h!="string")&&(h=""),o+='<tr id="grid_'+n.name+"_frec_"+r.recid+'" recid="'+r.recid+'" line="'+s+'" index="'+e+'" class="'+(s%2===0?"tsg-even":"tsg-odd")+" tsg-record "+h+(d&&n.selectType=="row"?" tsg-selected":"")+(r.TsUi&&r.TsUi.editable===!1?" tsg-no-edit":"")+(r.TsUi&&r.TsUi.expanded===!0?" tsg-expanded":"")+'" style="height: '+n.recordHeight+"px; "+(!d&&u!=""?u:u.replace("background-color","none"))+'" '+(u!=""?'custom_style="'+u+'"':"")+">",l+='<tr id="grid_'+n.name+"_rec_"+r.recid+'" recid="'+r.recid+'" line="'+s+'" index="'+e+'" class="'+(s%2===0?"tsg-even":"tsg-odd")+" tsg-record "+h+(d&&n.selectType=="row"?" tsg-selected":"")+(r.TsUi&&r.TsUi.editable===!1?" tsg-no-edit":"")+(r.TsUi&&r.TsUi.expanded===!0?" tsg-expanded":"")+'" style="height: '+n.recordHeight+"px; "+(!d&&u!=""?u:u.replace("background-color","none"))+'" '+(u!=""?'custom_style="'+u+'"':"")+">",n.show.lineNumbers&&(o+='<td id="grid_'+n.name+"_cell_"+e+"_number"+(t?"_s":"")+'" class="tsg-col-number '+(d?" tsg-row-selected":"")+'"'+(n.reorderRows?' style="cursor: move"':"")+">"+(t!==!0?n.getLineHTML(s):"")+"</td>"),n.show.selectColumn&&(o+='<td id="grid_'+n.name+"_cell_"+e+"_select"+(t?"_s":"")+'" class="tsg-grid-data tsg-col-select">'+(t!==!0&&!(r.TsUi&&r.TsUi.hideCheckBox===!0)?' <div> <input class="tsg-grid-select-check" type="checkbox" tabindex="-1" '+(d?'checked="checked"':"")+' style="pointer-events: none"/> </div>':"")+"</td>"),n.show.expandColumn){let y="";r.TsUi?.expanded===!0?y="-":y="+",(r.TsUi?.expanded=="none"||!Array.isArray(r.TsUi?.children)||!r.TsUi?.children.length)&&(y="+"),r.TsUi?.expanded=="spinner"&&(y='<div class="tsg-spinner" style="width: 16px; margin: -2px 2px;"></div>'),o+='<td id="grid_'+n.name+"_cell_"+e+"_expand"+(t?"_s":"")+'" class="tsg-grid-data tsg-col-expand">'+(t!==!0?`<div>${y}</div>`:"")+"</td>"}l+='<td class="tsg-grid-data-spacer" col="start" style="border-right: 0"></td>',n.reorderRows&&(l+='<td id="grid_'+n.name+"_cell_"+e+"_order"+(t?"_s":"")+'" class="tsg-grid-data tsg-col-order" col="order">'+(t!==!0?'<div title="Drag to reorder">&nbsp;</div>':"")+"</td>");let f=0,m=0;for(;;){let y=1,x=n.columns[f];if(x==null)break;if(x.hidden){f++,m>0&&m--;continue}if(m>0){if(f++,n.columns[f]==null)break;r.TsUi.colspan[n.columns[f-1].field]=0,m--;continue}else if(r.TsUi){let g=r.TsUi.colspan,v=n.columns[f].field;g&&g[v]===0&&delete g[v]}if((f<(n.last.vscroll.colIndStart??0)||f>(n.last.vscroll.colIndEnd??1/0))&&!x.frozen){f++;continue}if(r.TsUi&&typeof r.TsUi.colspan=="object"){let g=parseInt(r.TsUi.colspan[x.field])||null;if(g!=null&&g>1){let v=0;for(let w=f;w<f+g&&!(w>=n.columns.length);w++)n.columns[w].hidden&&v++;y=g-v,m=g-1}}let b=n.getCellHTML(e,f,t,y);x.frozen?o+=b:l+=b,f++}return o+='<td class="tsg-grid-data-last"></td>',l+='<td class="tsg-grid-data-last" col="end"></td>',o+="</tr>",l+="</tr>",[o,l]}function ni(n,e){return"<div>"+e+"</div>"}function ii(n,e,s,t,i){let o=n,l=n.columns[s];if(l==null)return"";let a=t!==!0?n.records[e]:n.summary[e],{value:r,style:c,className:d,attr:u,divAttr:h,title:f}=n.getCellValue(e,s,t,!0),m=e!==-1?n.getCellEditable(e,s):"",y="max-height: "+n.recordHeight+"px;"+(l.clipboardCopy?"margin-right: 20px":""),x=!t&&a?.TsUi?.changes&&a.TsUi.changes[l.field]!=null,b=n.last.selection,g=!1,v="";if(b.indexes.indexOf(e)!=-1&&(g=!0),i==null&&(a?.TsUi?.colspan&&a.TsUi.colspan[l.field]?i=a.TsUi.colspan[l.field]:i=1),s===n.hierarchyColumn&&Array.isArray(a?.TsUi?.children)){let D=0,O=a.TsUi.parent_recid!=null?n.get(a.TsUi.parent_recid,!0):null;for(;O!=null;){D++;let R=n.records[O].TsUi;if(R!=null&&R.parent_recid!=null)O=n.get(R.parent_recid,!0);else break}if(a.TsUi.parent_recid)for(let R=0;R<D;R++)v+='<span class="tsg-show-children tsg-icon-empty"></span>';let I=a.TsUi?.children?.length>0?a.TsUi.expanded?"tsg-icon-collapse":"tsg-icon-expand":"tsg-icon-empty";a.TsUi?.children?.length>0&&(v+=`<span class="tsg-show-children ${I}"></span>`)}if(l.info===!0&&(l.info={}),l.info!=null){let D="tsg-icon-info";typeof l.info.icon=="function"?D=l.info.icon(a,{self:n,index:e,colIndex:s,summary:!!t}):typeof l.info.icon=="object"?D=l.info.icon[n.parseField(a,l.field)]||"":typeof l.info.icon=="string"&&(D=l.info.icon);let O=l.info.style||"";typeof l.info.style=="function"?O=l.info.style(a,{self:n,index:e,colIndex:s,summary:!!t}):typeof l.info.style=="object"?O=l.info.style[n.parseField(a,l.field)]||"":typeof l.info.style=="string"&&(O=l.info.style),v+=`<span class="tsg-info ${D}" style="${O}"></span>`}let w=r;if(m&&["checkbox","check"].indexOf(m.type)!=-1){let D=t?-(e+1):e;y+="text-align: center;",w=`<input tabindex="-1" type="checkbox" class="tsg-editable-checkbox"
533
+ data-changeInd="${D}" data-colInd="${s}" ${w?'checked="checked"':""}>`,v=""}if(w=`<div style="${y}" ${C(w,f)} ${h}>${v}${String(w)}</div>`,w==null&&(w=""),typeof l.render=="string"){let D=l.render.replace("|",":").split(":");["number","int","float","money","currency","percent","size"].includes(D[0])&&(c+="text-align: right;")}a?.TsUi&&(a.TsUi.styles==null&&(a.TsUi.styles=a.TsUi.style),typeof a.TsUi.styles=="object"&&(typeof a.TsUi.styles[s]=="string"&&(c+=a.TsUi.styles[s]+";"),typeof a.TsUi.styles[l.field]=="string"&&(c+=a.TsUi.styles[l.field]+";")),typeof a.TsUi.class=="object"&&(typeof a.TsUi.class[s]=="string"&&(d+=a.TsUi.class[s]+" "),typeof a.TsUi.class[l.field]=="string"&&(d+=a.TsUi.class[l.field]+" ")));let T=!1;g&&b.columns[e]?.includes(s)&&(T=!0);let _;return l.clipboardCopy&&(_='<span class="tsg-clipboard-copy tsg-icon-paste"></span>'),w='<td class="tsg-grid-data'+(T?" tsg-selected":"")+" "+d+(x?" tsg-changed":"")+'" id="grid_'+n.name+"_data_"+e+"_"+s+'" col="'+s+'" style="'+c+(l.style!=null?l.style:"")+'" '+(l.attr!=null?l.attr:"")+u+((i??0)>1?'colspan="'+i+'"':"")+">"+w+(_&&p.stripTags(w)?_:"")+"</td>",e===-1&&t===!0&&(w='<td class="tsg-grid-data" col="'+s+'" style="height: 0px; '+c+'" '+((i??0)>1?'colspan="'+i+'"':"")+"></td>"),w;function C(D,O){return O===void 0&&o.show.recordTitles&&(l.title!=null?(typeof l.title=="function"&&(O=l.title.call(o,a,{self:o,index:e,colIndex:s,summary:!!t})),typeof l.title=="string"&&(O=l.title)):O=p.stripTags(String(D).replace(/"/g,"''"))),O!=null?'title="'+String(O)+'"':""}}function oi(n,e,s,t){let i=t?n.summary[e]:n.records[e],o=n.columns[s],l=o?n.parseField(i,o.field):"";o&&typeof o.clipboardCopy=="function"&&(l=o.clipboardCopy(i,{self:n,index:e,colIndex:s,summary:!!t})),E(n.box).find("#grid_"+n.name+"_focus").text(l).get(0).select(),document.execCommand("copy")}function li(n,e,s,t){let i=n.columns[s]?.info;if(!i)return;let o="",l=n.records[e],a=E(n.box).find(`${t?".tsg-grid-summary":""} #grid_${n.name}_data_${e}_${s} .tsg-info`);if(n.last.bubbleEl&&ye.hide(n.name+"-bubble"),n.last.bubbleEl=a,i.fields==null){i.fields=[];for(let c=0;c<n.columns.length;c++){let d=n.columns[c];i.fields.push(d.field+(typeof d.render=="string"?":"+d.render:""))}}let r=i.fields;if(typeof r=="function"&&(r=r(l,{self:n,index:e,colIndex:s,summary:!!t})),typeof i.render=="function")o=i.render(l,{self:n,index:e,colIndex:s,summary:!!t});else if(Array.isArray(r)){o='<table cellpadding="0" cellspacing="0">';for(let c=0;c<r.length;c++){let d=String(r[c]).split(":");if(d[0]==""||d[0]=="-"||d[0]=="--"||d[0]=="---"){o+='<tr><td colspan=2><div style="border-top: '+(d[0]==""?"0":"1")+'px solid #C1BEBE; margin: 6px 0px;"></div></td></tr>';continue}let u=n.getColumn(d[0]??"");u==null&&(u={field:d[0]??"",text:d[0]??"",caption:d[0]});let h=u?n.parseField(l,u.field):"";if(l?.TsUi?.changes?.[u.field]!=null&&(h=l.TsUi.changes[u.field]),d.length>1)if(p.formatters[d[1]??""]){let f={self:n,value:h,params:d[2]||null,field:n.columns[s].field,index:e,colIndex:s};h=p.formatters[d[1]].call(n,l,f)}else console.log('ERROR: TsUtils.formatters["'+d[1]+'"] does not exists.');typeof h=="object"&&h.text!=null&&(h=h.text),!(i.showEmpty!==!0&&(h==null||h==""))&&(i.maxLength!=null&&typeof h=="string"&&h.length>i.maxLength&&(h=h.substr(0,i.maxLength)+"..."),o+="<tr><td>"+u.text+"</td><td>"+((h===0?"0":h)||"")+"</td></tr>")}o+="</table>"}else if(p.isPlainObject(r)){o='<table cellpadding="0" cellspacing="0">';for(let c in r){let d=r[c];if(d==""||d=="-"||d=="--"||d=="---"){o+='<tr><td colspan=2><div style="border-top: '+(d==""?"0":"1")+'px solid #C1BEBE; margin: 6px 0px;"></div></td></tr>';continue}let u=String(d).split(":"),h=n.getColumn(u[0]??"");h==null&&(h={field:u[0]??"",text:u[0]??"",caption:u[0]});let f=h?n.parseField(l,h.field):"";if(l?.TsUi?.changes?.[h.field]!=null&&(f=l.TsUi.changes[h.field]),u.length>1)if(p.formatters[u[1]??""]){let m={self:n,value:f,params:u[2]||null,field:n.columns[s].field,index:e,colIndex:s};f=p.formatters[u[1]].call(n,l,m)}else console.log('ERROR: TsUtils.formatters["'+u[1]+'"] does not exists.');typeof d=="function"&&(f=d(l,{self:n,index:e,colIndex:s,summary:!!t})),f?.text!=null&&(f=f.text),!(i.showEmpty!==!0&&(f==null||f==""))&&(i.maxLength!=null&&typeof f=="string"&&f.length>i.maxLength&&(f=f.substr(0,i.maxLength)+"..."),o+="<tr><td>"+c+"</td><td>"+((f===0?"0":f)||"")+"</td></tr>")}o+="</table>"}return ye.show(p.extend({name:n.name+"-bubble",html:o,anchor:a.get(0),position:"top|bottom",class:"tsg-info-bubble",style:"",hideOn:["doc-click"]},i.options??{})).hide(()=>[n.last.bubbleEl=null])}function ai(n,e,s){let t=n.columns[s],i=n.records[e];if(!i||!t)return null;let o=i.TsUi?i.TsUi.editable:null;if(o===!1)return null;if((o==null||o===!0)&&(o=Object.keys(t.editable??{}).length>0?t.editable:null,typeof t.editable=="function")){let l=n.getCellValue(e,s,!1);o=t.editable.call(n,i,{self:n,value:l,index:e,colIndex:s})}return o}function ri(n,e,s,t,i){let o=n.columns[s],l=t!==!0?n.records[e]:n.summary[e],a=n.parseField(l,o.field),r="",c="",d="",u="",h;if(l?.TsUi?.changes?.[o.field]!=null&&(a=l.TsUi.changes[o.field]),o.render!=null&&e!==-1){let f=o.render,m;if(typeof f=="string"){let y=f.toLowerCase().replace("|",":").split(":"),x=p.formatters[y[0]??""];o.options&&o.options.autoFormat===!1&&(x=void 0),f=x,m=y[1]}if(typeof f=="function"&&l!=null){let y;try{y=f.call(n,l,{self:n,value:a,params:m,field:n.columns[s].field,index:e,colIndex:s,summary:!!t})}catch(x){throw new Error(`Render function for column "${o.field}" in grid "${n.name}": -- `+x.message)}y!=null&&typeof y=="object"&&typeof y!="function"?(y.id!=null&&y.text!=null?a=y.text:typeof y.html=="string"||typeof y.html=="number"?a=String(y.html??"").trim():(a="",console.log("ERROR: render function should return a primitive or an object of the following structure.",{html:"",attr:"",style:"",class:"",divAttr:""},"... but it returned:",y)),d=y.attr??"",c=y.style??"",r=y.class??"",u=y.divAttr??"",h=y.title):a=String(y||"").trim()}if(typeof f=="object"){let y=f[a];y!=null&&y!==""&&(a=y)}}return a==null&&(a=""),i?{value:a,attr:d,style:c,className:r,divAttr:u,title:h}:a}function ci(n){return'<div> <div class="tsg-footer-left"></div> <div class="tsg-footer-right"></div> <div class="tsg-footer-center"></div></div>'}function ui(n,e){let s=n,t=n.url?.get??n.url,i=E(n.box).find(`#grid_${n.name}_records`),o=E(n.box).find(`#grid_${n.name}_frecords`);if(e){let S=e.target.scrollTop,$=e.target.scrollLeft;n.last.vscroll.scrollTop=S,n.last.vscroll.scrollLeft=$;let H=E(n.box).find(`#grid_${n.name}_columns`)[0],Q=E(n.box).find(`#grid_${n.name}_summary`)[0];H&&(H.scrollLeft=$),Q&&(Q.scrollLeft=$),o[0]&&(o[0].scrollTop=S)}n.last.bubbleEl&&(ye.hide(n.name+"-bubble"),n.last.bubbleEl=null);let l=null,a=null;if(n.disableCVS||n.columnGroups.length>0)l=0,a=n.columns.length-1;else{let S=i.prop("clientWidth"),$=0;for(let H=0;H<n.columns.length;H++){if(n.columns[H].frozen||n.columns[H].hidden)continue;let Q=parseInt(n.columns[H].sizeCalculated?n.columns[H].sizeCalculated:String(n.columns[H].size??0));$+Q+30>n.last.vscroll.scrollLeft&&l==null&&(l=H),$+Q-30>n.last.vscroll.scrollLeft+S&&a==null&&(a=H),$+=Q}a==null&&(a=n.columns.length-1)}if(l!=null&&(l<0&&(l=0),a<0&&(a=0),l==a&&(l>0?l--:a++),l!=n.last.vscroll.colIndStart||a!=n.last.vscroll.colIndEnd)){let S=E(n.box),$=Math.abs(l-n.last.vscroll.colIndStart),H=Math.abs(a-n.last.vscroll.colIndEnd);if($<5&&H<5){let Q=S.find(`.tsg-grid-columns #grid_${n.name}_column_start`),Y=S.find(".tsg-grid-columns .tsg-head-last"),ee=S.find(`#grid_${n.name}_records .tsg-grid-data-spacer`),Te=S.find(`#grid_${n.name}_records .tsg-grid-data-last`),be=S.find(`#grid_${n.name}_summary .tsg-grid-data-spacer`),We=S.find(`#grid_${n.name}_summary .tsg-grid-data-last`);if(l>n.last.vscroll.colIndStart)for(let W=n.last.vscroll.colIndStart;W<l;W++)S.find("#grid_"+n.name+"_columns #grid_"+n.name+"_column_"+W).remove(),S.find("#grid_"+n.name+'_records td[col="'+W+'"]').remove(),S.find("#grid_"+n.name+'_summary td[col="'+W+'"]').remove();if(a<n.last.vscroll.colIndEnd)for(let W=n.last.vscroll.colIndEnd;W>a;W--)S.find("#grid_"+n.name+"_columns #grid_"+n.name+"_column_"+W).remove(),S.find("#grid_"+n.name+'_records td[col="'+W+'"]').remove(),S.find("#grid_"+n.name+'_summary td[col="'+W+'"]').remove();if(l<n.last.vscroll.colIndStart)for(let W=(n.last.vscroll.colIndStart??0)-1;W>=l;W--)n.columns[W]&&(n.columns[W].frozen||n.columns[W].hidden)||(Q.after(n.getColumnCellHTML(W)),ee.each(de=>{let me=E(de).parent().attr("index"),ge='<td class="tsg-grid-data" col="'+W+'" style="height: 0px"></td>';me!=null&&(ge=n.getCellHTML(parseInt(me),W,!1)),E(de).after(ge)}),be.each(de=>{let me=E(de).parent().attr("index"),ge='<td class="tsg-grid-data" col="'+W+'" style="height: 0px"></td>';me!=null&&(ge=n.getCellHTML(parseInt(me),W,!0)),E(de).after(ge)}));if(a>n.last.vscroll.colIndEnd)for(let W=(n.last.vscroll.colIndEnd??0)+1;W<=a;W++)n.columns[W]&&(n.columns[W].frozen||n.columns[W].hidden)||(Y.before(n.getColumnCellHTML(W)),Te.each(de=>{let me=E(de).parent().attr("index"),ge='<td class="tsg-grid-data" col="'+W+'" style="height: 0px"></td>';me!=null&&(ge=n.getCellHTML(parseInt(me),W,!1)),E(de).before(ge)}),We.each(de=>{let me=E(de).parent().attr("index")||-1,ge=n.getCellHTML(parseInt(me),W,!0);E(de).before(ge)}));n.last.vscroll.colIndStart=l,n.last.vscroll.colIndEnd=a,n.resizeRecords()}else{n.last.vscroll.colIndStart=l,n.last.vscroll.colIndEnd=a;let Q=n.getColumnsHTML(),Y=n.getRecordsHTML(),ee=n.getSummaryHTML(),Te=S.find(`#grid_${n.name}_columns`),be=S.find(`#grid_${n.name}_records`),We=S.find(`#grid_${n.name}_frecords`),W=S.find(`#grid_${n.name}_summary`);Te.find("tbody").html(Q[1]),We.html(Y[0]),be.prepend(Y[1]),ee!=null&&W.html(ee[1]),setTimeout(()=>{be.find(":scope > table").filter(":not(table:first-child)").remove(),W[0]&&(W[0].scrollLeft=n.last.vscroll.scrollLeft)},1),n.resizeRecords()}}let r=n.records.length;if(r>n.total&&n.total!==-1&&(r=n.total),n.searchData.length!=0&&!t&&(r=n.last.searchIds.length),r===0||i.length===0||i.prop("clientHeight")===0)return;r>n.vs_start?n.last.vscroll.show_extra=n.vs_extra:n.last.vscroll.show_extra=n.vs_start;let c=Math.round(i.prop("scrollTop")/n.recordHeight+1),d=c+(Math.round(i.prop("clientHeight")/n.recordHeight)-1);if(c>r&&(c=r),d>=r-1&&(d=r),E(n.box).find("#grid_"+n.name+"_footer .tsg-footer-right").html((n.show.statusRange?p.formatNumber(n.offset+c)+"-"+p.formatNumber(n.offset+d)+(n.total!=-1?" "+p.lang("of")+' <span class="tsg-total">'+p.formatNumber(n.total)+"</span>":""):"")+(t&&n.show.statusBuffered?" ("+p.lang("buffered")+' <span class="tsg-buffered">'+p.formatNumber(r)+"</span>"+(n.offset>0?', skip <span class="tsg-skip">'+p.formatNumber(n.offset):"")+"</span>)":"")),!t&&(!n.fixedBody||n.total!=-1&&n.total<=n.vs_start))return;let u=Math.floor(i.prop("scrollTop")/n.recordHeight)-n.last.vscroll.show_extra,h=u+Math.floor(i.prop("clientHeight")/n.recordHeight)+n.last.vscroll.show_extra*2+1;u<1&&(u=1),h>n.total&&n.total!=-1&&(h=n.total);let f=i.find("#grid_"+n.name+"_rec_top"),m=i.find("#grid_"+n.name+"_rec_bottom"),y=o.find("#grid_"+n.name+"_frec_top"),x=o.find("#grid_"+n.name+"_frec_bottom");String(f.next().prop("id")).indexOf("_expanded_row")!=-1&&(f.next().remove(),y.next().remove()),n.total>h&&String(m.prev().prop("id")).indexOf("_expanded_row")!=-1&&(m.prev().remove(),x.prev().remove());let b=parseInt(f.next().attr("line")),g=parseInt(m.prev().attr("line")),v,w,T,_,C;if(b<=u||b==1||n.last.vscroll.pull_refresh){if(h<=g+n.last.vscroll.show_extra-2&&h!=n.total)return;for(n.last.vscroll.pull_refresh=!1;w=o.find("#grid_"+n.name+"_frec_top").next(),T=i.find("#grid_"+n.name+"_rec_top").next(),T.attr("line")!="bottom";)if(parseInt(T.attr("line"))<u)w.remove(),T.remove();else break;v=i.find("#grid_"+n.name+"_rec_bottom").prev(),_=v.attr("line"),_=="top"&&(_=u);for(let S=parseInt(_)+1;S<=h;S++)n.records[S-1]&&(T=n.records[S-1].TsUi,T&&!Array.isArray(T.children)&&(T.expanded=!1),C=n.getRecordHTML(S-1,S),m.before(C[1]),x.before(C[0]));F(),setTimeout(()=>{n.refreshRanges()},0)}else{if(u>=b-n.last.vscroll.show_extra+2&&u>1)return;for(;w=o.find("#grid_"+n.name+"_frec_bottom").prev(),T=i.find("#grid_"+n.name+"_rec_bottom").prev(),T.attr("line")!="top";)if(parseInt(T.attr("line"))>h)w.remove(),T.remove();else break;v=i.find("#grid_"+n.name+"_rec_top").next(),_=v.attr("line"),_=="bottom"&&(_=h);for(let S=parseInt(_)-1;S>=u;S--)n.records[S-1]&&(T=n.records[S-1].TsUi,T&&!Array.isArray(T.children)&&(T.expanded=!1),C=n.getRecordHTML(S-1,S),f.after(C[1]),y.after(C[0]));F(),setTimeout(()=>{n.refreshRanges()},0)}let D=(u-1)*n.recordHeight,O=(r-h)*n.recordHeight;O<0&&(O=0),f.css("height",D+"px"),y.css("height",D+"px"),m.css("height",O+"px"),x.css("height",O+"px"),n.last.vscroll.recIndStart=u,n.last.vscroll.recIndEnd=h,Math.floor(i.prop("scrollTop")/n.recordHeight)+Math.floor(i.prop("clientHeight")/n.recordHeight)+10>r&&n.last.vscroll.pull_more!==!0&&(r<n.total-n.offset||n.total==-1&&n.last.fetch.hasMore)&&(n.autoLoad===!0&&(n.last.vscroll.pull_more=!0,n.last.fetch.offset=(n.last.fetch.offset??0)+n.limit,n.request("load")),E(n.box).find("#grid_"+n.name+"_rec_more, #grid_"+n.name+"_frec_more").show().eq(1).off(".load-more").on("click.load-more",function(){E(this).find("td").html('<div><div style="width: 20px; height: 20px;" class="tsg-spinner"></div></div>'),s.last.vscroll.pull_more=!0,s.last.fetch.offset=(s.last.fetch.offset??0)+s.limit,s.request("load")}).find("td").html(s.autoLoad?'<div><div style="width: 20px; height: 20px;" class="tsg-spinner"></div></div>':'<div style="padding-top: 15px">'+p.lang("Load ${count} more...",{count:s.limit})+"</div>"));function F(){s.markSearch&&(clearTimeout(s.last.marker_timer??void 0),s.last.marker_timer=setTimeout(()=>{let S=[];for(let $=0;$<s.searchData.length;$++){let H=s.searchData[$],Q=s.getSearch(H.field);if(!Q||Q.hidden)continue;let Y=s.getColumn(H.field,!0);S.push({field:H.field,search:H.value,col:Y})}S.length>0&&S.forEach($=>{let H=E(s.box).find('td[col="'+$.col+'"]:not(.tsg-head)');p.marker(H,$.search)})},50))}}var P=j,Ve=class extends ne{columns;columnGroups;records;summary;searches;toolbar;ranges;contextMenu;searchMap;searchData;sortMap;sortData;savedSearches;defaultSearches;groupBy;total;recid;hierarchyColumn;last;header;url;limit;offset;postData;routeData;httpHeaders;show;stateId;hasFocus;autoLoad;fixedBody;recordHeight;lineNumberWidth;keyboard;selectType;liveSearch;multiSearch;multiSelect;multiSort;reorderColumns;reorderRows;showExtraOnSearch;markSearch;columnTooltip;disableCVS;nestedFields;vs_start;vs_extra;style;tabIndex;dataType;parser;advanceOnEdit;useLocalStorage;colTemplate;stateColProps;msgDelete;msgNotJSON;msgHTTPError;msgServerError;msgRefresh;msgNeedReload;msgEmpty;buttons;operators;defaultOperator;operatorsMap;onAdd;onEdit;onRequest;onLoad;onDelete;onSave;onSelect;onClick;onDblClick;onContextMenu;onContextMenuClick;onColumnClick;onColumnDblClick;onColumnContextMenu;onColumnResize;onColumnAutoResize;onSort;onSearch;onSearchOpen;onSearchClose;onChange;onRestore;onExpand;onCollapse;onError;onKeydown;onToolbar;onColumnOnOff;onCopy;onPaste;onSelectionExtend;onEditField;onRender;onRefresh;onReload;onResize;onDestroy;onStateSave;onStateRestore;onFocus;onBlur;onReorderRow;onSearchSave;onSearchRemove;onSearchSelect;onColumnSelect;onColumnDragStart;onColumnDragEnd;onResizerDblClick;onMouseEnter;onMouseLeave;constructor(e){if(super(e.name),this.name="",this.box=null,this.columns=[],this.columnGroups=[],this.records=[],this.summary=[],this.searches=[],this.toolbar={},this.ranges=[],this.contextMenu=[],this.searchMap={},this.searchData=[],this.sortMap={},this.sortData=[],this.savedSearches=[],this.defaultSearches=[],this.groupBy=null,this.total=0,this.recid=null,this.hierarchyColumn=0,this.last={field:"",label:"",logic:"AND",search:"",searchIds:[],selection:{indexes:[],columns:{}},saved_sel:null,multi:!1,fetch:{action:"",offset:null,start:0,response:0,options:null,controller:null,loaded:!1,hasMore:!1},vscroll:{scrollTop:0,scrollLeft:0,recIndStart:null,recIndEnd:null,colIndStart:0,colIndEnd:0,pull_more:!1,pull_refresh:!0,show_extra:0},sel_ind:null,sel_col:null,sel_type:null,sel_recid:null,idCache:{},move:null,cancelClick:null,inEditMode:!1,_edit:null,kbd_timer:null,marker_timer:null,click_time:null,click_recid:null,bubbleEl:null,colResizing:!1,tmp:null,copy_event:null,userSelect:"",columnDrag:!1,state:null,toolbar_height:0,groupBy_links:{}},this.header="",this.url="",this.limit=100,this.offset=0,this.postData={},this.routeData={},this.httpHeaders={},this.show={header:!1,toolbar:!1,footer:!1,columnMenu:!0,columnHeaders:!0,lineNumbers:!1,expandColumn:!1,selectColumn:!1,emptyRecords:!0,toolbarReload:!0,toolbarColumns:!1,toolbarSearch:!0,toolbarAdd:!1,toolbarEdit:!1,toolbarDelete:!1,toolbarSave:!1,searchAll:!0,searchLogic:!0,searchHiddenMsg:!1,searchSave:!0,statusRange:!0,statusBuffered:!1,statusRecordID:!0,statusSelection:!0,statusResponse:!0,statusSort:!1,statusSearch:!1,recordTitles:!1,selectionBorder:!0,selectionResizer:!0,skipRecords:!0,saveRestoreState:!0},this.stateId=null,this.hasFocus=!1,this.autoLoad=!0,this.fixedBody=!0,this.recordHeight=p.settings?.recordHeight??32,this.lineNumberWidth=34,this.keyboard=!0,this.selectType="row",this.liveSearch=!1,this.multiSearch=!0,this.multiSelect=!0,this.multiSort=!0,this.reorderColumns=!1,this.reorderRows=!1,this.showExtraOnSearch=0,this.markSearch=!0,this.columnTooltip="top|bottom",this.disableCVS=!1,this.nestedFields=!0,this.vs_start=150,this.vs_extra=5,this.style="",this.tabIndex=null,this.dataType=null,this.parser=null,this.advanceOnEdit=!0,this.useLocalStorage=!0,this.colTemplate={text:"",field:"",size:null,min:20,max:null,gridMinWidth:null,sizeCorrected:null,sizeCalculated:null,sizeOriginal:null,sizeType:null,hidden:!1,sortable:!1,sortMode:null,searchable:!1,resizable:!0,hideable:!0,autoResize:null,attr:"",style:"",render:null,title:null,tooltip:null,editable:{},frozen:!1,info:null,clipboardCopy:!1},this.stateColProps={text:!1,field:!0,size:!0,min:!1,max:!1,gridMinWidth:!1,sizeCorrected:!1,sizeCalculated:!0,sizeOriginal:!0,sizeType:!0,hidden:!0,sortable:!1,sortMode:!0,searchable:!1,resizable:!1,hideable:!1,autoResize:!1,attr:!1,style:!1,render:!1,title:!1,tooltip:!1,editable:!1,frozen:!0,info:!1,clipboardCopy:!1},this.msgDelete="Are you sure you want to delete ${count} ${records}?",this.msgNotJSON="Returned data is not in valid JSON format.",this.msgHTTPError="HTTP error. See console for more details.",this.msgServerError="Server error",this.msgRefresh="Refreshing...",this.msgNeedReload="Your remote data source record count has changed, reloading from the first record.",this.msgEmpty="",this.buttons={reload:{type:"button",id:"tsg-reload",icon:"tsg-icon-reload",tooltip:p.lang("Reload data in the list")},columns:{type:"menu-check",id:"tsg-column-on-off",icon:"tsg-icon-columns",tooltip:p.lang("Show/hide columns"),overlay:{align:"none"}},search:{type:"html",id:"tsg-search",html:'<div class="tsg-icon tsg-icon-search tsg-search-down tsg-action" data-click="searchShowFields"></div>'},add:{type:"button",id:"tsg-add",text:"Add New",tooltip:p.lang("Add new record"),icon:"tsg-icon-plus"},edit:{type:"button",id:"tsg-edit",text:"Edit",tooltip:p.lang("Edit selected record"),icon:"tsg-icon-pencil",batch:1,disabled:!0},delete:{type:"button",id:"tsg-delete",text:"Delete",tooltip:p.lang("Delete selected records"),icon:"tsg-icon-cross",batch:!0,disabled:!0},save:{type:"button",id:"tsg-save",text:"Save",tooltip:p.lang("Save changed records"),icon:"tsg-icon-check"}},this.operators={text:["is","begins","contains","ends","is not"],number:["=","between",">","<",">=","<=","!="],date:["is",{oper:"less",text:"before"},{oper:"more",text:"since"},"between"],list:["is"],hex:["is","between"],color:["is","begins","contains","ends"],enum:["in","not in"]},this.defaultOperator={text:"begins",number:"=",date:"is",list:"is",enum:"in",hex:"begins",color:"begins"},this.operatorsMap={text:"text",int:"number",float:"number",money:"number",currency:"number",percent:"number",hex:"hex",alphanumeric:"text",color:"color",date:"date",time:"date",datetime:"date",list:"list",combo:"text",enum:"enum",file:"enum",select:"list",radio:"list",checkbox:"list",toggle:"list"},this.onAdd=null,this.onEdit=null,this.onRequest=null,this.onLoad=null,this.onDelete=null,this.onSave=null,this.onSelect=null,this.onClick=null,this.onDblClick=null,this.onContextMenu=null,this.onContextMenuClick=null,this.onColumnClick=null,this.onColumnDblClick=null,this.onColumnContextMenu=null,this.onColumnResize=null,this.onColumnAutoResize=null,this.onSort=null,this.onSearch=null,this.onSearchOpen=null,this.onSearchClose=null,this.onChange=null,this.onRestore=null,this.onExpand=null,this.onCollapse=null,this.onError=null,this.onKeydown=null,this.onToolbar=null,this.onColumnOnOff=null,this.onCopy=null,this.onPaste=null,this.onSelectionExtend=null,this.onEditField=null,this.onRender=null,this.onRefresh=null,this.onReload=null,this.onResize=null,this.onDestroy=null,this.onStateSave=null,this.onStateRestore=null,this.onFocus=null,this.onBlur=null,this.onReorderRow=null,this.onSearchSave=null,this.onSearchRemove=null,this.onSearchSelect=null,this.onColumnSelect=null,this.onColumnDragStart=null,this.onColumnDragEnd=null,this.onResizerDblClick=null,this.onMouseEnter=null,this.onMouseLeave=null,p.extend(this,e),Array.isArray(this.records)){let t=[];this.records.forEach((i,o)=>{this.recid!=null&&i[this.recid]!=null&&(i.recid=i[this.recid]),i.recid==null&&console.log("ERROR: Cannot add records without recid. (obj: "+this.name+")"),i.TsUi?.summary===!0&&(this.summary.push(i),t.push(o))}),t.sort();for(let i=t.length-1;i>=0;i--)this.records.splice(t[i],1);this.processGroupBy()}Array.isArray(this.columns)&&this.columns.forEach((t,i)=>{t=p.extend({},this.colTemplate,t),this.columns[i]=t;let o=t.searchable;if(!(o==null||o===!1||this.getSearch(t.field)!=null))if(p.isPlainObject(o))this.addSearch(p.extend({field:t.field,label:t.text,type:"text"},o));else{let l=t.searchable,a="";t.searchable===!0&&(l="text",a='size="20"'),this.addSearch({field:t.field,label:t.text,type:l,attr:a})}}),Array.isArray(this.defaultSearches)&&this.defaultSearches.forEach((t,i)=>{t.id="default-"+i,t.icon??="tsg-icon-search"});let s=this.cache("searches");Array.isArray(s)&&s.forEach(t=>{this.savedSearches.push({id:t.id??"none",text:t.text??"none",icon:"tsg-icon-search",remove:!0,logic:t.logic??"AND",data:t.data??[]})}),this.initToolbar(),typeof this.box=="string"&&(this.box=P(this.box).get(0)),this.box&&this.render(this.box)}add(e,s){return us(this,e,s)}find(e,s,t){return ds(this,e,s,t)}set(e,s,t){return fs(this,e,s,t)}replace(e,s,t){return hs(this,e,s,t)}get(e,s){return ps(this,e,s)}getFirst(e){if(this.records.length==0)return null;let s=this.records[0]??null,t=this.last.searchIds;return this.searchData.length>0&&(Array.isArray(t)&&t.length>0?s=this.records[t[e||0]]??null:s=null),s}remove(...e){return ms(this,...e)}processGroupBy(){return gs(this)}addColumn(e,s){return jt(this,e,s)}removeColumn(...e){return Ut(this,...e)}getColumn(e,s){return Gt(this,e,s)}updateColumn(e,s){return Bt(this,e,s)}toggleColumn(...e){return Qt(this,...e)}showColumn(...e){return Vt(this,...e)}hideColumn(...e){return qt(this,...e)}addSearch(e,s){return Us(this,e,s)}removeSearch(...e){return Gs(this,...e)}getSearch(e,s){return Bs(this,e,s)}toggleSearch(...e){return Qs(this,...e)}showSearch(...e){return Vs(this,...e)}hideSearch(...e){return qs(this,...e)}getSearchData(e){return Ws(this,e)}localSort(e,s){return ys(this,e,s)}localSearch(e){return bs(this,e)}getRangeData(e,s){return xs(this,e,s)}addRange(e){return vs(this,e)}removeRange(...e){return Ts(this,...e)}refreshRanges(){return ws(this)}select(...e){return $s(this,...e)}unselect(...e){return Ms(this,...e)}compareSelection(e){return Ds(this,e)}selectAll(){return Is(this)}selectNone(e){return Os(this,e)}updateToolbar(e,s){return zs(this,e,s)}getSelectionRows(e){return Ls(this,e)}getSelectionCells(){return As(this)}getSelection(e){return Fs(this,e)}search(e,s){return Ys(this,e,s)}searchOpen(e={}){return Xs(this,e)}searchClose(){return Ks(this)}searchFieldTooltip(e,s,t){return Js(this,e,s,t)}searchSuggest(e,s,t){return Zs(this,e,s,t)}searchSave(){return en(this)}cache(e){return tn(this,e)}cacheSave(e,s){return sn(this,e,s)}searchReset(e){return nn(this,e)}searchShowFields(e){return on(this,e)}searchInitInput(e,s){return ln(this,e,s)}clear(e){return _s(this,e)}reset(e){return ks(this,e)}skip(e,s){this.url?.get??this.url?(this.offset=parseInt(e),this.offset>this.total&&(this.offset=this.total-this.limit),(this.offset<0||!p.isInt(this.offset))&&(this.offset=0),this.clear(!0),this.reload(s)):console.log("ERROR: grid.skip() can only be called when you have remote data source.")}load(e,s){return Cs(this,e,s)}reload(e){return Es(this,e)}request(e,s,t,i){return Ss(this,e,s,t,i)}requestComplete(e,s,t,i,o){let l=e.error??!1;e.error==null&&e.status==="error"&&(l=!0),this.last.fetch.response=(Date.now()-this.last.fetch.start)/1e3,setTimeout(()=>{this.show.statusResponse&&this.status(p.lang("Server Response ${count} seconds",{count:this.last.fetch.response}))},10),this.last.vscroll.pull_more=!1,this.last.vscroll.pull_refresh=!0;let a="load";this.last.fetch.action=="save"&&(a="save"),this.last.fetch.action=="delete"&&(a="delete");let r=this.trigger(a,{target:this.name,error:l,data:e,lastFetch:this.last.fetch});if(r.isCancelled===!0){o();return}if(l)this.error(p.lang(e.message||this.msgServerError)),o(e);else if(typeof this.parser=="function"?(e=this.parser(e),typeof e!="object"&&console.log("ERROR: Your parser did not return proper object")):e==null?e={error:!0,message:p.lang(this.msgNotJSON)}:Array.isArray(e)&&(e={error:l,records:e,total:e.length}),s=="load"){if(e.total==null&&(e.total=-1),e.records==null&&(e.records=[],this.last.groupBy_links={}),e.records.length==this.limit){let d=this.records.length+e.records.length;this.last.fetch.hasMore=d!=this.total}else this.last.fetch.hasMore=!1,this.total=this.offset+(this.last.fetch.offset??0)+e.records.length;if(this.last.fetch.hasMore||P(this.box).find("#grid_"+this.name+"_rec_more, #grid_"+this.name+"_frec_more").hide(),this.last.fetch.offset===0)this.records=[],this.summary=[],this.last.groupBy_links={};else if(e.total!=-1&&parseInt(String(e.total))!=this.total){let d=this;return this.message(p.lang(this.msgNeedReload)).ok(()=>{delete d.last.fetch.offset,d.reload()}),new Promise(u=>{u()})}p.isInt(e.total)&&(this.total=parseInt(e.total)),e.records&&e.records.forEach(d=>{this.recid&&(d.recid=this.parseField(d,this.recid)),d.recid==null&&(d.recid="recid-"+this.records.length),d.TsUi?.summary===!0?this.summary.push(d):this.records.push(d)}),e.groupBy!=null&&(this.groupBy=e.groupBy),this.processGroupBy(),e.summary&&(this.summary=[],e.summary.forEach(d=>{this.recid&&(d.recid=this.parseField(d,this.recid)),d.recid==null&&(d.recid="recid-"+this.summary.length),this.summary.push(d)}))}else if(s=="delete")return this.reset(),this.reload();(this.url?.get??this.url)||(this.localSort(),this.localSearch()),this.total=parseInt(String(this.total)),this.last.fetch.offset===0?this.refresh():(this.scroll(),this.resize()),typeof t=="function"&&t(e),i(e),r.finish(),this.last.fetch.loaded=!0}error(e){let s=this.trigger("error",{target:this.name,message:e});s.isCancelled!==!0&&(this.message(e),s.finish())}getChanges(e){let s=[];typeof e>"u"&&(e=this.records);for(let t=0;t<e.length;t++){let i=e[t];if(i?.TsUi){if(i.TsUi.changes!=null){let o={};o[this.recid||"recid"]=i.recid,s.push(p.extend(o,i.TsUi.changes))}i.TsUi.expanded!==!0&&i.TsUi.children&&i.TsUi.children.length&&s.push(...this.getChanges(i.TsUi.children))}}return s}mergeChanges(){let e=this.getChanges();for(let t=0;t<e.length;t++){let i=e[t],o=this.get(i[this.recid||"recid"]);if(o!=null){for(let l in i)if(!(l=="recid"||this.recid&&l==this.recid)){typeof i[l]=="object"&&(i[l]=i[l].text);try{s(o,l,i[l])}catch(a){console.log("ERROR: Cannot merge. ",a?.message||"",a)}o.TsUi&&delete o.TsUi.changes}}}this.refresh();function s(t,i,o){let l=i.split(".");l.length==1?t[i]=o:(t=t[l[0]],l.shift(),s(t,l.join("."),o))}}save(e){return Rs(this,e)}editField(e,s,t,i){return Hs(this,e,s,t,i)}editChange(e,s,t,i){return Ns(this,e,s,t,i)}editDone(e,s,t){return Ps(this,e,s,t)}delete(e){let s=this.trigger("delete",{target:this.name,force:e});if(e&&this.message(),s.isCancelled===!0)return;e=s.detail.force;let t=this.getSelection();if(t.length===0)return;if(this.msgDelete!=""&&!e){this.confirm({text:p.lang(this.msgDelete,{count:t.length,records:p.lang(t.length==1?"record":"records")}),width:380,height:170,yes_text:p.lang("Delete"),yes_class:"tsg-btn-red",no_text:p.lang("Cancel")}).yes(o=>{o.detail.self.close(),this.delete(!0)}).no(o=>{o.detail.self.close()});return}if(this.url?.remove??this.url)this.request("delete");else if(typeof t[0]!="object")this.selectNone(),this.remove(...t);else{let o=t;for(let l=0;l<o.length;l++){let a=o[l],r=this.columns[a.column].field,c=this.get(a.recid,!0),d=c!=null?this.records[c]:null;c!=null&&r!="recid"&&d!=null&&(this.records[c][r]="",d.TsUi?.changes&&delete d.TsUi.changes[r])}this.update()}s.finish()}click(e,s){return hn(this,e,s)}columnClick(e,s){return pn(this,e,s)}columnDblClick(e,s){return mn(this,e,s)}columnContextMenu(e,s){return gn(this,e,s)}columnAutoSize(e){return yn(this,e)}columnAutoSizeAll(){return bn(this)}focus(e){return xn(this,e)}blur(e){return vn(this,e)}keydown(e){return Tn(this,e)}scrollIntoView(e,s,t,i){return wn(this,e,s,t,i)}scrollToColumn(e){return _n(this,e)}dblClick(e,s){return kn(this,e,s)}showContextMenu(e,s){return Cn(this,e,s)}contextMenuClick(e,s,t){return En(this,e,s,t)}toggle(e,s){return Sn(this,e,s)}expand(e,s){return Rn(this,e,s)}collapse(e,s){return $n(this,e,s)}updateExpanded(){return Mn(this)}sort(e,s,t){return Dn(this,e,s,t)}copy(e,s){return In(this,e,s)}getCellCopy(e,s){return On(this,e,s)}paste(e,s){return zn(this,e,s)}resize(){return Ln(this)}update({cells:e,fullCellRefresh:s,ignoreColumns:t}={}){return An(this,{cells:e,fullCellRefresh:s,ignoreColumns:t})}refreshCell(e,s){return Fn(this,e,s)}refreshRow(e,s=null){return Hn(this,e,s)}refresh(){return Nn(this)}refreshSearch(){return Pn(this)}refreshBody(){return jn(this)}render(e){let s=Date.now(),t=this;typeof e=="string"&&(e=P(e).get(0));let i=this.trigger("render",{target:this.name,box:e??this.box});if(i.isCancelled===!0||(e!=null&&(this.unmount(),this.box=e),!this.box))return;let o=this.url?.get??this.url;this.reset(!0),P(this.box).attr("name",this.name).addClass("tsg-reset tsg-grid tsg-inactive").html('<div class="tsg-grid-box"> <div id="grid_'+this.name+'_header" class="tsg-grid-header"></div> <div id="grid_'+this.name+'_toolbar" class="tsg-grid-toolbar"></div> <div id="grid_'+this.name+'_body" class="tsg-grid-body"></div> <div id="grid_'+this.name+'_fsummary" class="tsg-grid-body tsg-grid-summary"></div> <div id="grid_'+this.name+'_summary" class="tsg-grid-body tsg-grid-summary"></div> <div id="grid_'+this.name+'_footer" class="tsg-grid-footer"></div> <textarea id="grid_'+this.name+'_focus" class="tsg-grid-focus-input" '+(this.tabIndex?'tabindex="'+this.tabIndex+'"':"")+(p.isMobile?"readonly":"")+"></textarea></div>"),this.selectType!="row"&&P(this.box).addClass("tsg-ss"),P(this.box).length>0&&(P(this.box)[0].style.cssText+=this.style);let l=P(this.box).find(`#grid_${this.name}_toolbar`);if(this.toolbar!=null&&this.toolbar.render(l[0]),this.last.toolbar_height=l.prop("offsetHeight"),this.last.field&&this.last.field!="all"){let f=this.searchData;setTimeout(()=>{this.searchInitInput(this.last.field,f.length==1?f[0].value:null)},1)}P(this.box).find(`#grid_${this.name}_footer`).html(this.getFooterHTML()),this.last.state||(this.last.state=this.stateSave(!0)),this.stateRestore(),o&&(this.clear(),this.refresh());let a=!1;for(let f=0;f<this.searches.length;f++)if(this.searches[f].hidden){a=!0;break}a?(this.searchReset(!1),o||setTimeout(()=>{this.searchReset()},1)):this.reload(),P(this.box).find(`#grid_${this.name}_focus`).on("focus",f=>{clearTimeout(this.last.kbd_timer??void 0),this.hasFocus||this.focus()}).on("blur",f=>{clearTimeout(this.last.kbd_timer??void 0),this.last.kbd_timer=setTimeout(()=>{this.hasFocus&&this.blur()},100)}).on("paste",f=>{let m=f.clipboardData?f.clipboardData:null;if(m){let y=m.items;y.length==2&&(y.length==2&&y[1].kind=="file"&&(y=[y[1]]),y.length==2&&y[0].type=="text/plain"&&y[1].type=="text/html"&&(y=[y[1]]));let x=[];for(let b in y){let g=y[b];if(g.kind==="file"){let v=g.getAsFile();x.push({kind:"file",data:v})}else if(g.kind==="string"&&(g.type==="text/plain"||g.type==="text/html")){f.preventDefault();let v=m.getData("text/plain");v.indexOf("\r")!=-1&&v.indexOf(`
534
+ `)==-1&&(v=v.replace(/\r/g,`
535
+ `)),x.push({kind:g.type=="text/html"?"html":"text",data:v})}}x.length===1&&x[0].kind!="file"&&(x=x[0].data),se[this.name].paste(x,f),f.preventDefault()}}).on("keydown",function(f){se[t.name].keydown.call(se[t.name],f)});let r;return P(this.box).off("mousedown.mouseStart").on("mousedown.mouseStart",c),this.updateToolbar(),i.finish(),this.last.observeResize=new ResizeObserver(()=>{this.resize(),this.scroll()}),this.last.observeResize.observe(this.box),Date.now()-s;function c(f){if(f.which==1&&(t.last.userSelect=="text"&&(t.last.userSelect="",P(t.box).find(".tsg-grid-body").css("user-select","none")),!(t.selectType=="row"&&(P(f.target).parents().hasClass("tsg-head")||P(f.target).hasClass("tsg-head")))&&!(t.last.move&&t.last.move.type=="expand"))){if(f.altKey)P(t.box).find(".tsg-grid-body").css("user-select","text"),t.selectNone(),t.last.move={type:"text-select"},t.last.userSelect="text";else{let m=f.target,y={x:f.offsetX-10,y:f.offsetY-10},x=!1;for(;m&&!(m.classList&&m.classList.contains("tsg-grid"));)m.tagName&&m.tagName.toUpperCase()=="TD"&&(x=!0),m.tagName&&m.tagName.toUpperCase()!="TR"&&x==!0&&(y.x+=m.offsetLeft,y.y+=m.offsetTop),m=m.parentNode;let b=P(f.target).parents("tr").attr("index"),g=t.records[b]?.recid;if(t.selectType=="cell"&&!f.shiftKey){let T=parseInt(P(f.target).closest("td").attr("col")),_=T;isNaN(T)&&(T=0,_=t.columns.length-1),t.addRange({name:"selection-preview",range:[{recid:g,column:T},{recid:g,column:_}],class:"tsg-selection-preview"})}if(t.last.move={x:f.screenX,y:f.screenY,divX:0,divY:0,focusX:y.x,focusY:y.y,recid:g,column:parseInt(f.target.tagName.toUpperCase()=="TD"?P(f.target).attr("col"):P(f.target).parents("td").attr("col")),type:"select",ghost:!1,start:!0},t.last.move.recid==null&&t.records.length>0){t.last.move.type="select-column";let T=parseInt(P(f.target).closest("td").attr("col")),_=t.records[0].recid,C=t.records[t.records.length-1].recid;t.addRange({name:"selection-preview",range:[{recid:_,column:T},{recid:C,column:T}],class:"tsg-selection-preview"})}let v=f.target,w=P(t.box).find("#grid_"+t.name+"_focus");if(t.last.move){let T=t.last.move.focusX,_=t.last.move.focusY,C=P(v).parents("table").parent();(C.hasClass("tsg-grid-records")||C.hasClass("tsg-grid-frecords")||C.hasClass("tsg-grid-columns")||C.hasClass("tsg-grid-fcolumns")||C.hasClass("tsg-grid-summary"))&&(T=t.last.move.focusX-P(t.box).find("#grid_"+t.name+"_records").prop("scrollLeft"),_=t.last.move.focusY-P(t.box).find("#grid_"+t.name+"_records").prop("scrollTop")),(P(v).hasClass("tsg-grid-footer")||P(v).parents("div.tsg-grid-footer").length>0)&&(_=P(t.box).find("#grid_"+t.name+"_footer").get(0).offsetTop),C.hasClass("tsg-scroll-wrapper")&&C.parent().hasClass("tsg-toolbar")&&(T=t.last.move.focusX-C.prop("scrollLeft")),w.css({left:T-10,top:_})}setTimeout(()=>{t.last.inEditMode||(["INPUT","TEXTAREA","SELECT"].includes(v.tagName)?v.focus():w.get(0)!==document.activeElement&&w.get(0)?.focus({preventScroll:!0}))},50),!t.multiSelect&&!t.reorderRows&&t.last.move.type=="drag"&&delete t.last.move}if(t.reorderRows==!0){let m=f.target;if(m.tagName.toUpperCase()!="TD"&&(m=P(m).parents("td")[0]),P(m).hasClass("tsg-col-number")||P(m).hasClass("tsg-col-order")){let y=t.getSelection();if(y.length>0&&typeof y[0]=="object"){let C=y;t.select([...new Set(C.map(D=>D.recid))]),y=[...new Set(t.getSelectionCells().map(D=>D.recid))]}y.indexOf(t.last.move.recid)==-1&&(t.selectNone(),t.select([t.last.move.recid]),y=[t.last.move.recid]);let x=[],b=C=>{let D=t.get(C);D?.TsUi?.children&&D.TsUi.children.forEach(O=>{t.get(O.recid)&&(x.push(O.recid),b(O.recid))})};y.forEach(C=>b(C)),y=[...y,...x],t.last.move.reorder=!0;let g=P(t.box).find(".tsg-even.tsg-empty-record").css("background-color"),v=P(t.box).find(".tsg-odd.tsg-empty-record").css("background-color");P(t.box).find(".tsg-even td").filter(":not(.tsg-col-number)").css("background-color",g),P(t.box).find(".tsg-odd td").filter(":not(.tsg-col-number)").css("background-color",v);let w=t.last.move,T=P(t.box).find(".tsg-grid-records");if(!w.ghost){let C=y.map(O=>P(t.box).find(`#grid_${t.name}_rec_${O}`)),D=C[0].parents("table").find("tr:first-child").get(0).cloneNode(!0);w.offsetY=f.offsetY,w.from=y,w.pos={top:C[0].get(0).offsetTop-1,left:C[C.length-1].get(0).offsetLeft},w.ghost=P(C.map(O=>O.get(0).cloneNode(!0))),w.ghost.removeAttr("id"),w.ghost.find("td").css({"border-top":"1px solid silver","border-bottom":"1px solid silver"}),C.forEach(O=>{O.find("td").remove(),O.append(`<td colspan="1000"><div class="tsg-reorder-empty" style="height: ${t.recordHeight-2}px"></div></td>`)}),T.append('<div id="grid_'+t.name+'_ghost_line" style="position: absolute; z-index: 999999; pointer-events: none; width: 100%;"></div>'),T.append('<table id="grid_'+t.name+'_ghost" style="position: absolute; z-index: 999998; opacity: 0.9; pointer-events: none;"></table>'),P(t.box).find("#grid_"+t.name+"_ghost").append(D).append(w.ghost)}P(t.box).find("#grid_"+t.name+"_ghost").css({top:w.pos.top+"px",left:w.pos.left+"px"})}else t.last.move.reorder=!1}P(document).on("mousemove.tsg-"+t.name,d).on("mouseup.tsg-"+t.name,u),f.stopPropagation()}}function d(f){if(!f.target.tagName)return;let m=t.last.move;if(!m||!["select","select-column"].includes(m.type)||(m.divX=f.screenX-m.x,m.divY=f.screenY-m.y,Math.abs(m.divX)<=1&&Math.abs(m.divY)<=1))return;if(t.last.cancelClick=!0,t.reorderRows==!0&&t.last.move.reorder){let v=P(f.target).parents("tr").attr("index"),w=t.records[v]?.recid;if((w=="-none-"||w==null)&&(w="bottom"),m.from.indexOf(w)==-1){let _=P(t.box).find("#grid_"+t.name+"_rec_"+w);P(t.box).find(".insert-before"),_.addClass("insert-before"),m.lastY=f.screenY,m.to=w;let C={top:_.get(0)?.offsetTop,left:_.get(0)?.offsetLeft},D=P(t.box).find("#grid_"+t.name+"_ghost_line");C?D.css({top:C.top+"px",left:m.pos.left+"px","border-top":"2px solid #769EFC"}):D.css({"border-top":"2px solid transparent"})}P(t.box).find("#grid_"+t.name+"_ghost").css({top:m.pos.top+m.divY+"px",left:m.pos.left+"px"});return}t.selectType=="row"&&m.start&&m.recid&&(t.selectNone(),m.start=!1);let y=[],x=f.target.tagName.toUpperCase()=="TR"?P(f.target).attr("index"):P(f.target).parents("tr").attr("index"),b=t.records[x]?.recid;if(b==null){if(t.selectType=="row"||t.last.move&&t.last.move.type=="select")return;let g=parseInt(P(f.target).parents("td").attr("col"));if(isNaN(g))t.removeRange("column-selection"),P(t.box).find(".tsg-grid-columns .tsg-col-header, .tsg-grid-fcolumns .tsg-col-header").removeClass("tsg-col-selected"),P(t.box).find(".tsg-col-number").removeClass("tsg-row-selected"),delete m.colRange;else{let v=g+"-"+g;m.column<g&&(v=m.column+"-"+g),m.column>g&&(v=g+"-"+m.column);let w=[],T=v.split("-");for(let _=parseInt(T[0]??"0");_<=parseInt(T[1]??"0");_++)w.push(_);if(m.colRange!=v&&m.type=="select-column"&&(r=t.trigger("columnSelect",{target:t.name,columns:w}),r.isCancelled!==!0)){m.colRange=v;let _=t.records[0].recid,C=t.records[t.records.length-1].recid;t.addRange({name:"selection-preview",range:[{recid:_,column:T[0]},{recid:C,column:T[1]}],class:"tsg-selection-preview"})}}}else{let g=t.get(m.recid,!0);if(g==null||t.records[g]&&t.records[g].recid!=m.recid)return;let v=t.get(b,!0);if(v==null)return;let w=parseInt(m.column),T=parseInt(f.target.tagName.toUpperCase()=="TD"?P(f.target).attr("col"):P(f.target).parents("td").attr("col"));if(isNaN(w)&&isNaN(T)&&(w=0,T=t.columns.length-1),g>v){let C=g;g=v,v=C}let _="ind1:"+g+",ind2;"+v+",col1:"+w+",col2:"+T;if(m.range==_)return;m.range=_;for(let C=g;C<=v;C++)if(!(t.last.searchIds.length>0&&t.last.searchIds.indexOf(C)==-1))if(t.selectType!="row"){if(w>T){let D=w;w=T,T=D}for(let D=w;D<=T;D++)t.columns[D].hidden||y.push({recid:t.records[C].recid,column:D})}else y.push(t.records[C].recid);if(t.selectType!="row"){let C=y[0],D=y[y.length-1];t.addRange({name:"selection-preview",range:[{recid:C?.recid,column:C?.column},{recid:D?.recid,column:D?.column}],class:"tsg-selection-preview"}),m.newRange=y}else if(t.multiSelect){let C=t.getSelection();for(let D=0;D<y.length;D++)C.indexOf(y[D])==-1&&t.select(y[D]);for(let D=0;D<C.length;D++)y.indexOf(C[D])==-1&&t.unselect(C[D])}}}function u(f){let m=t.last.move;if(setTimeout(()=>{t.last.cancelClick=null},1),!(P(f.target).parents().hasClass(".tsg-head")||P(f.target).hasClass(".tsg-head"))){if(t.removeRange("selection-preview"),m&&["select","select-column"].includes(m.type)){if(m.colRange!=null&&r.isCancelled!==!0){let y=m.colRange.split("-"),x=[];for(let b=0;b<t.records.length;b++){let g=[];for(let v=parseInt(y[0]);v<=parseInt(y[1]);v++)g.push(v);x.push({recid:t.records[b].recid,column:g})}r.finish(),t.selectNone(!0),t.select(x)}else m.newRange!=null&&(t.selectNone(!0),t.select(...m.newRange));if(t.reorderRows==!0&&t.last.move.reorder)if(m.to!=null){let y=t.trigger("reorderRow",{target:t.name,recid:m.from,moveBefore:m.to});if(y.isCancelled===!0){h(),delete t.last.move;return}let x=m.from.map(v=>t.get(v,!0)),b=t.get(m.to,!0);m.to=="bottom"&&(b=t.records.length);let g=x.map(v=>t.records[v]);x!=null&&b!=null&&(t.records.splice(x[0],x.length),x[0]>b?t.records.splice(b,0,...g):t.records.splice(b-1,0,...g)),t.sortData=[],P(t.box).find(`#grid_${t.name}_columns .tsg-col-header`).removeClass("tsg-col-sorted"),h(),t.selectNone(!0),t.select(m.from),y.finish()}else h()}delete t.last.move,P(document).off(".tsg-"+t.name)}}function h(){P(t.box).find(`#grid_${t.name}_ghost`).remove(),P(t.box).find(`#grid_${t.name}_ghost_line`).remove(),t.refresh(),delete t.last.move}}unmount(){super.unmount(),this.toolbar?.unmount(),this.last.observeResize?.disconnect()}destroy(){return Un(this)}initColumnOnOff(){return Gn(this)}initColumnDrag(e){return Bn(this,e)}columnOnOff(e,s){return Qn(this,e,s)}initToolbar(){return Vn(this)}initResize(){return qn(this)}resizeBoxes(){return Wn(this)}resizeRecords(){return Yn(this)}getSearchesHTML(){return an(this)}getOperators(e,s){return rn(this,e,s)}initOperator(e){return cn(this,e)}initSearchLists(e){return un(this,e)}initSearches(){return dn(this)}getColumnsHTML(){return Xn(this)}getColumnCellHTML(e){return Kn(this,e)}columnTooltipShow(e,s){return Jn(this,e,s)}columnTooltipHide(e,s){return Zn(this,e,s)}getRecordsHTML(){return ei(this)}getSummaryHTML(){return ti(this)}scroll(e){return ui(this,e)}getRecordHTML(e,s,t){return si(this,e,s,t)}getLineHTML(e){return ni(this,e)}getCellHTML(e,s,t,i){return ii(this,e,s,t,i)}clipboardCopy(e,s,t){return oi(this,e,s,t)}showBubble(e,s,t){return li(this,e,s,t)}getCellEditable(e,s){return ai(this,e,s)}getCellValue(e,s,t,i){return ri(this,e,s,t,i)}getFooterHTML(){return ci(this)}status(e){return Wt(this,e)}lock(e,s){return Yt(this,e,s)}unlock(e){return Xt(this,e)}stateSave(e){return Kt(this,e)}stateRestore(e){return Jt(this,e)}stateReset(){return Zt(this)}parseField(e,s){return es(this,e,s)}prepareData(){return ts(this)}nextCell(e,s,t){return ss(this,e,s,t)}prevCell(e,s,t){return ns(this,e,s,t)}nextRow(e,s,t){return is(this,e,s,t)}prevRow(e,s,t){return os(this,e,s,t)}selectionSave(){return ls(this)}selectionRestore(e){return as(this,e)}message(e){return rs(this,e)}confirm(e){return cs(this,e)}};var di=V,L=j,qe=class extends ne{header;url;method;routeData;formURL;formHTML;page;pageStyle;recid;fields;actions;record;original;dataType;saveCleanRecord;postData;httpHeaders;toolbar;tabs;style;focus;autosize;nestedFields;tabindexBase;isGenerated;last;onRequest;onLoad;onValidate;onSubmit;onProgress;onSave;onChange;onInput;onRender;onRefresh;onResize;onDestroy;onAction;onToolbar;onError;msgRefresh;msgSaving;msgServerError;ALL_TYPES;LIST_TYPES;TsFIELD_TYPES;constructor(e){super(e.name),this.name="",this.header="",this.box=null,this.url="",this.method=null,this.routeData={},this.formURL="",this.formHTML="",this.page=0,this.pageStyle="",this.recid=null,this.fields=[],this.actions={},this.record={},this.original=null,this.dataType=null,this.saveCleanRecord=!0,this.postData={},this.httpHeaders={},this.toolbar={},this.tabs={},this.style="",this.focus=0,this.autosize=!0,this.nestedFields=!0,this.tabindexBase=0,this.isGenerated=!1,this.last={fetchCtrl:null,fetchOptions:null,errors:[]},this.onRequest=null,this.onLoad=null,this.onValidate=null,this.onSubmit=null,this.onProgress=null,this.onSave=null,this.onChange=null,this.onInput=null,this.onRender=null,this.onRefresh=null,this.onResize=null,this.onDestroy=null,this.onAction=null,this.onToolbar=null,this.onError=null,this.msgRefresh="Loading...",this.msgSaving="Saving...",this.msgServerError="Server error",this.ALL_TYPES=["text","textarea","email","pass","password","int","float","money","currency","percent","hex","alphanumeric","color","date","time","datetime","toggle","checkbox","radio","check","checks","list","combo","enum","file","select","switch","map","array","div","custom","html","empty","columns"],this.LIST_TYPES=["select","radio","check","checks","list","combo","enum","switch"],this.TsFIELD_TYPES=["int","float","money","currency","percent","hex","alphanumeric","color","date","time","datetime","list","combo","enum","file"],p.extend(this,e);let s=e.record,t=e.original,i=e.fields,o=e.toolbar,l=e.tabs;if(Object.assign(this,{record:{},original:null,fields:[],tabs:{},toolbar:{},handlers:[]}),i){let r=a(i);this.fields=r.fields,!l&&r.tabs.length>0&&(l=r.tabs)}if(Array.isArray(l)){p.extend(this.tabs,{tabs:[]});for(let r=0;r<l.length;r++){let c=l[r];typeof c=="object"?(this.tabs.tabs.push(c),c.active===!0&&(this.tabs.active=c.id)):this.tabs.tabs.push({id:c,text:c})}}else p.extend(this.tabs,l);p.extend(this.toolbar,o);for(let r in s)p.isPlainObject(s[r])?this.record[r]=p.clone(s[r]):this.record[r]=s[r];for(let r in t)this.original==null&&(this.original={}),p.isPlainObject(t[r])?this.original[r]=p.clone(t[r]):this.original[r]=t[r];this.formURL!==""?fetch(this.formURL).then(r=>r.text()).then(r=>{this.formHTML=r,this.isGenerated=!0,this.box&&this.render(this.box)}):!this.formURL&&!this.formHTML?(this.formHTML=this.generateHTML(),this.isGenerated=!0):this.formHTML&&(this.isGenerated=!0),typeof this.box=="string"&&(this.box=L(this.box).get(0)),this.box&&this.render(this.box);function a(r){let c=[],d=[];if(p.isPlainObject(r)){let m=function(x){let b=["html"];return x.html==null&&(x.html={}),Object.keys(x).forEach((g=>{b.includes(g)||["label","attr","style","text","span","page","column","anchor","group","groupStyle","groupTitleStyle","groupCollapsible"].includes(g)&&(x.html[g]=x[g],delete x[g])})),x},y=function(x,b){let g=["style","html"];Object.keys(x).forEach((v=>{g.includes(v)||["span","column","attr","text","label"].includes(v)&&x[v]&&!b.html[v]&&(b.html[v]=x[v])}))};var u=m,h=y;let f=r;r=[],Object.keys(f).forEach(x=>{let b=f[x];if(b.type=="group"){if(b.text=x,p.isPlainObject(b.fields)){let g=b.fields;b.fields=[],Object.keys(g).forEach(v=>{let w=g[v];w.field=v,b.fields.push(m(w))})}r.push(b)}else if(b.type=="tab"){let g={id:x,text:x};b.style&&(g.style=b.style),d.push(g);let v=a(b.fields).fields;v.forEach(w=>{w.html=w.html||{},w.html.page=d.length-1,y(b,w)}),r.push(...v)}else b.field=x,r.push(m(b))})}return r.forEach(f=>{if(f.type=="group"){let m={group:f.text||"",groupStyle:f.style||"",groupTitleStyle:f.titleStyle||"",groupCollapsible:f.collapsible===!0};Array.isArray(f.fields)&&f.fields.forEach(y=>{let x=p.clone(y);x.html==null&&(x.html={}),p.extend(x.html,m),["span","column","attr","label","page"].forEach(b=>{x.html[b]==null&&f[b]!=null&&(x.html[b]=f[b])}),x.field==null&&x.name!=null&&(console.log("NOTICE: form field.name property is deprecated, please use field.field. Field ->",f),x.field=x.name),c.push(x)})}else{let m=p.clone(f);m.field==null&&m.name!=null&&(console.log("NOTICE: form field.name property is deprecated, please use field.field. Field ->",f),m.field=m.name),c.push(m)}}),{fields:c,tabs:d}}}get(e,s){if(arguments.length===0){let t=[];for(let i=0;i<this.fields.length;i++)this.fields[i].field!=null&&t.push(this.fields[i].field);return t}else{for(let t=0;t<this.fields.length;t++)if(this.fields[t].field==e)return s===!0?t:this.fields[t];return null}}set(e,s){for(let t=0;t<this.fields.length;t++)if(this.fields[t].field==e)return p.extend(this.fields[t],s),delete this.fields[t].TsField,this.refresh(e),!0;return!1}getValue(e,s){if(this.nestedFields){let t;try{let i=s===!0?this.original:this.record;t=String(e).split(".").reduce((o,l)=>o[l],i)}catch{}return t}else return this.record[e]}setValue(e,s,t){if((s===""||s==null||Array.isArray(s)&&s.length===0||p.isPlainObject(s)&&Object.keys(s).length==0)&&(s=null),this.nestedFields)try{let i=this.record;return String(e).split(".").map((o,l,a)=>{a.length-1!==l?(i[o]||(i[o]={}),i=i[o]):i[o]=s}),t||this.setFieldValue(e,s),!0}catch{return!1}else return this.record[e]=s,t||this.setFieldValue(e,s),!0}rememberOriginal(){this.original==null&&(Object.keys(this.record).length>0?this.original=p.clone(this.record):this.original={})}getFieldValue(e){let s=this.get(e);if(s==null)return;let t=s.el,i=this.getValue(e),o=this.getValue(e,!0),l=t.value;if(["int","float","percent","money","currency"].includes(s.type)&&(l=s.TsField.clean(l)),["radio"].includes(s.type)){let r=L(t).closest(".tsg-field-group").find("input:checked").get(0);r?l=s.options.items[L(r).data("index")].id:l=null}if(["toggle","checkbox"].includes(s.type)&&(l=t.checked),["check","checks"].includes(s.type)){l=[];let r=L(t).closest(".tsg-field-group").find("input:checked");r.length>0&&r.each(c=>{let d=c,u=s.options.items[L(d).data("index")];l.push(u.id)}),Array.isArray(i)||(i=[])}let a=s.TsField?.selected;if(["list","enum","file"].includes(s.type)&&a){let r=a,c=i;if(Array.isArray(r)){l=[];for(let d=0;d<r.length;d++)l[d]=p.clone(r[d])}if(Array.isArray(c)){i=[];for(let d=0;d<c.length;d++)i[d]=p.clone(c[d])}p.isPlainObject(r)&&(l=p.clone(r)),p.isPlainObject(c)&&(i=p.clone(c))}return["map","array"].includes(s.type)&&(l=s.type=="map"?{}:[],s.$el.parent().find(".tsg-map-field").each((r,c)=>{let d=L(r).find(".tsg-map.key").val(),u=L(r).find(".tsg-map.value").val();typeof s.html?.render=="function"?(l[c]??={},L(r).find("input, textarea").each(h=>{let f=h,m=f.dataset.name??f.name;m!=null&&m!=""&&(l[c][m]=["checkbox","radio"].includes(f.type)?f.checked:f.value)})):s.type=="map"?l[d]=u:l.push(u)})),{current:l,previous:i,original:o}}findItem(e,s){return s.find(t=>t.id===e||t.id===e?.id)}setFieldValue(e,s){let t=this.get(e);if(t==null)return;let i=t.el;switch(t.type){case"toggle":case"checkbox":{i.checked=!!s;break}case"radio":{s=s?.id??s;let o=L(i).closest(".tsg-field-group").find("input");t.options.items.forEach((a,r)=>{let c=o.filter(`[data-index="${r}"]`);a.id===s?c.prop("checked",!0):c.prop("checked",!1),a.hidden===!0?c.closest(".tsg-field-item").hide():c.closest(".tsg-field-item").show()});break}case"check":case"checks":{Array.isArray(s)||(s!=null?s=[s]:s=[]),s=s.map(a=>a?.id??a);let o=L(i).closest("div.tsg-field-group").find("input");t.options.items.forEach((a,r)=>{let c=o.filter(`[data-index="${r}"]`);c.prop("checked",!!s.includes(a.id)),a.hidden===!0?c.closest(".tsg-field-item").hide():c.closest(".tsg-field-item").show()});break}case"list":case"combo":{let o=s,l=t.options?.itemMap;o?.id==null&&Array.isArray(t.options?.items)&&t.options.items.forEach(a=>{p.getNested(a,l?.id??"id")===s&&(o=a)}),o?.id!=null&&o?.text==null&&Array.isArray(t.options?.items)&&t.options.items.forEach(a=>{p.getNested(a,l?.id??"id")===o.id&&(o.text=p.getNested(a,l.text??"text"))}),o!=s&&this.setValue(t.name,o,!0),t.type=="list"?(t.TsField.selected=o,t.TsField.refresh()):i.value=o?.text??s;break}case"switch":{i.value=s,t.toolbar.uncheck(...t.toolbar.get()),t.toolbar.check(s);break}case"enum":case"file":{Array.isArray(s)||(s=s!=null?[s]:[]);let o=[...s],l=!1;o.forEach((a,r)=>{a?.id==null&&Array.isArray(t.options.items)&&t.options.items.forEach(c=>{c.id==a&&(o[r]=c,l=!0)})}),l&&this.setValue(t.name,o,!0),t.TsField.selected=o,t.TsField.refresh();break}case"map":case"array":{t.type=="map"&&(s==null||!p.isPlainObject(s))&&(this.setValue(t.field,{},!0),s=this.getValue(t.field)),t.type=="array"&&(s==null||!Array.isArray(s))&&(this.setValue(t.field,[],!0),s=this.getValue(t.field));let o=L(t.el).parent().find(".tsg-map-container");t.el.mapRefresh(s,o);break}case"div":case"custom":{L(i).html(s);break}case"color":{i.value=s??"",t.TsField.refresh();break}case"html":case"empty":break;default:if(s!=null&&i._w2field?.format){let o=i._w2field;s=o.format(o.clean(s))}i.value=s??"";break}this.fields.forEach(o=>{if(o?.options?.parentList!=null){let l,a=this.getValue(o.options.parentList);if(Array.isArray(a)?a=a.map(r=>r.id):a=a?.id!=null?[a.id]:[],o.options?.items?.forEach?.(r=>{let c=p.getNested(r,o.options.parentField??"parentId");if(c==null)return;let d=p.clone(Array.isArray(c)?c:[c]);d.unshift("");let u=a.some(h=>d.includes(h));u&&r.hidden===!0?(r.hidden=!1,l=!0):!u&&r.hidden!==!0&&(r.hidden=!0,l=!0)}),l){let r=this.getValue(o.field);if(r?.id!=null&&(r=r.id),o.type=="enum"){let c=o.options.items.filter(h=>!h.hidden).map(h=>h.id),d=this.getValue(o.field);Array.isArray(d)||(d=[d]),d=d.map(h=>((typeof h=="string"||typeof h=="number")&&(h=o.options.items.find(f=>f.id==h)),h));let u=d.filter(h=>c.includes(h.id));this.setValue(o.field,u,!0)}else o.options.items.forEach(c=>{c.id==r&&c.hidden&&this.setValue(o.field,null,!0)});this.set(o.field,{items:o.options.items})}}})}show(...e){let s=[];for(let t=0;t<e.length;t++){let i=this.get(e[t]);i&&i.hidden&&(i.hidden=!1,s.push(i.field))}return s.length>0&&this.refresh(...s),this.updateEmptyGroups(),s}hide(...e){let s=[];for(let t=0;t<e.length;t++){let i=this.get(e[t]);i&&!i.hidden&&(i.hidden=!0,s.push(i.field))}return s.length>0&&this.refresh(...s),this.updateEmptyGroups(),s}enable(...e){let s=[];for(let t=0;t<e.length;t++){let i=this.get(e[t]);i&&i.disabled&&(i.disabled=!1,s.push(i.field))}return s.length>0&&this.refresh(...s),s}disable(...e){let s=[];for(let t=0;t<e.length;t++){let i=this.get(e[t]);i&&!i.disabled&&(i.disabled=!0,s.push(i.field))}return s.length>0&&this.refresh(...s),s}updateEmptyGroups(){L(this.box).find(".tsg-group").each(s=>{let t=s;e(L(t).find(".tsg-field"))?L(t).hide():L(t).show()});function e(s){let t=!0;return s.each(i=>{i.style.display!="none"&&(t=!1)}),t}}hideGroup(e){let s=[],t="";this.fields.forEach(i=>{i.html.group!=null&&i.html.group!==""&&(t=String(i.html.group).toLowerCase()),e.toLowerCase()==t&&s.push(i.field)}),this.hide(...s),this.resize()}showGroup(e){let s=[],t="";this.fields.forEach(i=>{i.html.group!=null&&i.html.group!==""&&(t=String(i.html.group).toLowerCase()),e.toLowerCase()==t&&s.push(i.field)}),this.show(...s),this.resize()}toggleGroup(e,s){let t=L(this.box).find('.tsg-group-title[data-group="'+p.base64encode(e)+'"]');if(t.length===0)return;let i=L(t.prop("nextElementSibling"));typeof s>"u"&&(s=i.css("display")=="none"),s?(i.show(),t.find("span").addClass("tsg-icon-collapse").removeClass("tsg-icon-expand")):(i.hide(),t.find("span").addClass("tsg-icon-expand").removeClass("tsg-icon-collapse"))}change(...e){e.forEach(s=>{let t=this.get(s);t.$el&&t.$el.change()})}reload(e){return(typeof this.url!="object"?this.url:this.url.get)&&this.recid!=null?this.request(e):(typeof e=="function"&&e(),new Promise(t=>{t(void 0)}))}clear(...e){e.length!=0?e.forEach(s=>{let t=this.record;String(s).split(".").map((i,o,l)=>{l.length-1!==o?t=t[i]:delete t[i]}),this.refresh(s)}):(this.recid=null,this.record={},this.original=null,this.refresh(),this.hideErrors())}error(e){let s=this.trigger("error",{target:this.name,message:e,fetchCtrl:this.last.fetchCtrl,fetchOptions:this.last.fetchOptions});s.isCancelled!==!0&&(setTimeout(()=>{this.message(e)},1),s.finish())}message(e){return p.message({owner:this,box:this.box,after:".tsg-form-header"},e)}confirm(e){return p.confirm({owner:this,box:this.box,after:".tsg-form-header"},e)}validate(e){e==null&&(e=!0);let s=[];for(let i=0;i<this.fields.length;i++){let o=this.fields[i];if(o.type=="columns"||o.field==null)continue;if(this.getValue(o.field)==null&&this.setValue(o.field,""),["int","float","currency","money"].includes(o.type)){let a=this.getValue(o.field),r=o.options.min,c=o.options.max;r!=null&&a!=null&&a<r&&s.push({field:o,error:p.lang("Should be more than ${min}",{min:r})}),c!=null&&a!=null&&a>c&&s.push({field:o,error:p.lang("Should be less than ${max}",{max:c})})}switch(o.type){case"alphanumeric":this.getValue(o.field)&&!p.isAlphaNumeric(this.getValue(o.field))&&s.push({field:o,error:p.lang("Not alpha-numeric")});break;case"int":this.getValue(o.field)&&!p.isInt(this.getValue(o.field))&&s.push({field:o,error:p.lang("Not an integer")});break;case"percent":case"float":this.getValue(o.field)&&!p.isFloat(this.getValue(o.field))&&s.push({field:o,error:p.lang("Not a float")});break;case"currency":case"money":this.getValue(o.field)&&!p.isMoney(this.getValue(o.field))&&s.push({field:o,error:p.lang("Not in money format")});break;case"color":case"hex":this.getValue(o.field)&&!p.isHex(this.getValue(o.field))&&s.push({field:o,error:p.lang("Not a hex number")});break;case"email":this.getValue(o.field)&&!p.isEmail(this.getValue(o.field))&&s.push({field:o,error:p.lang("Not a valid email")});break;case"checkbox":this.getValue(o.field)==!0?this.setValue(o.field,!0):this.setValue(o.field,!1);break;case"date":o.options.format||(o.options.format=p.settings.dateFormat),this.getValue(o.field)&&!p.isDate(this.getValue(o.field),o.options.format)&&s.push({field:o,error:p.lang("Not a valid date")+": "+o.options.format});break;case"list":case"combo":case"switch":break;case"enum":break}let l=this.getValue(o.field);o.hidden!==!0&&o.required&&!["div","custom","html","empty"].includes(o.type)&&(l==null||l===""||Array.isArray(l)&&l.length===0||p.isPlainObject(l)&&Object.keys(l).length==0)&&s.push({field:o,error:p.lang("Required field")}),o.hidden!==!0&&o.options?.minLength>0&&!["enum","list","combo"].includes(o.type)&&(l==null||l.length<o.options.minLength)&&s.push({field:o,error:p.lang("Field should be at least ${count} characters.",{count:o.options.minLength})})}let t=this.trigger("validate",{target:this.name,errors:s});if(t.isCancelled!==!0)return this.last.errors=s,e&&this.showErrors(),t.finish(),s}showErrors(){let e=this.last.errors;e.length<=0||(this.goto(e[0].field.page),L(e[0].field.$el).parents(".tsg-field").get(0).scrollIntoView({block:"nearest",inline:"nearest"}),e.forEach(s=>{let t=p.extend({anchorClass:"tsg-error",class:"tsg-light",position:"right|left",hideOn:["input","tooltip-click"]},s.options);if(s.field==null)return;let i=s.field.el;s.field.type==="radio"?i=L(s.field.el).closest("div").get(0):["enum","file"].includes(s.field.type),di.show(p.extend({anchor:i,name:`${this.name}-${s.field.field}-error`,html:s.error},t))}),this.last.errorsShown=!0,L(e[0].field.$el).parents(".tsg-page").off(".hideErrors").on("scroll.hideErrors",s=>{this.last.errorsShown&&this.showErrors()}))}hideErrors(){this.last.errorsShown=!1,this.fields.forEach(e=>{di.hide(`${this.name}-${e.field}-error`)})}getChanges(){let e={};return this.original!=null&&typeof this.original=="object"&&Object.keys(this.record).length!==0&&(e=s(this.record,this.original,{})),e;function s(t,i,o){if(Array.isArray(t)&&Array.isArray(i))for(;t.length<i.length;)t.push(null);for(let l in t)t[l]!=null&&typeof t[l]=="object"?(o[l]=s(t[l],i[l]||{},{}),(!o[l]||Object.keys(o[l]).length==0&&Object.keys(i[l].length==0))&&delete o[l]):(t[l]!=i[l]||t[l]==null&&i[l]!=null)&&(o[l]=t[l]);return Object.keys(o).length!=0?o:null}}getCleanRecord(e){let s=p.clone(this.record);return this.fields.forEach(t=>{if(!(t.type=="columns"||t.field==null)){if(["list","combo","enum"].includes(t.type)){let i={nestedFields:!0,record:s},o=this.getValue.call(i,t.field);p.isPlainObject(o)&&o.id!=null&&this.setValue.call(i,t.field,o.id),Array.isArray(o)&&o.forEach((l,a)=>{p.isPlainObject(l)&&l.id&&(o[a]=l.id)})}if(t.type=="map"){let i={nestedFields:!0,record:s},o=this.getValue.call(i,t.field);o._order&&delete o._order}if(t.type=="file"){let i={nestedFields:!0,record:s},o=this.getValue.call(i,t.field)??[];o.forEach(l=>{delete l.file,delete l.modified}),this.setValue.call(i,t.field,o)}}}),e===!0&&Object.keys(s).forEach(t=>{this.get(t)||delete s[t]}),s}request(e,s){let t=this,i,o,l=new Promise((h,f)=>{i=h,o=f});if(typeof e=="function"&&(s=e,e=null),e==null&&(e={}),!this.url||typeof this.url=="object"&&!this.url.get)return;let a={};a.action="get",a.recid=this.recid,a.name=this.name,p.extend(a,this.postData),p.extend(a,e);let r=this.trigger("request",{target:this.name,url:this.url,httpMethod:"GET",postData:a,httpHeaders:this.httpHeaders});if(r.isCancelled===!0)return;this.record={},this.original=null,this.lock(p.lang(this.msgRefresh));let c=r.detail.url;if(typeof c=="object"&&c.get&&(c=c.get),this.last.fetchCtrl)try{this.last.fetchCtrl.abort()}catch{}if(Object.keys(this.routeData).length!=0){let h=p.parseRoute(c);if(h.keys.length>0)for(let f=0;f<h.keys.length;f++){let m=h.keys[f];m==null||this.routeData[m.name]==null||(c=c.replace(new RegExp(":"+m.name,"g"),this.routeData[m.name]))}}c=new URL(c,location.href);let d=p.prepareParams(c,{method:r.detail.httpMethod,headers:r.detail.httpHeaders,body:r.detail.postData},{dataType:this.dataType,caller:this,action:"request"});return this.last.fetchCtrl=new AbortController,d.signal=this.last.fetchCtrl.signal,this.last.fetchOptions=d,fetch(c,d).catch(u).then(h=>{if(h?.status!=200){h&&u(h);return}h.json().catch(u).then(f=>{let m=t.trigger("load",{target:t.name,fetchCtrl:t.last.fetchCtrl,fetchOptions:t.last.fetchOptions,data:f});m.isCancelled!==!0&&(f.error==null&&f.status==="error"&&(f.error=!0),f.record||Object.assign(f,{record:p.clone(f)}),f.error===!0?t.error(p.lang(f.message??t.msgServerError)):t.record=p.clone(f.record),t.unlock(),m.finish(),t.refresh(),t.setFocus(),typeof s=="function"&&s(f),i(f))})}),r.finish(),l;function u(h){if(h.name==="AbortError")return;t.unlock();let f=t.trigger("error",{response:h,fetchCtrl:t.last.fetchCtrl,fetchOptions:t.last.fetchOptions});f.isCancelled!==!0&&(h.status&&h.status!=200?t.error(h.status+": "+h.statusText):(console.log("ERROR: Server request failed.",h,". ","Expected Response:",{error:!1,record:{field1:1,field2:"item"}},"OR:",{error:!0,message:"Error description"}),t.error(String(h))),f.finish(),o(h))}}submit(e,s){return this.save(e,s)}save(e,s){let t=this,i,o,l=new Promise((f,m)=>{i=f,o=m});if(typeof e=="function"&&(s=e,e=null),(t.validate(!0)?.length??0)!==0)return;if(e==null&&(e={}),!t.url||typeof t.url=="object"&&!t.url.save){console.log("ERROR: Form cannot be saved because no url is defined.");return}t.lock(p.lang(t.msgSaving)+' <span id="'+t.name+'_progress"></span>');let r={};r.action="save",r.recid=t.recid,r.name=t.name,p.extend(r,t.postData),p.extend(r,e),r.record=p.clone(t.saveCleanRecord?t.getCleanRecord():t.record);let c=t.trigger("submit",{target:t.name,url:t.url,httpMethod:this.method??"POST",postData:r,httpHeaders:t.httpHeaders});if(c.isCancelled===!0)return;let d=c.detail.url;if(typeof d=="object"&&d.save&&(d=d.save),t.last.fetchCtrl&&t.last.fetchCtrl.abort(),Object.keys(t.routeData).length>0){let f=p.parseRoute(d);if(f.keys.length>0)for(let m=0;m<f.keys.length;m++){let y=f.keys[m];y==null||t.routeData[y.name]==null||(d=d.replace(new RegExp(":"+y.name,"g"),t.routeData[y.name]))}}d=new URL(d,location.href);let u=p.prepareParams(d,{method:c.detail.httpMethod,headers:c.detail.httpHeaders,body:c.detail.postData},{dataType:this.dataType,caller:this,action:"save"});return this.last.fetchCtrl=new AbortController,u.signal=this.last.fetchCtrl.signal,this.last.fetchOptions=u,fetch(d,u).catch(h).then(f=>{if(t.unlock(),f?.status!=200){h(f??{});return}f.json().catch(h).then(m=>{let y=t.trigger("save",{target:t.name,fetchCtrl:t.last.fetchCtrl,fetchOptions:t.last.fetchOptions,data:m});y.isCancelled!==!0&&(m.error===!0?t.error(p.lang(m.message??t.msgServerError)):t.original=null,y.finish(),t.refresh(),typeof s=="function"&&s(m),i(m))})}),c.finish(),l;function h(f){if(f?.name==="AbortError")return;t.unlock();let m=t.trigger("error",{response:f,fetchCtrl:t.last.fetchCtrl,fetchOptions:t.last.fetchOptions});m.isCancelled!==!0&&(f.status&&f.status!=200?f.json().then(y=>{t.error(f.status+": "+(y.message||f.statusText))}).catch(()=>{t.error(f.status+": "+f.statusText)}):(console.log("ERROR: Server request failed.",f,". ","Expected Response:",{error:!1,record:{field1:1,field2:"item"}},"OR:",{error:!0,message:"Error description"}),t.error(String(f))),m.finish(),o())}}lock(e,s){p.lock(this.box,e,s)}unlock(e){let s=this.box;p.unlock(s,e)}lockPage(e,s,t){let i=L(this.box).find(".page-"+e);return i.length?(p.lock(i,s,t),!0):!1}unlockPage(e,s){let t=L(this.box).find(".page-"+e);return t.length?(p.unlock(t,s),!0):!1}goto(e){this.page!==e&&(e!=null&&(this.page=e),L(this.box).data("autoSize")===!0&&(L(this.box).get(0).clientHeight=0),this.refresh())}generateHTML(){let e=[],s="",t,i,o,l;for(let c=0;c<this.fields.length;c++){let d="";o=this.tabindexBase+c+1,l=' tabindex="'+o+'"';let u=this.fields[c];u.html==null&&(u.html={}),typeof u.html=="string"&&(u.html={html:u.html,span:0,attr:"tabindex"},l=""),u.options==null&&(u.options={}),u.html.caption!=null&&u.html.label==null&&(console.log("NOTICE: form field.html.caption property is deprecated, please use field.html.label. Field ->",u),u.html.label=u.html.caption),u.html.label==null&&(u.html.label=u.field),u.html.anchor!=null&&u.html.span==null&&(u.html.span=""),u.html=p.extend({label:"",span:6,attr:"",text:"",style:"",page:0,column:0},u.html),t==null&&(t=u.html.page),i==null&&(i=u.html.column);let h=`<input id="${u.field}" name="${u.field}" class="tsg-input ${u.html.class??""}" type="text" ${u.html.attr+l}>`;switch(u.type){case"pass":case"password":h=h.replace('type="text"','type="password"');break;case"checkbox":{h=`
536
+ <label class="tsg-box-label">
537
+ <input id="${u.field}" name="${u.field}" class="tsg-input ${u.html.class??""}" type="checkbox" ${u.html.attr+l}>
538
+ <span>${u.html.label}</span>
539
+ </label>`;break}case"check":case"checks":{u.options.items==null&&u.html.items!=null&&(u.options.items=u.html.items);let f=u.options.items;h=`<div class="tsg-field-group" ${u.html.attr}>`,Array.isArray(f)||(f=[]),f.length>0&&(f=p.normMenu.call(this,f,u.options));for(let m=0;m<f.length;m++)h+=`
540
+ <div class="tsg-field-item">
541
+ <label class="tsg-box-label">
542
+ <input id="${u.field+m}" name="${u.field}" class="tsg-input ${u.html.class??""}" type="checkbox"
543
+ ${l} data-value="${f[m].id}" data-index="${m}">
544
+ <span>&#160;${f[m].text}</span>
545
+ </label>
546
+ </div>`;h+="</div>";break}case"radio":{h=`<div class="tsg-field-group"${u.html.attr}>`,u.options.items==null&&u.html.items!=null&&(u.options.items=u.html.items);let f=u.options.items;Array.isArray(f)||(f=[]),f.length>0&&(f=p.normMenu.call(this,f,u.options));for(let m=0;m<f.length;m++)h+=`
547
+ <div class="tsg-field-item">
548
+ <label class="tsg-box-label">
549
+ <input id="${u.field+m}" name="${u.field}" class="tsg-input ${u.html.class??""}" type="radio"
550
+ ${m===0?l:""}
551
+ data-value="${f[m].id}" data-index="${m}">
552
+ <span>&#160;${f[m].text}</span>
553
+ </label>
554
+ </div>`;h+="</div>";break}case"select":{h=`<select id="${u.field}" name="${u.field}" class="tsg-input ${u.html.class??""}" ${u.html.attr+l}>`,u.options.items==null&&u.html.items!=null&&(u.options.items=u.html.items);let f=u.options.items;Array.isArray(f)||(f=[]),f.length>0&&(f=p.normMenu.call(this,f,u.options));for(let m=0;m<f.length;m++)h+=`<option value="${f[m].id}">${f[m].text}</option>`;h+="</select>";break}case"switch":{h=`
555
+ <div>
556
+ <div id="${u.field}-tb" class="tsg-form-switch ${u.html.class??""}" ${u.html.attr}></div>
557
+ <input id="${u.field}" name="${u.field}" ${l} class="tsg-input"
558
+ style="position: absolute; right: 0px; margin-top: -30px; width: 1px; padding: 0; opacity: 0">
559
+ <span style="position: absolute; margin-top: -2px;">${u.html.text??""}</span>
560
+ </div>
561
+ `;break}case"textarea":h=`<textarea id="${u.field}" name="${u.field}" class="tsg-input ${u.html.class??""}" ${u.html.attr+l}></textarea>`;break;case"toggle":h=`<input id="${u.field}" name="${u.field}" class="tsg-input tsg-toggle ${u.html.class??""}"
562
+ type="checkbox" ${u.html.attr+l}>
563
+ <div><div></div></div>`;break;case"map":case"array":u.html.key=u.html.key||{},u.html.value=u.html.value||{},u.html.tabindex=o,u.html.tabindex_str=l,h='<span style="float: right">'+(u.html.text||"")+'</span><input id="'+u.field+'" name="'+u.field+'" type="hidden" '+u.html.attr+l+'><div class="tsg-map-container"></div>';break;case"div":case"custom":h=`<div id="${u.field}" name="${u.field}" ${u.html.attr+l} class="tsg-input ${u.html.class??""}">`+(u&&u.html&&u.html.html?u.html.html:"")+"</div>";break;case"html":case"empty":h=`<div id="${u.field}" name="${u.field}" ${u.html.attr+l} class="tsg-input ${u.html.class??""}">`+(u&&u.html?(u.html.html||"")+(u.html.text||""):"")+"</div>";break}if(s!==""&&(t!=u.html.page||i!=u.html.column||u.html.group&&s!=u.html.group)&&(e[t][i]+=`
564
+ </div>
565
+ </div>`,s=""),u.html.group&&s!=u.html.group){let f="";u.html.groupCollapsible&&(f='<span class="tsg-icon-collapse" style="width: 15px; display: inline-block; position: relative; top: -2px;"></span>'),d+=`
566
+ <div class="tsg-group">
567
+ <div class="tsg-group-title tsg-eaction" style="`+(u.html.groupTitleStyle||"")+"; "+(f!=""?"cursor: pointer; user-select: none":"")+'"'+(f!=""?'data-group="'+p.base64encode(u.html.group)+'"':"")+(f!=""?'data-click="toggleGroup|'+u.html.group+'"':"")+">"+f+p.lang(u.html.group)+`</div>
568
+ <div class="tsg-group-fields" style="`+(u.html.groupStyle||"")+'">',s=u.html.group}if(u.type=="columns")d+=`<div class="tsg-field-columns" style="${u.style??""}">`,u.columns.forEach(f=>{d+=`<div style="${f.style}"> ${f.content} </div>`}),d+="</div>";else if(u.html.col_anchor!=null){let f=u.html.span!=null?"tsg-span"+u.html.span:"";u.html.span==-1&&(f="tsg-span-none");let m=`
569
+ <label ${f=="none"?' style="display: none"':""}>
570
+ ${p.lang(u.type!="checkbox"?u.html.label:u.html.text)}
571
+ </label>`;u.html.label||(m="");let y=u.type!="array"&&u.type!="map"?p.lang(u.type!="checkbox"?u.html.text:""):"";e[u.html.page].anchors??={},e[u.html.page].anchors[u.html.col_anchor]=`
572
+ <div class="tsg-field ${f}" style="${(u.hidden?"display: none;":"")+u.html.style}">
573
+ ${m}
574
+ ${["empty","switch","radio","check","checks"].includes(u.type)?h:`<div>${h+y}</div>`}
575
+ </div>`}else if(u.html.anchor!=null){let f=u.html.span!=null?"tsg-span"+u.html.span:"tsg-span0",m=p.lang(u.type!="checkbox"?u.html.label:u.html.text,!0),y=p.lang(u.type!="checkbox"?u.html.text:"");u.html.span==-1?m=`<span style="position: absolute"> <span class="tsg-anchor-span-none tsg-inline-label"> ${m} </span> </span>`:m=`<span class="tsg-inline-label"> ${m} </span>`,e[u.html.page].anchors??={},e[u.html.page].anchors[u.html.anchor]=`
576
+ <div class="tsg-field tsg-field-inline ${f}" style="${(u.hidden?"display: none;":"")+u.html.style}">
577
+ ${u.type==="empty"||u.type=="switch"?h:` <div>
578
+ ${m} ${h} ${y}
579
+ </div>`}
580
+ </div>`}else{let f=u.html.span!=null?"tsg-span"+u.html.span:"";u.html.span==-1&&(f="tsg-span-none");let m=`
581
+ <label ${f=="none"?' style="display: none"':""}>
582
+ ${p.lang(u.type!="checkbox"?u.html.label:u.html.text)}
583
+ </label>`;u.html.label||(m="");let y=u.type!="array"&&u.type!="map"?p.lang(u.type!="checkbox"?u.html.text:""):"";d+=`
584
+ <div class="tsg-field ${f}" style="${(u.hidden?"display: none;":"")+u.html.style}">
585
+ ${m}
586
+ ${["empty","switch","radio","check","checks"].includes(u.type)?h:`<div>${h+y}</div>`}
587
+ </div>`}e[u.html.page]==null&&(e[u.html.page]={}),e[u.html.page][u.html.column]==null&&(e[u.html.page][u.html.column]=""),e[u.html.page][u.html.column]+=d,t=u.html.page,i=u.html.column}if(s!==""&&(e[t][i]+=`
588
+ </div>
589
+ </div>`),this.tabs.tabs)for(let c=0;c<this.tabs.tabs.length;c++)e[c]==null&&(e[c]=[]);let a="";if(Object.keys(this.actions).length>0){a+=`
590
+ <div class="tsg-buttons">`,o=this.tabindexBase+this.fields.length+1;for(let c in this.actions){let d=this.actions[c],u={text:"",style:"",class:""};p.isPlainObject(d)?(d.text==null&&d.caption!=null&&(console.log("NOTICE: form action.caption property is deprecated, please use action.text. Action ->",d),d.text=d.caption),d.text&&(u.text=d.text),d.style&&(u.style=d.style),d.class&&(u.class=d.class)):(u.text=c,["save","update","create"].includes(c.toLowerCase())?u.class="tsg-btn-blue":u.class=""),a+=`
591
+ <button name="`+c+'" class="tsg-btn '+u.class+'" style="'+u.style+'" tabindex="'+o+'">'+p.lang(u.text)+"</button>",o++}a+=`
592
+ </div>`}let r="";for(let c=0;c<e.length;c++){if(r+='<div class="tsg-page page-'+c+'" style="'+(c!==0?"display: none;":"")+this.pageStyle+'">',!e[c])return console.log(`ERROR: Page ${c} does not exist`),!1;e[c].before&&(r+=e[c].before),r+='<div class="tsg-column-container">',Object.keys(e[c]).sort().forEach((d,u)=>{d==String(parseInt(d))&&(r+='<div class="tsg-column col-'+d+'">'+(e[c][d]||"")+`
593
+ </div>`)}),r+=`
594
+ </div>`,e[c].after&&(r+=e[c].after),r+=`
595
+ </div>`,e[c].anchors&&Object.keys(e[c].anchors).forEach((d,u)=>{r=r.replace(d,e[c].anchors[d])})}return r+=a,r}action(e,s){let t=this.actions[e],i=t;p.isPlainObject(t)&&t.onClick&&(i=t.onClick);let o=this.trigger("action",{target:e,action:t,originalEvent:s});o.isCancelled!==!0&&(typeof i=="function"&&i.call(this,s),o.finish())}getAction(e){let s=L(this.box).find('.tsg-buttons button[name="'+e+'"]');return s.length===0&&console.log('ERROR: Action "'+e+'" not found. Valid actions are: '+Object.keys(this.actions).join(", ")),s}actionHide(e){this.getAction(e).hide()}actionShow(e){this.getAction(e).show()}actionDisable(e){this.getAction(e).prop("disabled",!0)}actionEnable(e){this.getAction(e).prop("disabled",!1)}resize(){let e=this,s=this.trigger("resize",{target:this.name});if(s.isCancelled!==!0){if(this.box!=null){let f=function(){let m=e.header!==""?p.getSize(i,"height"):0,y=Array.isArray(e.toolbar?.items)&&e.toolbar?.items?.length>0?p.getSize(o,"height"):0,x=Array.isArray(e.tabs?.tabs)&&e.tabs?.tabs?.length>0?p.getSize(l,"height"):0;return o.css({top:m+"px"}),l.css({top:m+y+"px"}),a.css({top:m+y+x+"px",bottom:(c.length>0?p.getSize(c,"height"):0)+"px"}),{headerHeight:m,tbHeight:y,tabsHeight:x}};var t=f;let i=L(this.box).find(":scope > div .tsg-form-header"),o=L(this.box).find(":scope > div .tsg-form-toolbar"),l=L(this.box).find(":scope > div .tsg-form-tabs"),a=L(this.box).find(":scope > div .tsg-page"),r=L(this.box).find(":scope > div .tsg-page.page-"+this.page+" > div"),c=L(this.box).find(":scope > div .tsg-buttons"),{headerHeight:d,tbHeight:u,tabsHeight:h}=f();this.autosize&&((L(this.box).get(0).clientHeight===0||L(this.box).data("autosize")=="yes")&&(L(this.box).css({height:d+u+h+15+(a.length>0?p.getSize(r,"height"):0)+(c.length>0?p.getSize(c,"height"):0)+"px"}),L(this.box).data("autosize","yes")),f()),this.tabs?.resize?.(),this.toolbar?.resize?.(),this.fields.forEach(m=>{m.type=="switch"&&m.toolbar?.resize?.()})}s.finish()}}refresh(...e){let s=Date.now(),t=this;if(!this.box||!this.isGenerated||!L(this.box).html())return 0;let i=this.trigger("refresh",{target:this.name,page:this.page,field:e[0],fields:e});if(i.isCancelled===!0)return 0;let o=Array.from(this.fields.keys());e.length>0?o=e.map((l,a)=>(typeof l!="string"&&console.log("ERROR: Arguments in refresh functions should be field names"),this.get(l,!0))).filter((l,a)=>l!=null):(L(this.box).find("input, textarea, select").each(l=>{let a=l,r=L(a).attr("name")!=null?L(a).attr("name"):L(a).attr("id"),c=this.get(r);if(c){let d=L(a).closest(".tsg-page");if(d.length>0){for(let u=0;u<100;u++)if(d.hasClass("page-"+u)){c.page=u;break}}}}),L(this.box).find(".tsg-page").hide(),L(this.box).find(".tsg-page.page-"+this.page).show(),L(this.box).find(".tsg-form-header").html(p.lang(this.header)),typeof this.tabs=="object"&&Array.isArray(this.tabs.tabs)&&this.tabs.tabs.length>0?(L(this.box).find("#form_"+this.name+"_tabs").show(),this.tabs.active=this.tabs.tabs[this.page].id,this.tabs.refresh()):L(this.box).find("#form_"+this.name+"_tabs").hide(),typeof this.toolbar=="object"&&Array.isArray(this.toolbar.items)&&this.toolbar.items.length>0?(L(this.box).find("#form_"+this.name+"_toolbar").show(),this.toolbar.refresh()):L(this.box).find("#form_"+this.name+"_toolbar").hide());for(let l=0;l<o.length;l++){let a=o[l];if(a==null)continue;let r=this.fields[a];if(r==null)continue;r.name==null&&r.field!=null&&(r.name=r.field),r.field==null&&r.name!=null&&(r.field=r.name),r.$el=L(this.box).find(`[name='${String(r.name).replace(/\\/g,"\\\\")}']`),r.el=r.$el.get(0),r.el&&(r.el.id=r.name),r.TsField&&r.TsField.reset(),r.$el.off(".TsForm").on("change.TsForm",function(d){let u=t.getFieldValue(r.field);if(u==null)return;if(["enum","file"].includes(r.type)){let f=r.TsField?.helpers?.multi;L(f).removeClass("tsg-error")}this._previous!=null&&(u.previous=this._previous,delete this._previous);let h=t.trigger("change",{target:this.name,field:this.name,value:u,originalEvent:d});h.isCancelled!==!0&&(t.setValue(this.name,u.current),h.finish())}).on("input.TsForm",function(d){t.rememberOriginal();let u=t.getFieldValue(r.field);if(u==null)return;this._previous==null&&(this._previous=u.previous);let h=t.trigger("input",{target:t.name,field:r,value:u,originalEvent:d});h.isCancelled!==!0&&(t.setValue(this.name,u.current,!0),h.finish())}),r.required?r.$el.closest(".tsg-field").addClass("tsg-required"):r.$el.closest(".tsg-field").removeClass("tsg-required"),r.disabled!=null&&(r.disabled?(r.$el.data("tabIndex")==null&&r.$el.data("tabIndex",r.$el.prop("tabIndex")),r.$el.prop("disabled",!0).prop("tabIndex",-1).closest(".tsg-field").addClass("tsg-disabled")):r.$el.prop("disabled",!1).prop("tabIndex",r.$el.data("tabIndex")??r.$el.prop("tabIndex")??0).closest(".tsg-field").removeClass("tsg-disabled"));let c=r.el;c||(c=L(this.box).find("#"+r.field)),r.hidden?L(c).closest(".tsg-field").hide():L(c).closest(".tsg-field").show()}L(this.box).find("button, input[type=button]").each(l=>{L(l).off("click").on("click",function(r){let c=this.value;this.id&&(c=this.id),this.name&&(c=this.name),t.action(c,r)})});for(let l=0;l<o.length;l++){let a=o[l];if(a==null)continue;let r=this.fields[a];if(r!=null&&r.el){if(r.$el.hasClass("tsg-input")||r.$el.addClass("tsg-input"),r.type=String(r.type).toLowerCase(),r.options||(r.options={}),this.LIST_TYPES.includes(r.type)){let c=r.options.items;c==null&&(r.options.items=[]),r.type=="switch"?c.forEach((d,u)=>c[u]=typeof d!="object"?{id:d,text:d}:d):r.options.items=p.normMenu.call(this,c??[],r.options)}if(r.type=="switch"){r.toolbar&&se[this.name+"_"+r.name+"_tb"].destroy(),r.options?.items?.forEach?.(d=>d.text==null?d.text="":"");let c=p.normMenu.call(this,r.options.items,r.options)??[];c.forEach(d=>d.type??="radio"),r.toolbar=new he({box:r.$el.prev().get(0),name:this.name+"_"+r.name+"_tb",items:c,onClick(d){t.rememberOriginal();let u=t.getFieldValue(r.name);if(u==null)return;u.current=d.detail.item.id;let h=t.trigger("change",{target:r.name,field:r.name,value:u,originalEvent:d});h.isCancelled!==!0&&(t.record[r.name]=u.current,t.setFieldValue(r.name,u.current),h.finish())}}),r.$el.prev().addClass("tsg-form-switch"),r.toolbar.resize(),r.$el.off(".form-input").on("focus.form-input",d=>{let u=r.toolbar.get(r.$el.val(),!0);L(d.target).prop("_index",u),L(r.toolbar.box).addClass("tsg-tb-focus")}).on("blur.form-input",d=>{L(d.target).removeProp("_index"),L(`#${r.name}-tb .tsg-tb-button`).removeClass("over"),L(r.toolbar.box).removeClass("tsg-tb-focus")}).on("keydown.form-input",d=>{let u=L(d.target).prop("_index");switch(d.key){case"ArrowLeft":{u>0&&u--,L(`#${r.name}-tb .tsg-tb-button`).removeClass("over").eq(u).addClass("over"),L(d.target).prop("_index",u);break}case"ArrowRight":{u<r.toolbar.items.length-1&&u++,L(`#${r.name}-tb .tsg-tb-button`).removeClass("over").eq(u).addClass("over"),L(d.target).prop("_index",u);break}}if(d.keyCode==32||d.keyCode==13){t.rememberOriginal();let h=t.getFieldValue(r.name);if(h==null)return;let f=r.toolbar.items[u];h.current=f?.id;let m=t.trigger("change",{target:r.name,field:r.name,value:h,originalEvent:d});if(m.isCancelled===!0)return;t.record[r.name]=h.current,t.setFieldValue(r.name,h.current),m.finish(),L(`#${r.name}-tb .tsg-tb-button`).removeClass("over")}!d.metaKey&&!d.ctrlKey&&d.keyCode!=9&&d.preventDefault()})}if(r.type=="select"){let c=r.options.items,d="";c.forEach(u=>{d+=`<option value="${u.id}">${u.text}</option>`}),r.$el.html(d)}this.TsFIELD_TYPES.includes(r.type)&&(r.TsField=r.TsField??new ue(p.extend({},r.options,{type:r.type})),r.TsField.render(r.el)),["map","array"].includes(r.type)&&(function(c,d){d.el.mapAdd=function(u,h,f,m){let y=(u.disabled?" readOnly ":"")+(u.html.tabindex_str||""),x=`<input type="text" ${(u.html.value.attr??"")+y} class="tsg-input ${u.html.class??""} tsg-map value">${u.html.value.text||""}`;if(typeof u.html.render=="function"?(x=u.html.render.call(t,{empty:m===!0,ind:f,field:u,div:h}),u.el._errorDisplayed||(j.html(x).filter("input, textarea").each(b=>{let g=b,v=g.dataset.name??g.name;(v==null||v=="")&&console.log(`ERROR: All inputs of the field %c"${u.name}"%c must have name attribute defined. No name for %c${g.outerHTML}`,"color: blue","","color: red")}),u.el._errorDisplayed=!0)):u.type=="map"&&(x=`<input type="text" ${(u.html.key.attr??"")+y} class="tsg-input ${u.html.class??""} tsg-map key">
596
+ ${u.html.key.text||""}
597
+ `+x),h.append(`<div class="tsg-map-field" style="margin-bottom: 5px" data-index="${f}">${x}</div>`),typeof u.html.render=="function"){let b=h.find(`[data-index="${f}"]`);b.find("input, textarea").each(g=>{L(g).attr("tabindex")==null&&L(g).attr("tabindex",u.html.tabindex)}),typeof u.html.onRefresh=="function"&&u.html.onRefresh.call(t,{index:f,empty:m,box:b.get(0)})}},d.el.mapRefresh=function(u,h){let f=[],m,y;d.type=="map"&&(p.isPlainObject(u)||(u={}),u._order==null&&(u._order=Object.keys(u)),f=u._order),d.type=="array"&&(Array.isArray(u)||(u=[]),f=u.map((w,T)=>T)),h.find(".tsg-map-field").remove();for(let w=0;w<f.length;w++){let T=f[w],_=h.find(`div[data-index='${w}']`);if(_.length==0&&(d.el.mapAdd(d,h,w),_=h.find(`div[data-index='${w}']`)),_.attr("data-key",T),typeof d.html?.render=="function"){let C=u[T];_.find("input, textarea").each(D=>{let O=D,I=O.dataset.name??O.name;O.type=="checkbox"||O.type=="radio"?O.checked=C[I]??!1:O.value=C[I]??""})}else{m=_.find(".tsg-map.key"),y=_.find(".tsg-map.value");let C=u[T];if(d.type=="array"){let D=u.filter(O=>O?.key==T);D.length>0&&(C=D[0].value)}m.val(T),y.val(C),(d.disabled===!0||d.disabled===!1)&&(m.prop("readOnly",!!d.disabled),y.prop("readOnly",!!d.disabled))}typeof d.html.onRefresh=="function"&&d.html.onRefresh.call(t,{index:w,box:h.find(`[data-index="${w}"]`).get(0)})}typeof d.html.render=="function"&&(y=h.find(".tsg-map-field:last-child input:first-child"));let x=f.length,b=h.find(`div[data-index='${x}']`);b.length===0&&(!m||m.val()!=""||y.val()!="")&&!(m&&(m.prop("readOnly")===!0||m.prop("disabled")===!0))&&d.el.mapAdd(d,h,x,!0),(d.disabled===!0||d.disabled===!1)&&(b.find(".key").prop("readOnly",!!d.disabled),b.find(".value").prop("readOnly",!!d.disabled));let g=null,v=L(d.el).get(0)?.nextSibling;L(v).off(".mapChange").on("mouseup.mapChange",{delegate:"input, textarea"},function(w){document.activeElement!=w.target&&w.target.focus()}).on("keyup.mapChange",{delegate:"input, textarea"},function(w){let T=w,_=L(T.target).closest(".tsg-map-field"),C=_.get(0).nextElementSibling,D=_.get(0).previousElementSibling,O=L(T.target).hasClass("key")?"key":"value";if(T.keyCode==38&&D&&(L(D).find(`input.${O}, textarea.${O}, input[name="${T.target.name}"] textarea[name="${T.target.name}"]`).get(0)?.select(),T.preventDefault()),T.keyCode==40&&C){T.target.blur();let I=_.get(0).nextElementSibling;L(I).find(`input.${O}, textarea.${O}, input[name="${T.target.name}"] textarea[name="${T.target.name}"]`).get(0)?.select(),T.preventDefault()}}).on("keydown.mapChange",{delegate:"input, textarea"},function(w){let T=w;g=null,T.keyCode==9&&(g="tab"),T.keyCode==13&&(g="enter"),(T.keyCode==38||T.keyCode==40)&&(g=T.keyCode==38?"up":"down",T.preventDefault())}).on("input.mapChange",{delegate:"input, textarea"},function(w){let T=L(w.target).closest("div.tsg-map-field"),_=T.data("index"),C=T.get(0).nextElementSibling,D=!0;L(T).find("input, textarea").each(I=>{let R=I;!["checkbox","button"].includes(R.type)&&R.value!=""&&(D=!1)});let O=!0;L(C).find("input, textarea").each(I=>{let R=I;!["checkbox","button"].includes(R.type)&&R.value!=""&&(O=!1)}),!D&&!C?d.el.mapAdd(d,h,parseInt(_)+1,!0):D&&C&&O&&L(C).remove()}).on("change.mapChange",{delegate:"input, textarea"},function(w){let T=w;t.rememberOriginal();let _=t.getFieldValue(d.field);if(_==null)return;let{current:C,previous:D,original:O}=_,I=L(T.target).closest(".tsg-map-container");typeof d.html?.render=="function"?C=C.filter(Y=>{let ee=[...new Set(Object.values(Y).filter(Te=>typeof Te!="boolean"))];return!(ee.length==0||ee.length==1&&ee[0]==="")}):d.type=="map"?(C._order=[],I.find(".tsg-map.key").each(Y=>{C._order.push(Y.value)}),C._order=C._order.filter(Y=>Y!==""),delete C[""]):d.type=="array"&&(C=C.filter(Y=>Y!==""));let R=t.trigger("change",{target:d.field,field:d.field,originalEvent:T,value:{current:C,previous:D,original:O}});if(R.isCancelled===!0)return;let F,S="",$=L(T.target).closest(".tsg-map-container");d.type=="array"||g=="tab"?$.find("input, textarea").each((Y,ee)=>{Y==T.target&&(F=ee)}):(S=L(T.target).hasClass("key")?".key":".value",$.find("input"+S+", textarea"+S).each((Y,ee)=>{Y==T.target&&(F=ee)})),t.setValue(d.field,C);let H,Q=F??0;g=="tab"?H=$.find("input, textarea").get(Q+1):g=="enter"&&$.find("input.value, textarea.value").length>0?(S==".key"?H=$.find("input.key, textarea.key").get(Q+1):H=$.find("input.value, textarea.value").get(Q+1),H==null&&(H=$.find("input, textarea").get(Q+(T.shiftKey?-1:1)))):H=$.find("input"+S+", textarea"+S).eq(Q+(g=="up"?-1:1)).get(0),H&&(H.focus(),H.select()),R.finish()})}})(this,r),this.setFieldValue(r.field,this.getValue(r.name))}}return i.finish(),this.resize(),Date.now()-s}render(e){let s=Date.now(),t=this;typeof e=="string"&&(e=L(e).get(0));let i=this.trigger("render",{target:this.name,box:e??this.box});if(i.isCancelled===!0||(e!=null&&(this.unmount(),this.box=e),!this.isGenerated&&!this.formHTML)||!this.box)return;let o='<div class="tsg-form-box">'+(this.header!==""?'<div class="tsg-form-header">'+p.lang(this.header)+"</div>":"")+' <div id="form_'+this.name+'_toolbar" class="tsg-form-toolbar" style="display: none"></div> <div id="form_'+this.name+'_tabs" class="tsg-form-tabs" style="display: none"></div>'+this.formHTML+"</div>";if(L(this.box).attr("name",this.name).addClass("tsg-reset tsg-form").html(o),L(this.box).length>0&&(L(this.box).get(0).style.cssText+=this.style),p.bindEvents(L(this.box).find(".tsg-eaction"),this),typeof this.toolbar.render!="function"&&(this.toolbar=new he(p.extend({},this.toolbar,{name:this.name+"_toolbar",owner:this})),this.toolbar.on("click",function(a){let r=t.trigger("toolbar",{target:a.target,originalEvent:a});r.isCancelled!==!0&&r.finish()})),typeof this.toolbar=="object"&&typeof this.toolbar.render=="function"&&this.toolbar.render(L(this.box).find("#form_"+this.name+"_toolbar").get(0)),typeof this.tabs.render!="function"&&(this.tabs=new ve(p.extend({},this.tabs,{name:this.name+"_tabs",owner:this,active:this.tabs.active})),this.tabs.on("click",function(a){t.goto(this.get(a.target,!0))})),typeof this.tabs=="object"&&typeof this.tabs.render=="function"&&(this.tabs.render(L(this.box).find("#form_"+this.name+"_tabs").get(0)),this.tabs.active&&this.tabs.click(this.tabs.active)),i.finish(),this.resize(),(typeof this.url!="object"?this.url:this.url.get)&&this.recid!=null?this.request().catch(a=>this.refresh()):this.refresh(),this.last.observeResize=new ResizeObserver(()=>{this.resize()}),this.last.observeResize.observe(this.box),this.focus!=-1){let a=0,r=()=>{L(t.box).find("input, select, textarea").length>0?t.setFocus():(a++,a<20&&setTimeout(r,50))};r()}return Date.now()-s}unmount(){super.unmount(),this.tabs?.unmount?.(),this.toolbar?.unmount?.(),this.last.observeResize?.disconnect()}destroy(){let e=this.trigger("destroy",{target:this.name});e.isCancelled!==!0&&(this.tabs?.destroy?.(),this.toolbar?.destroy?.(),L(this.box).find("#form_"+this.name+"_tabs").length>0&&this.unmount(),this.last.observeResize?.disconnect(),delete se[this.name],e.finish())}setFocus(e){typeof e>"u"&&(e=this.focus);let s;if(p.isInt(e)){if(e<0)return;let t=L(this.box).find("div:not(.tsg-field-helper) > input, select, textarea, div > label:nth-child(1) > [type=radio]").filter(":not(.file-input)");for(;t.get(e)?.offsetParent==null&&t.length>e;)e++;t.get(e)&&(s=L(t.get(e)))}else typeof e=="string"&&(s=L(this.box).find(`[name='${e}']`));return s?.length>0&&s.get(0).focus(),s}};0&&(module.exports={Tooltip,TsAlert,TsBase,TsColor,TsConfirm,TsDate,TsDialog,TsEvent,TsField,TsForm,TsGrid,TsLayout,TsLocale,TsMenu,TsPopup,TsPrompt,TsSidebar,TsTabs,TsToolbar,TsTooltip,TsUi,TsUtils,query});
598
+ /*
599
+ * @author Lauri Rooden (https://github.com/litejs/natural-compare-lite)
600
+ * @license MIT License
601
+ */
602
+
603
+
604
+ // Compatibility with CommonJS and AMD modules
605
+ !(function(global, TsUi) {
606
+ if (typeof define == 'function' && define.amd) {
607
+ return define(() => TsUi)
608
+ }
609
+ if (typeof exports != 'undefined') {
610
+ if (typeof module != 'undefined' && module.exports) {
611
+ return exports = module.exports = TsUi
612
+ }
613
+ global = exports
614
+ }
615
+ if (global) {
616
+ Object.keys(TsUi).forEach(key => {
617
+ global[key] = TsUi[key]
618
+ })
619
+ }
620
+ })(self, {
621
+ TsUi, TsUtils, query, TsLocale, TsEvent, TsBase,
622
+ TsPopup, TsAlert, TsConfirm, TsPrompt, TsDialog,
623
+ TsTooltip, TsMenu, TsColor, TsDate, Tooltip,
624
+ TsToolbar, TsSidebar, TsTabs, TsLayout, TsGrid, TsForm, TsField
625
+ });